В архитектуре компьютера иерархия памяти разделяет компьютерное хранилище на иерархию, основанную на времени отклика . Поскольку время отклика, сложность и емкость связаны, уровни также могут различаться по их производительности и технологиям управления. [1] Иерархия памяти влияет на производительность в проектировании архитектуры компьютера, предсказаниях алгоритмов и конструкциях программирования более низкого уровня, включающих локальность ссылок .
Проектирование для высокой производительности требует учета ограничений иерархии памяти, т. е. размера и возможностей каждого компонента. Каждый из различных компонентов можно рассматривать как часть иерархии памяти ( m 1 , m 2 , ..., m n ) , в которой каждый член m i обычно меньше и быстрее, чем следующий по величине член m i +1 иерархии. Чтобы ограничить ожидание более высокими уровнями, более низкий уровень будет отвечать заполнением буфера, а затем сигнализировать об активации передачи.
Существует четыре основных уровня хранения. [1]
Это общая иерархия структурирования памяти. Многие другие структуры полезны. Например, алгоритм подкачки может рассматриваться как уровень виртуальной памяти при проектировании архитектуры компьютера , и можно включить уровень хранения nearline между онлайн и офлайн хранением.
Количество уровней в иерархии памяти и производительность на каждом уровне со временем увеличились. Тип памяти или компонентов хранения также исторически изменились. [6] Например, иерархия памяти процессора Intel Haswell Mobile [7] около 2013 года выглядит следующим образом:
Нижние уровни иерархии – от дисков вниз – также известны как многоуровневое хранилище . Формальное различие между онлайн, околосетевым и офлайн хранением следующее: [12]
Например, постоянно включенные вращающиеся диски находятся в режиме онлайн, в то время как вращающиеся диски, которые вращаются вниз, такие как массив неактивных дисков ( MAID ), находятся в режиме ближнего действия. Съемные носители, такие как картриджи с лентой, которые могут быть автоматически загружены, как в ленточной библиотеке , находятся в режиме ближнего действия, в то время как картриджи, которые должны быть загружены вручную, находятся в режиме оффлайн.
Большинство современных ЦП настолько быстры, что для большинства программных рабочих нагрузок узким местом является локальность ссылок на доступ к памяти и эффективность кэширования и передачи памяти между различными уровнями иерархии [ требуется ссылка ] . В результате ЦП проводит большую часть своего времени в режиме ожидания, ожидая завершения ввода-вывода памяти. Иногда это называют стоимостью пространства , поскольку более крупный объект памяти с большей вероятностью переполнит небольшой/быстрый уровень и потребует использования большего/более медленного уровня. Результирующая нагрузка на использование памяти известна как давление (соответственно давление регистра , давление кэша и давление (основной) памяти ). Термины для данных, отсутствующих на более высоком уровне и требующих извлечения с более низкого уровня, соответственно: пролив регистра (из-за давления регистра : регистр в кэш), промах кэша (кэш в основную память) и (жесткая) ошибка страницы (основная память на диск).
Современные языки программирования в основном предполагают два уровня памяти, основную память и дисковое хранилище, хотя в языке ассемблера и встроенных ассемблерах в таких языках, как C , к регистрам можно обращаться напрямую. Для оптимального использования иерархии памяти требуется сотрудничество программистов, оборудования и компиляторов (а также базовая поддержка со стороны операционной системы):
Многие программисты предполагают один уровень памяти. Это работает нормально, пока приложение не упрется в стену производительности. Затем иерархия памяти будет оценена во время рефакторинга кода .
{{cite journal}}
: Цитировать журнал требует |journal=
( помощь )