<<
>>

Кэш-память

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

Современные процессоры предъявляют определенные требования к системе памяти и в плане времени ожидания (задержки в доставке операнда), и в плане пропускной способности (объему данных, передаваемых в единицу времени). К сожалению, эти два аспекта системы памяти в значительной степени противоречивы. Обычно с повышением пропускной способности увеличивается время ожидания. Например, конвейерные технологии, которые мы использовали в микроархитектуре М1с-3, можно применить и к системе памяти, в этом случае запросы к памяти будут обрабатываться более рационально, с перекрытием.

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

Один из вариантов решения проблемы — добавление кэш-памяти. Как мы отмечали в подразделе «Кэш-память» раздела «Основная память» главы 2, в кэш-памяти хранятся наиболее часто используемые слова, за счет чего повышается скорость доступа к ним. Если достаточно большой процент нужных слов находится в кэш-памяти, время ожидания может значительно сократиться.

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

Основной прием — введение отдельных кэшей для команд и данных (так называемая разделенная кэш-память). Такая кэш-память имеет несколько преимуществ, в частности, операции могут начинаться независимо в каждой кэш-памяти, что удваивает пропускную способность системы памяти. Именно по этой причине в микроархитектуре Мш-1 нам понадобились два отдельных порта памяти: отдельный порт для каждого кэша. Отметим, что каждый кэш имеет независимый доступ к основной памяти.

В настоящее время многие системы памяти гораздо сложнее этих. Между разделенной кэш-памятью и основной памятью часто помещается кэш-память второго уровня. Вообще говоря, поскольку требуются более совершенные системы, может быть три и более уровня кэш-памяти. На рис. 4.25 изображена система с тремя уровнями кэш-памяти. Прямо на микросхеме центрального процессора находится небольшой кэш для команд (Ь1-1) и небольшой кэш для данных (Ы-Б) объемом обычно от 16 до 64 Кбайт. Есть еще кэш-память второго уровня (Ь2), которая расположена не на самой микросхеме процессора, а рядом с ним в том же блоке. Кэш-память второго уровня соединяется с процессором через высокоскоростной тракт данных. Эта кэш-память обычно не является разделенной и объединяет данные и команды. Ее размер — от 512 Кбайт до 1 Мбайт. Кэш-память третьего уровня (ЬЗ) находится на той же плате, что и процессор, и обычно состоит из статического ОЗУ в несколько мегабайтов, которое функционирует гораздо быстрее, чем динамическое ОЗУ основной памяти. Как правило, все содержимое кэш-памяти первого уровня находится в кэш-памяти второго уровня, а все содержимое кэш-памяти второго уровня — в кэш-памяти третьего уровня.

Рис. 4.25. Система с тремя уровнями кэш-памяти

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

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

Во всех типах кэш-памяти используется следующая модель. Основная память разделяется на блоки фиксированного размера, которые называются строками кэша. Строка кэша состоит из нескольких последовательных байтов (обычно от 4 до 64). Строки нумеруются, начиная с 0, то есть если размер строки составляет 32 байта, то строка 0 — это байты с 0 по 31-й, строка 1 — байты с 32-го по 63-й и т. д. В любой момент в кэш-памяти находится несколько строк. Когда происходит обращение к памяти, контроллер кэш-памяти проверяет, есть ли нужное слово в кэш-памяти. Если слово есть (случай кэш-попадания), то можно сэкономить время, требуемое на доступ к основной памяти. Если данного слова в кэш-памяти нет (случай кэш-промаха), то одна из строк из кэша удаляется, а вместо нее туда помещается запрошенная строка из основной памяти или из кэш-памяти более низкого уровня. Существует множество вариаций данной схемы, но в их основе всегда лежит идея держать в кэш-памяти как можно больше часто используемых строк, чтобы число кэш-попаданий было максимальным.

<< | >>
Источник: Таненбаум Э.. Архитектура компьютера. 5-е изд. 2007

Еще по теме Кэш-память:

  1. Память прошлого и память будущего
  2. ПАМЯТЬ: КЛАССИФИКАЦИЯ
  3. Понимание и память
  4. Понимание и память
  5. ПАМЯТЬ КРАТКОВРЕМЕННАЯ
  6. ПАМЯТЬ ОПЕРАТИВНАЯ
  7. ПАМЯТЬ ГЕНЕТИЧЕСКАЯ
  8. Память рода
  9. ПАМЯТЬ: МЕХАНИЗМ ФИЗИОЛОГИЧЕСКИЙ
  10. ПАМЯТЬ ОБРАЗНАЯ
  11. ПАМЯТЬ МГНОВЕННАЯ
  12. ПАМЯТЬ БУФЕРНАЯ
  13. ПАМЯТЬ
  14. ПАМЯТЬ ЭМОЦИОНАЛЬНАЯ