Иерархия памяти

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Пирамида иерархии памяти. По левой грани обозначены размер и емкость, по центру — требование постоянного электропитания и длительность хранения, справа — пример памяти данного уровня, скорость и стоимость.

Иерархия памяти — термин, используемый в вычислительной технике при проектировании и программировании ЭВМ (компьютеров). Означает, что различные виды памяти образуют иерархию, на различных уровнях которой расположены памяти с отличающимися временем доступа, сложностью, стоимостью и объемом. Возможность построения иерархии памяти вызвана тем, что большинство алгоритмов обращаются в каждый промежуток времени к небольшому набору данных, который может быть помещен в более быструю, но дорогую и поэтому небольшую, память (см. en:locality of reference). Использование более быстрой памяти увеличивает производительность вычислительного комплекса. Под памятью в данном случае подразумевается устройство хранения данных (запоминающее устройство) в Вычислительной технике или компьютерная память.

При проектировании высокопроизводительных компьютеров и систем необходимо решить множество компромиссов, например, размеры и технологии для каждого уровня иерархии. Можно рассматривать набор различных памятей (m1,m2,…,mn), находящихся в иерархии, то есть каждый mi уровень является как бы подчиненным для mi-1 уровня иерархии. Для уменьшения времени ожидания на более высоких уровнях, низшие уровни могут подготавливать данные укрупненными частями с буферизацией и, по наполнению буфера, сигнализировать верхнему уровню о возможности получения данных.

Часто выделяют 4 основных (укрупненных) уровня иерархии:[1]

  1. Внутренняя память процессора (регистры, организованные в регистровый файл и кэш процессора).
  2. ОЗУ системы (RAM) и вспомогательных карт памяти.
  3. Накопители с «горячим» доступом (On-line mass storage) — или вторичная компьютерная память. Жесткие диски и твердотельные накопители, не требующие длительных (секунды и больше) действий для начала получения данных
  4. Накопители, требующие переключения носителей (Off-line bulk storage) — или третичная память. Сюда относятся магнитные ленты, ленточные и дисковые библиотеки, требующие длительной перемотки либо механического (или ручного) переключения носителей информации.

Иерархия памяти в современных ПК[править | править вики-текст]

В большинстве современных ПК рассматривается следующая иерархия памяти:

  1. Регистры процессора, организованные в регистровый файл — наиболее быстрый доступ (порядка 1 такта), но размером лишь в несколько сотен или, редко, тысяч байт.
  2. Кэш процессора 1го уровня (L1) — время доступа порядка нескольких тактов, размером в десятки килобайт
  3. Кэш процессора 2го уровня (L2) — большее время доступа (от 2 до 10 раз медленнее L1), около полумегабайта или более
  4. Кэш процессора 3го уровня (L3) — время доступа около сотни тактов, размером в несколько мегабайт (в массовых процессорах используется недавно)
  5. ОЗУ системы — время доступа от сотен до, возможно, тысячи тактов, но огромные размеры в несколько гигабайт, вплоть до сотен. Время доступа к ОЗУ может варьироваться для разных его частей в случае комплексов класса NUMA (с неоднородным доступом в память)
  6. Дисковое хранилище — многие миллионы тактов, если данные не были закэшированны или забуферизованны заранее, размеры до нескольких терабайт
  7. Третичная память — задержки до нескольких секунд или минут, но практически неограниченные объемы (ленточные библиотеки).

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

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

Многие программисты не учитывают многоуровневость памяти при программировании. Этот подход работает пока приложение не столкнется с падением производительности из-за нехватки производительности подсистемы памяти (memory wall). При исправлении кода (Рефакторинг) необходимо учесть наличие и особенность работы верхних уровней иерархии памяти для достижения наивысшей производительности.

Литература[править | править вики-текст]

Примечания[править | править вики-текст]

  1. Computer Hardware/Software Architecture. — Bell Telephone Laboratories, Inc, 1986. — P. 30. — ISBN 0-13-163502-6.