Архитектура и характеристики кэшей современных микропроцессоров
Перечислять технические характеристики кэшей всех современных микропроцессоров – занятие неблагодарное, однако, крайне необходимое! Ведь код, оптимальный для одного процессора, может оказаться крайне неоптимальным для другого!
Важнейшей характеристикой является размер
кэша первого уровня. Наиболее интенсивно используемые структуры данных обязательно должны быть организованы так, чтобы полностью умещаться в нем. При обработке больших массивов данных следует ограничить свой "аппетит", по крайней мере, размером кэша второго уровня
и уж в самом крайнем случае "вылетать" в оперативную память (подробнее см. "Оптимизация обращения к памяти и кэшу. Влияние размера обрабатываемых данных на производительность")
Проблема в том, что размер кэшей в зависимости от модели процессора варьируется в очень широких пределах – попробуй, выбери, на какой из них рассчитывать. Если есть такая возможность, программисту настоятельно рекомендуется оптимизировать свою программу под кэш минимального уровня и "обкатывать" ее на процессоре именно с таким кэшем. С другой стороны, разумно ориентироваться на наиболее распространенные модели процессоров (вот только как узнать – какая модель будет наиболее распространенной к моменту завершения программы?)
Вторая по значимости характеристика – степень ассоциативности и размер банков кэша. Если степень ассоциативности окажется хотя бы на единицу меньшей, чем это вам необходимо, кэш будет работать вхолостую, под час в десятки раз снижая производительность. Чтобы этого не произошло, программист должен следить, чтобы интенсивно используемые данные по возможности не располагались по адресам, кратным размерам банков кэша. А это требование очень трудно обеспечить – размеры банков кэша варьируются в очень широких пределах, да и их ассоциативность тоже. Чтобы быть уверенным в отсутствии коллизий, необходимо тестировать программу на всех доступных процессорах и при необходимости, корректировать размещение структур данных. (подробнее см. "Оптимизация обращения к памяти и кэшу. Учет ограниченной ассоциативности кэша")
Третье – политика записи. От нее зависит: насколько эффективно выполняется операция записи в память. Все кэши современных процессоров поддерживают режим прямой записи с буферизацией и обратную запись, но количество буферов непостоянно и варьируется от процессора к процессору – от двух 64-битных буфера младших моделей Intel Pentium до двенадцати у Pentium?III (подробнее см. "Оптимизация обращения к памяти и кэшу. Особенности буферизации записи").
Четвертое – длина кэш-линий. В последних процессорах от Intel и AMD она расширена до 64 байт. Но больше – еще не значит лучше. Упреждающая загрузка наиболее эффективна именно при последовательной обработке данных, иначе кэш будет работать вхолостую.
Помимо перечисленных существует еще и масса других факторов, но и без того уже ясно: оптимизация кода под все микропроцессоры сразу – занятие не для слабонервных.
В приведенной ниже таблице (см. табл. 2) перечислены основные характеристики кэшей распространенных процессоров.
процессор характеристика |
Pentium II CELERON |
Pentium III CELERON |
Pentium 4 |
Athlon |
||||||||||||
L1 |
размер (полный) |
32 Кб |
32 Кб |
н/д |
128 Кб |
|||||||||||
тип |
раздельный |
раздельный |
раздельный |
раздельный |
||||||||||||
К О Д |
размер |
16 Кб |
16 Кб |
12K ops |
64 Кб |
|||||||||||
протокол |
SI |
SI |
? |
SI |
||||||||||||
ассоциативность |
4-way |
4-way |
4? |
2 |
||||||||||||
размер линеек |
32 байта |
32 байта |
6 mOPs |
64 байт |
||||||||||||
банков в линии *1 |
1 |
1 |
н/д |
? |
||||||||||||
размер банка *2 |
4 Кб |
4 Кб |
н/д |
32 Кб |
||||||||||||
кол-во портов |
1 |
1 |
1? |
1? |
||||||||||||
алгоритм замещения |
LRU |
LRU |
? |
LRU |
||||||||||||
политика записи |
– |
– |
? |
– |
||||||||||||
блокировка |
не блок.? |
не блок.? |
не блок.? |
не блок.? |
||||||||||||
частота |
1.0 x ядра |
1.0 x ядра |
1.0 x ядра |
1.0 x ядра |
||||||||||||
время доступа |
нормальное |
1 такт |
1 такт |
1 такт |
1 такт |
|||||||||||
line-splint |
6 – 12 тактов |
6 – 12 тактов |
н/д |
н/д |
||||||||||||
Д А Н Н Ы Е |
размер |
16 Кб |
16 Кб |
8 Кб |
64 Кб |
|||||||||||
протокол |
MESI |
MESI |
MESI |
MOESI |
||||||||||||
ассоциативность |
4-way |
4-way |
4-way |
2-way |
||||||||||||
размер линеек |
32 байта |
32 байта |
64 байта |
64 байта |
||||||||||||
банков в линии *1 |
8 |
8 |
8? |
8? |
||||||||||||
размер банка *2 |
4 Кб |
4 Кб |
2 Кб |
32 Кб |
||||||||||||
кол-во портов |
2 |
2 |
2 |
2 |
||||||||||||
алгоритм замещения |
LRU |
LRU |
LRU |
LRU |
||||||||||||
политика записи |
WA |
WA |
WT |
WA |
||||||||||||
блокировка |
не блок. |
не блок. |
не блок. +4 |
не блок. |
||||||||||||
частота |
1.0 x ядра |
1.0 x ядра |
1.0 x ядра |
1.0 x ядра |
||||||||||||
время доступа |
||||||||||||||||
L2 |
размещение |
unified |
on-die |
unified |
on-die |
on-die |
? |
|||||||||
размер, Кб |
128, 256, 512, > |
128, 256, 512, > |
128, 256, 512, > |
512,1024,2048 |
||||||||||||
тип *3 |
inclusive |
inclusive |
exclusive |
inclusive |
exclusive |
|||||||||||
протокол |
MESI |
MESI |
MESI |
MESI |
||||||||||||
ассоциативность |
4-way |
4 |
8 |
4 |
8 |
2 |
16 |
|||||||||
размер кэш-линий |
32 байта |
32 |
64x2 |
64? |
||||||||||||
размер банка, Кб |
32, 64, 128 |
32, 64, 128 |
32, 64, 128 |
32 |
64 |
128 |
||||||||||
кол-во портов |
1? |
1? |
1? |
1? |
||||||||||||
алгоритм замещения |
LRU *3 |
LRU |
LRU |
LRU |
||||||||||||
политика записи |
WB |
WB |
WB |
WB |
||||||||||||
блокировка |
не блок. |
не блок. |
не блок. |
не блок.? |
||||||||||||
частота |
0.5x |
1.0x |
0.5x |
1.0x |
? |
1.0х |
||||||||||
время доступа |
10 тактов? |
4 такта? |
2 такта? |
8? |
||||||||||||
формула |
2-1-1-1 |
1-1-1-1 |
1-1-1-1 |
1-1-1-1 |
||||||||||||
ROB, входов |
40 |
40 |
? |
? |
||||||||||||
RS, входов |
20 |
20 |
? |
? |
||||||||||||
Read Buffer |
4x32 байт? |
4x32 байт? |
? |
? |
||||||||||||
Write Buffer |
32 байт? |
32 байт? |
6 x 64 байт |
? |
||||||||||||
частота системной шины, MHz |
66 |
100 |
66 |
100 |
133 |
100x4 |
133x4 |
100х2 |
||||||||
разрядность шины |
L2 ßà L1 |
64 |
256 |
256 |
64 |
|||||||||||
L2 ßà DRAM |
64 |
64 |
64 / 128? |
64 |
||||||||||||