2016-06-01 5 views
1

다음과 같은 64 비트 숫자의 32 개 요소로 배열을 만들고 싶습니다. long int arr [32];배열을 캐시 라인 크기에 맞게 저장하는 방법

그러나 내 캐시 라인 크기는 64 바이트입니다. 내 배열이 캐시 시스템에 전혀 가지 않거나 오히려 일부 요소가 수행한다는 것을 의미합니까?

내 배열을 다음과 같이 2 차원으로 분할하면 캐시에 적합합니까? long int arr [4] [8]; ?

+0

분할 방법에 상관없이 64 바이트에 256 바이트를 맞출 수 없습니다. – Barmar

+1

중요한 것은 배열에 순차적으로 액세스하면 캐시 누락을 최소화 할 수 있다는 것입니다. – Barmar

+0

어쩌면 내가 4 배열 arr1 [8], arr2 [8], arr3 [8], arr4 [8] 어디 완벽하게 캐시 라인에 맞게해야합니까? 메모리에 대한 액세스를 피하고 싶지만 어레이에 대한 액세스는 순차적이지 않을 수 있습니다. – Tunga

답변

1
  1. 배열은 256 바이트이므로 하나의 64 바이트 캐시 라인에 맞지 않습니다.
  2. 배열을 분할해도 크기가 줄어들지 않으므로 # 1이 계속 적용됩니다.
  3. CPU에 캐시 라인이 여러 개 있기 때문에 걱정되는 캐시에 256 바이트가 적합 할 가능성이 큽니다.
+0

"추가 할 수 있습니다. 실제로 할 수있는 유일한 일은 배열의 시작이 캐시 라인 경계에 정렬되도록하는 것입니다. 따라서 전체 캐시 라인을 4 개 필요로하고 (예 :) 캐시 라인 다음 3 전체 캐시 라인 다음 또 다른 절반 캐시 라인. " – Brendan

+0

Brendan - 어떻게 할 수 있습니까? – Tunga