ТЕХНИКА ОПТИМИЗАЦИИ ПРОГРАММ

       

Архитектура и характеристики кэшей современных микропроцессоров


Перечислять технические характеристики кэшей всех современных микропроцессоров – занятие неблагодарное, однако, крайне необходимое! Ведь код, оптимальный для одного процессора, может оказаться крайне неоптимальным для другого!

Важнейшей характеристикой является размер

кэша первого уровня. Наиболее интенсивно используемые структуры данных обязательно должны быть организованы так, чтобы полностью умещаться в нем. При обработке больших массивов данных следует ограничить свой "аппетит", по крайней мере, размером кэша второго уровня

и уж в самом крайнем случае "вылетать" в оперативную память (подробнее см. "Оптимизация обращения к памяти и кэшу. Влияние размера обрабатываемых данных на производительность")

Проблема в том, что размер кэшей в зависимости от модели процессора варьируется в очень широких пределах – попробуй, выбери, на какой из них рассчитывать. Если есть такая возможность, программисту настоятельно рекомендуется оптимизировать свою программу под кэш минимального уровня и "обкатывать" ее на процессоре именно с таким кэшем. С другой стороны, разумно ориентироваться на наиболее распространенные модели процессоров (вот только как узнать – какая модель будет наиболее распространенной к моменту завершения программы?)

Вторая по значимости характеристика – степень ассоциативности и размер банков кэша. Если степень ассоциативности окажется хотя бы на единицу меньшей, чем это вам необходимо, кэш будет работать вхолостую, под час в десятки раз снижая производительность. Чтобы этого не произошло, программист должен следить, чтобы интенсивно используемые данные по возможности не располагались по адресам, кратным размерам банков кэша. А это требование очень трудно обеспечить – размеры банков кэша варьируются в очень широких пределах, да и их ассоциативность тоже. Чтобы быть уверенным в отсутствии коллизий, необходимо тестировать программу на всех доступных процессорах и при необходимости, корректировать размещение структур данных. (подробнее см. "Оптимизация обращения к памяти и кэшу. Учет ограниченной ассоциативности кэша")


Третье – политика записи. От нее зависит: насколько эффективно выполняется операция записи в память. Все кэши современных процессоров поддерживают режим прямой записи с буферизацией и обратную запись, но количество буферов непостоянно и варьируется от процессора к процессору – от двух 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

Таблица 2 Основные характеристики L1 и L2 кэшей современных процессоров


Содержание раздела