Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пос Орг ЭВМ для Вер.ЕС.doc
Скачиваний:
28
Добавлен:
19.09.2019
Размер:
2.93 Mб
Скачать
      1. Методы замещения строк кэш-памяти

Способ определения строки, удаляемой из кэш-памяти, называется стратегией замещения. Для замещения строк кэш-памяти существует несколько методов:

  • замещение строки, к которой наиболее длительное время не было обращения (метод LRU);

  • первая загруженная в кэш-память строка замещается первой (метод FIFO);

  • произвольное замещение.

Реализация этих методов упрощается в указанной последовательности, но наибольшим эффектом обладает метод замещения наиболее давнего по использованию объекта (строки).

Для реализации этого метода необходимо манипулировать строками, которые являются объектами замещения, с помощью LRU-стека. При каждой загрузке в этот стек помещается строка, в результате чего при замене используется строка, хранящаяся в наиболее глубокой позиции стека, и эта строка удаляется из стека. При доступе к строке, которая уже содержится в LRU-стеке, эта строка удаляется из стека и заново загружается в него. Стек типа LRU устроен таким образом, что, чем дольше к строке не было доступа, тем в более глубокой позиции она располагается. Реализация стека типа LRU, позволяющего с высокой скоростью выполнять такую операцию, усложняется по мере увеличения числа строк.

      1. МУбран абзац ногоуровневая организация кэша

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

Большинство современных компьютеров имеют два или три уровня кэш-памяти. Первый, наиболее «близкий» к ядру процессора (L1), обычно реализуется на быстрой двухпортовой синхронной статической памяти, работающей на полной частоте ядра. Объём L1-кэша весьма невелик, составляет 64 КВ или 128 КВ и разделяется пополам на два кэша данных и команд для каждого ядра процессора. Латентность кэша L1 измеряется 3-мя, 4-мя тактами. На втором уровне расположен кэш L2. Он реализуется на однопортовой конвейерной статической памяти и зачастую работает на пониженной тактовой частоте. Поскольку однопортовая память значительно дешевле, объём L2-кэша достигает нескольких мегабайт в двухъядерных структурах процессоров, когда он является общим для двух ядер (Intel Core 2 Duo), или несколько сотен килобайт (256 КВ или 512 КВ), когда в многоядерном процессоре каждое ядро имеет свой L2-кэш (см. рис. 4.7). Этот кэш хранит как команды, так и данные. Латентность L2 для процессоров Intel Nehalem 3,2 ГГц составляет 11 тактов, для Penryn 3,2 ГГц – 18 тактов.

Рис. 4.7. Трехуровневая структура кэш-памяти многоядерного процессора

На третьем уровне находится L3-кэш, который объединяет ядра между собой и является разделяемым. В результате, L2-кэш выступает в качестве буфера при обращениях процессорных ядер в разделяемую кэш-память, имеющую достаточно солидный объём (2 МВ – AMD K10, 8 МВ – Intel Nehalem). Латентность L3-кэша исчисляется 52-мя, 54-мя тактами.

При построении многоуровневой кэш-памяти используют включающую (inclusive) или исключающую (exclusive) технологии. Кэш верхнего уровня, построенный по inclusive-технологии, всегда дублирует содержимое кэша нижнего уровня. Если построить инклюзивный L3-кэш, то он будет дублировать данные, хранящиеся в кэшах первого и второго уровней, что снижает эффективную ёмкость всей кэш-подсистемы. С другой стороны, инклюзивный разделяемый L3-кэш способен обеспечить в многоядерных процессорах более высокую скорость работы подсистемы памяти. Это связано с тем, что, если ядро попытается получить доступ к данным, и они отсутствуют в кэше L3, то нет необходимости искать эти данные в собственных кэшах других ядер – там их нет. А благодаря тому, что каждая строка L3-кэша снабжена дополнительными флагами, указывающими владельцев (ядра) этих данных, не вызывает затруднений и процедура обратного изменения содержимого строки кэша. Так, если какое-то ядро модифицирует данные в L3-кэше, изначально принадлежащие другому (или другим) ядрам, то в этом случае обновляется содержимое L1 и L2-кэшей и этих ядер. Эта технология весьма эффективна для обеспечения когерентности персональных кэшей каждого ядра, поскольку она уменьшает потребность в обмене информацией между ядрами. По такой технологии организована кэш-память процессоров Intel Nehalem.

Кэш – подсистема, построенная по exclusive-технологии, никогда не хранит избыточных копий данных и потому эффективная ёмкость подсистемы определяется суммой ёмкостей кэш-памятей всех уровней. Кэш первого уровня никогда не уничтожает строки при нехватке места. Даже если они не были модифицированы, данные в обязательном порядке вытесняются в кэш второго уровня, помещаясь на то место, где находилась только что переданная кэшу L1 строка. Т. е. кэши L1 и L2 как бы обмениваются друг с другом своими строками, а потому кэш-память используется весьма эффективно. По такой технологии организована кэш-память процессоров AMD K10.