13. Кэш-память. Механизмы работы кэша. Когерентность кэш-памяти.
Кэш предоставляет быстрый доступ к инструкциям и данным и высокую ширину полосы. Регистры также иногда относят к кэшу.
Кэш
- Устанавливается между процессором и основной памятью, когда
поведение доступа к данным ОП хуже требуемого в системе
(низкая скорость, высокое энергопотребление). - Кэш реализуется на базе SRAM (Static Random Access Memory).
- Управление кэшем осуществляется аппаратно или программно.
Общая идея кэш-памяти
- Наиболее часто используемые данные хранятся в более быстрой памяти. Идеи кэширования в той или иной форме применяются в большинстве уровней компьютерных систем.
- Наиболее часто используемые слова памяти хранятся в кэше. Когда процессору требуется слово, он сначала проверяет кэш, и только если его там нет, осуществляет обращение к памяти. Если значительная часть слов находится в кэше, то время обращения к памяти существенно сокращается.
- Механизм кэша опирается на идею локальности. Для того, чтобы кэш был эффективен, он должен иметь размеры, достаточные для хранения рабочего множества (working set) – множества инструкций и/или данных, используемых в этот момент для вычислений.
Определения
- Когда процессору требуются данные, он сначала проверяет кэш.
- Попадание кэша – ситуация, когда требуемые данные находятся в кэше.
- Промах кэша – ситуация, когда требуемые данные отсутствуют в кэше и процессору приходится обращаться в память.
- Кэширование – накопление наиболее часто используемых данных в кэш-памяти.
Характеристики кэшей
- Организация;
- Эвристика управления содержимым;
- Эвристика поддержания согласованности.
Характеристики производительности:
- Доля попаданий (Hit Ratio, h) – часть всех обращений, полученных из кэша.
- Доля промахов (Miss Ratio) – часть промахов кэша среди всех обращений: (1-h)
- Среднее время обращения к памяти (где с – время доступа к кэшу; m – время
обращения к памяти): - Среднее время доступа = доля попаданий * время доступа к кэшу + доля промахов * стоимость промаха;
- Среднее время доступа = hc + (1-h)m
Модель кэша
- Кэш состоит из области хранения данных – памяти данных, где находятся копии данных из ОП, и памяти тегов, которая содержит управляющую информацию в виде набора признаков описывающих находящиеся в кэше копии.
- Кэш-память разбивается на блоки – строки кэша. Строка кэша (cache line) – содержит несколько последовательных байт памяти (4 – 64), загружаемых и удаляемых одновременно.
- Чем больше кэш, тем выше производительность системы памяти, однако медленнее скорость доступа к кэшу и выше цена.
- Важное значение имеет выбор длины строки кэша.
Использование нескольких кэшей
-
Разграничение данных и инструкций. Проще всё хранить в общем кэше (unified cache), однако современные веяния склоняются к использованию раздельных кэшей (split cache) для данных и инструкций. Это связанно с конвейеризацией вычислений, где устройство выборки инструкций и устройство выборки операндов могут работать параллельно при раздельных кэшах, удваивая полосу пропускания памяти.
-
Число кэшей (первый на кристалле процессора, 32Кб – данные, 32Кб – код, второй – в непосредственной близости от кристалла, третий – дальше). При этом кэш следующего уровня содержит данные кэша более низкого уровня.
Когерентность кэша
- Проблема когерентности возникает, если несколько процессоров осуществляют доступ к нескольким копиям одних данных (в разных кэшах) и хотя бы один из них записывает данные.
- Когерентность следует отличать от согласованности.
- Согласованность определяет когда процессор увидит обновление данных.
- Когерентность определяет как, гарантируя, что другие увидят данные, но не уточняя когда.
- Когерентность гарантирует, что любое записанное значение в итоге будет доступно для чтения.
Протоколы:
- Отслеживание (Snooping) – запрос данных посылается всем процессорам. Протокол плохо масштабируется.
- Протоколы, основанные на директориях – учет разделяемых данных ведется в специальных директориях.