2016-06-01 6 views
1

Я хочу иметь массив с 32 элементами из 64-битных чисел: long int arr [32];Как сохранить массив в соответствии с размером строки кеша

однако мой размер строки кеша составляет 64 байта. Означает ли это, что мой массив вообще не войдет в систему кэширования или, скорее, некоторые из элементов будут делать?

Помогло бы установить кеш, если бы я разделил свой массив на двумерный: long int arr [4] [8]; ?

+0

Не имеет значения, как вы разделили его, вы не можете поместить 256 байтов в 64 байта. – Barmar

+1

Все, что имеет значение, заключается в том, что вы последовательно получаете доступ к массиву, что минимизирует промахи в кэше. – Barmar

+0

Возможно, у меня должно быть 4 массива arr1 [8], arr2 [8], arr3 [8], arr4 [8], где все отлично вписываются в строку кеша? Я хочу избежать доступа к памяти, но доступ к массивам может быть не последовательным. – Tunga

ответ

1
  1. Ваш массив равен 256 байтам, поэтому он не будет входить в одну строку с байтом 64 байта.
  2. Разделение массива не уменьшит его размер, поэтому # 1 все еще применяется.
  3. Ваш процессор имеет несколько строк кеша, поэтому очень вероятно, что 256 байтов будут вписываться в любой кеш, который вас беспокоит.
+0

Добавил бы «4. Единственное, что вы можете сделать, это действительно полезно, чтобы гарантировать, что начало массива выровнено на границе строки кэша, так что он занимает 4 полные строки кеша и не принимает (например, половину кэш-линии, а затем 3 полные строки кэша, а затем еще одну половину строки кэша ». – Brendan

+0

Брендан - как я могу это сделать (чтобы обеспечить)? – Tunga