Строка кэша является основной единицей кэширования. Обычно это 16-64 байта или более.
Pentium IV: 64 байта; Pentium Pro / II: 32 байта; Pentium I: 32 байта; 486: 16 байтов.
myrandomreader:
; ...
; ten instructions to generate next pseudo-random
; address in ESI from previous address
; ...
MOV EAX, DS:[ESI] ; X
LOOP myrandomreader
Для чтения из памяти, расположенной на двух линиях кеша:
(для пропуска кэша L1) процессор должен дождаться, пока вся строка кэша 1 будет считана из L2-> L1 в процессор, прежде чем он сможет запросить вторую строку кэша, что приведет к короткому останову выполнения
(для пропуска кэша L2) процессор должен ждать двух пакетных чтений из кэша L3 (если имеется) или основной памяти, чтобы завершить, а не один
Процессор останавливается
Случайное 4-байтовое чтение будет охватывать границу кэширования примерно в 5% времени для 64-байтовых кэшированных строк, 10% для 32-байтовых и 20% для 16-байтовых.
Могут быть дополнительные накладные расходы на выполнение некоторых инструкций по смещенным данным, даже если они находятся в пределах кэша. Об этом говорится на веб-сайте Intel для некоторых инструкций SSE.
Если вы сами определяете структуры, возможно, имеет смысл взглянуть на перечисление всех <32-битных полей данных вместе в <code>struct, чтобы уменьшить накладные расходы на заполнение, или в качестве альтернативы проверить, лучше ли перевернуть упаковку вкл или выкл для конкретной структуры.
На MIPS и многих других платформах у вас нет выбора и вы должны выполнить выравнивание - исключение ядра, если вы этого не сделаете !!
Выравнивание может также иметь особое значение для вас, если вы выполняете ввод / вывод на шине или используете атомарные операции, такие как атомарное увеличение / уменьшение или если вы хотите иметь возможность переносить свой код на не-Intel.
В коде только (!) Intel распространенной практикой является определение одного набора упакованных структур для сети и диска и другого дополненного набора для оперативной памяти и наличие подпрограмм для преобразования данных между этими форматами (также учитывайте «порядковый номер» для дисков и сетевых форматов).