Автор: Пользователь скрыл имя, 11 Ноября 2010 в 14:03, реферат
Кэш-память, состоящая из “m” слов, сохраняет копии не менее, чем “m”-слов из всех слов основной памяти. Если копия, к адресу которой был выполнен доступ ЦП, существует в кэш-памяти, то считывание завершается уже при доступе
к кэш-памяти. Отметим, что использование кэш-памяти основывается на принципах пространственной и временной локальности. В случае пространственной локальности основная память разбивается на блоки с фиксированным числом слов и обмен данными между основной памятью и кэш-памятью выполняется блоками. При доступе к некоторому адресу центральный процессор должен сначала определить содержит ли кэш-память копию блока с указанным адресом, и если имеется, то определить, с какого адреса кэш-памяти начинается этот блок. Эту информацию ЦП получает с помощью механизма преобразования адресов.
•Кэш-память
•Введение
•Причины внедрения кэш-памяти
•Что такое кэш-память?
•Внутренний кэш
•Смешанная и разделенная кэш-память
•Статическая и динамическая память
•TLB как разновидность кэш-памяти
•Организация кэш-памяти
•Стратегия размещения
•Отображение секторов ОП в кэш-памяти
•Иерархическая модель кэш-памяти
•Ассоциативность кэш-памяти
•Размер строки и тега кэш-памяти
•Типы подключения кэш-памяти
•Сегментирование кэш-памяти и быстродействие жестких дисков
•Увеличение производительности кэш-памяти
•Зачем увеличивать кэш?
•Выводы
Рассмотрим
организацию кэш-памяти более детально,
отвечая на четыре вопроса об иерархии
памяти.
1.
Где может размещаться
блок в кэш-памяти?
Принципы размещения блоков в кэш-памяти определяют три основных типа их организации:
Если каждый
блок основной памяти имеет только
одно фиксированное место, на котором
он может появиться в кэш-памяти,
то такая кэш-память называется кэшем
с прямым отображением (direct mapped). Это
наиболее простая организация кэш-памяти,
при которой для отображение адресов блоков
основной памяти на адреса кэш-памяти
просто используются младшие разряды
адреса блока. Таким образом, все блоки
основной памяти, имеющие одинаковые младшие
разряды в своем адресе, попадают в один
блок кэш-памяти, т.е.
(адрес блока кэш-памяти) =
(адрес блока
основной памяти) mod (число блоков в
кэш-памяти)
Если некоторый блок основной памяти может располагаться на любом месте кэш-памяти, то кэш называется полностью ассоциативным (fully associative).
Если некоторый
блок основной памяти может располагаться
на ограниченном множестве мест в
кэш-памяти, то кэш называется множественно-ассоциативным
(set associative). Обычно множество представляет
собой группу из двух или большего числа
блоков в кэше. Если множество состоит
из n блоков, то такое размещение называется
множественно-ассоциативным с n каналами
(n-way set associative). Для размещения блока прежде
всего необходимо определить множество.
Множество определяется младшими разрядами
адреса блока памяти (индексом):
(адрес множества кэш-памяти) =
(адрес блока
основной памяти) mod (число множеств
в кэш-памяти)
Далее, блок может
размещаться на любом месте данного
множества.
Диапазон
возможных организаций кэш-
2.
Как найти блок,
находящийся в
кэш-памяти?
У каждого блока в кэш-памяти имеется адресный тег, указывающий, какой блок в основной памяти данный блок кэш-памяти представляет. Эти теги обычно одновременно сравниваются с выработанным процессором адресом блока памяти.
Кроме того, необходим способ определения того, что блок кэш-памяти содержит достоверную или пригодную для использования информацию. Наиболее общим способом решения этой проблемы является добавление к тегу так называемого бита достоверности (valid bit).
Адресация
множественно-ассоциативной
3.
Какой блок кэш-памяти
должен быть замещен
при промахе?
При возникновении промаха, контроллер кэш-памяти должен выбрать подлежащий замещению блок. Польза от использования организации с прямым отображением заключается в том, что аппаратные решения здесь наиболее простые. Выбирать просто нечего: на попадание проверяется только один блок и только этот блок может быть замещен. При полностью ассоциативной или множественно-ассоциативной организации кэш-памяти имеются несколько блоков, из которых надо выбрать кандидата в случае промаха. Как правило для замещения блоков применяются две основных стратегии: случайная и LRU.
В первом случае, чтобы иметь равномерное распределение, блоки-кандидаты выбираются случайно. В некоторых системах, чтобы получить воспроизводимое поведение, которое особенно полезно во время отладки аппаратуры, используют псевдослучайный алгоритм замещения.
Во втором случае, чтобы уменьшить вероятность выбрасывания информации, которая скоро может потребоваться, все обращения к блокам фиксируются. Заменяется тот блок, который не использовался дольше всех (LRU - Least-Recently Used).
Достоинство
случайного способа заключается
в том, что его проще реализовать в аппаратуре.
Когда количество блоков для поддержания
трассы увеличивается, алгоритм LRU становится
все более дорогим и часто только приближенным.
На рисунке 3 показаны различия в долях
промахов при использовании алгоритма
замещения LRU и случайного алгоритма.
Рис. 3. Сравнение долей промахов для алгоритма LRU и случайного алгоритма замещения
при нескольких
размерах кэша и разных ассоциативностях
при размере блока 16 байт
4.
Что происходит
во время записи?
При обращениях к кэш-памяти на реальных программах преобладают обращения по чтению. Все обращения за командами являются обращениями по чтению и большинство команд не пишут в память. Обычно операции записи составляют менее 10% общего трафика памяти. Желание сделать общий случай более быстрым означает оптимизацию кэш-памяти для выполнения операций чтения, однако при реализации высокопроизводительной обработки данных нельзя пренебрегать и скоростью операций записи.
К счастью, общий случай является и более простым. Блок из кэш-памяти может быть прочитан в то же самое время, когда читается и сравнивается его тег. Таким образом, чтение блока начинается сразу как только становится доступным адрес блока. Если чтение происходит с попаданием, то блок немедленно направляется в процессор. Если же происходит промах, то от заранее считанного блока нет никакой пользы, правда нет и никакого вреда.
Однако при выполнении операции записи ситуация коренным образом меняется. Именно процессор определяет размер записи (обычно от 1 до 8 байтов) и только эта часть блока может быть изменена. В общем случае это подразумевает выполнение над блоком последовательности операций чтение-модификация-запись: чтение оригинала блока, модификацию его части и запись нового значения блока. Более того, модификация блока не может начинаться до тех пор, пока проверяется тег, чтобы убедиться в том, что обращение является попаданием. Поскольку проверка тегов не может выполняться параллельно с другой работой, то операции записи отнимают больше времени, чем операции чтения.
Очень часто организация кэш-памяти в разных машинах отличается именно стратегией выполнения записи. Когда выполняется запись в кэш-память имеются две базовые возможности:
Оба подхода к организации записи имеют свои преимущества и недостатки. При записи с обратным копированием операции записи выполняются со скоростью кэш-памяти, и несколько записей в один и тот же блок требуют только одной записи в память более низкого уровня. Поскольку в этом случае обращения к основной памяти происходят реже, вообще говоря требуется меньшая полоса пропускания памяти, что очень привлекательно для мультипроцессорных систем. При сквозной записи промахи по чтению не влияют на записи в более высокий уровень, и, кроме того, сквозная запись проще для реализации, чем запись с обратным копированием. Сквозная запись имеет также преимущество в том, что основная память имеет наиболее свежую копию данных. Это важно в мультипроцессорных системах, а также для организации ввода/вывода.
Когда процессор ожидает завершения записи при выполнении сквозной записи, то говорят, что он приостанавливается для записи (write stall). Общий прием минимизации остановов по записи связан с использованием буфера записи (write buffer), который позволяет процессору продолжить выполнение команд во время обновления содержимого памяти. Следует отметить, что остановы по записи могут возникать и при наличии буфера записи.
При промахе во время записи имеются две дополнительные возможности:
Обычно в кэш-памяти, реализующей запись с обратным копированием, используется размещение записи в кэш-памяти (в надежде, что последующая запись в этот блок будет перехвачена), а в кэш-памяти со сквозной записью размещение записи в кэш-памяти часто не используется (поскольку последующая запись в этот блок все равно пойдет в память).
В зависимости от способа размещения данных основной памяти в кэш-памяти существует три типа кэш-памяти:
Кэш
с прямым отображением
(размещением) является самым
простым типом буфера. Адрес памяти однозначно
определяет строку
кэша, в которую будет помещен блок информации.
При этом предпо-
лагается, что оперативная память разбита
на блоки и каждому та-
кому блоку в буфере отводится всего одна
строка. Это простой и недорогой в реализации
способ отображения. Основной его недостаток
– жесткое закрепление за определенными
блоками ОП одной строки в кэше. Поэтому,
если программа поочередно обращается
к словам из двух различных блоков, отображаемых
на одну и ту же строку кэш-памяти, постоянно
будет происходить обновление данной
строки и вероятность попадания будет
низкой.
Кэш с полностью ассоциативным отображением позволяет преодолеть недостаток прямого, разрешая загрузку любого блока ОП в любую строку кэш-памяти. Логика управления выделяет в адресе ОП два поля: поле тега и поле слова. Поле тега совпадает с адресом блока ОП. Для проверки наличия копии блока в кэш-памяти, логика управления кэша должна одновременно проверить теги всех строк на совпадение с полем тега адреса. Ассоциативное отображение обеспечивает гибкость при выборе строки для вновь записываемого блока. Принципиальный недостаток этого способа – в необходимости использования дорогой ассоциативной памяти.
Множественно-ассоциативный
тип или частично-ассоциативный
тип отображения
– это один из возможных компромиссов,
сочетающий достоинства прямого и ассоциативного
способов. Кэш-память ( и тегов и данных)
разбивается на некоторое количество
модулей. Зависимость между модулем и
блоками ОП такая же жесткая, как и при
прямом отображении. А вот размещение
блоков по строкам модуля произвольное
и для поиска нужной строки в пределах
модуля используется ассоциативный принцип.
Этот способ отображения наиболее широко
распространен в современных микропроцессорах.
Отображение
секторов ОП в кэш-памяти.
Данный
тип отображения применяется
во всех современных ЭВМ и состоит
в том, что вся ОП разбивается
на секторы, состоящие из фиксированного
числа последовательных блоков. Кэш-память
также разбивается на секторы, содержащие
такое же количество строк. Расположение
блоков в секторе ОП и секторе кэша
полностью совпадает. Отображение сектора
на кэш-память осуществляется ассоциативно,
те любой сектор из ОП может быть помещен
в любой сектор кэша. Таким образом, в процессе
работы АЛУ обращается в поисках очередной
команды к ОП, в результате чего, в кэш
загружается( в случае отсутствия там
блока, содержащего эту команду), целый
сектор информации из ОП, причем по принципу
локальности, за счет этого достигается
значительное увеличение быстродействия
системы.