Кэш – память и принципы ее организации, страница 7

Если разместить их в памяти, не выравнивая на границу четырехбайтного блока, например, по соображению экономии памяти, то половина слов (два из каждых четырех) будет распределена по двум строкам буфера (Рис.IV.5). Такое решение

 
 приведет к тому, что достаточно часто каждая попытка доступа к одному информационному слову закончится двумя неудачными обращениями к кэш-памяти. Выравнивание слова на границу слова позволит уменьшить число неудачных обращений к буферу до одного в расчете на слово, то есть в два раза. А это уже весьма существенное значение.

Следует отметить, что подобные приемы могут оказаться очень эффективными в тех случаях, когда важно время выполнения программы или какой-либо ее части, а все используемые ранее методы оптимизации не дали требуемого результата.

В заключение приведем обобщенную блок-схему алгоритма выполнения запроса к памяти в системе, использующей кэширование (рис.IV.6).

                   Рис.IV.6. Блок-схема алгоритма выполнения запроса к памяти в

                                          системе, использующей кэширование.

                      4. Двухуровневое кэширование.

 В современных компьютерах используется не одна ступень кэш-памяти, а две, а в некоторых даже три. Кэш-память непосредственно связанная с процессором носит название кэш-памяти первого уровня: кэш Level 1 (кэш L1).

  Рис.IV.7  Блок-схема алгоритма выполнения запроса на чтение в системе с

                     двухуровневой кэш-памятью.

Кэш-память, расположенная между кэш L1 и основной памятью носит название кэш-памяти второго уровня (кэш L2), а кэш-память, расположенная между кэш L2 и основной памятью называется кэш-памятью третьего уровня (кэш L3).

Объем кэш L1 в современных процессорах обычно имеет размеры 64 Кбайт (32 Кбайт для инструкций и 32 Кбайт для данных) и время доступа 1-2 тактовых интервала CPU. Отметим, правда, что, в процессоре Pentium 4, в кэш L1 инструкций хранятся не их коды, а последовательности микрокоманд, в которые уже декодированы инструкции (до 12К микрокоманд). Поэтому, такой кэш обычно называют не кэш инструкций, а кэш трассы (tracecache).

Объем кэш L2 – 256…2048 Кбайт со временем доступа 3-5 тактовых интервала, а объем кэш L3 достигает 12 Мбайт и даже больше.

Для пояснения функционирования двухуровневой кэш-памяти, в упрощенном виде, на рис.IV.7 и рис.IV.8 изображены обобщенные блок-схемы алгоритмов выполнения ими запросов на чтение и на запись соответственно.

  Рис.IV.8. Блок-схема алгоритма выполнения запроса на запись  с

                 двухуровневой кэш-памятью.

                 4. Пакетный режим обмена информацией

Обмен информацией между ОЗУ и кэш-памятью должен осуществляться с максимально-возможной скоростью, чтобы свести к минимуму количество тактов ожидания процессора. Этот обмен осуществляется блоками данных, размер которых соответствует длине строки кэш-памяти. Для ускорения операции пересылки строк кэш-памяти используется так называемый режим пакетной передачи (BurstMode), или передача пакетными циклами. При этом, под пакетом понимается упомянутый блок данных, передаваемый за одно обращение к памяти. Иллюстрация посылки адресной информации и пакетов данных процессорами семейства Х86 приведена на рис.IV.9.

Сутью пакетной передачи является то, что адрес на адресную шину процессор выставляет всего один раз за время пакетного цикла. Этот адрес является адресом первой посылки данных в пакете. Адреса последующих посылок пакета формируются непосредственно в самой памяти специальным контроллером. Так при строке кэш-памяти равной 16 байтам, характерной для процессоров i486, пакет состоит из четырех посылок, размером 4 байта каждая. Размер посылки определяется разрядностью шины данных, которая у процессоров i486 составляет 32 бита.

Рис.IV.9  Иллюстрация посылки адресной информации и пакетов данных в

                                 процессорах семейства Х86.

Адрес, выставляемый процессором в начале пакетного цикла на адресную шину, будет состоять из двух частей: неизменяемые за время пакетного цикла 28 старших бит адреса A[31:4] и, изменяемые контроллером памяти, биты A[3,2], а также сигналы управления байтами BE[3:0].

Строка кэш-памяти процессоров Pentium+ равна 32 байтам, но, поскольку у них разрядность шины данных увеличена до 64 бит, то одна строка передается пакетом также за 4 такта (по 8 байт за каждый такт). И в этом случае адресная посылка генерируется процессором за время передачи пакета тоже только один раз. При этом биты адреса A[31:5] (или A[35:5] – для процессоров Pentium Pro+) остаются неизменяемыми во время передачи пакета, а биты A[4,3] и сигналы разрешения байт BE[7:0], определяются и изменяются контроллером самой памяти.

Описанная технология пакетной передачи данных позволяет существенно ускорить пересылку информации между ОЗУ и кэш-памятью. Так, если время доступа к оперативной памяти (т.е. время обращения к памяти по случайным адресам) сейчас равно 40…60 нс, то время цикла, (т.е. интервал времени между двумя пересылками в пакете) составляет 8…10 нс.

 Кстати, следует отметить, что режим пакетной передачи данных используется не только при обмене информацией между оперативной и кэш-памятью. Так, например, пакетный режим используется при регенерации памяти и в ряде других случаев, где он может быть в принципе применен. Любая последовательность циклов чтения может быть преобразована в пакетный цикл.

С другой стороны надо иметь в виду, что быстродействие динамической оперативной памяти существенно отстает от быстродействия статической кэш-памяти (у ОЗУ время доступа сейчас 40…60 нс, а у статической кэш-памяти не превышает единиц нс). Кроме того, специфика функционирования динамической памяти требует нескольких тактов задержки перед выдачей пакета данных. Поэтому реальный обмен информацией между процессором и ОЗУ занимает большее число тактов, по сравнению с теоретически рассмотренным ранее.