Иерархия памяти: различия между версиями

[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м интервики
м стилевые правки
Строка 1:
[[Файл:ComputerMemoryHierarchy.svg|thumb|right|256px|Пирамида иерархии памяти. По левой грани обозначены размер и емкость, по центру — требование постоянного электропитания и длительность хранения, справа — пример памяти данного уровня, скорость и стоимость.]]
'''[[Иерархия]] памяти''' — термин, используемый в [[Вычислительная_техника|вычислительной технике]] при проектировании и низкоуровневом программировании [[ЭВМ]] ([[Компьютер|компьютеров]]). Означает, что различные виды памяти образуют иерархию, на различных уровнях которой расположены памяти с отличающимися временем доступа, сложностью, стоимостью и объемом. Возможность построения иерархии памяти вызвана тем, что большинство алгоритмов обращаются в каждый промежуток времени к небольшому набору данных, который может быть помещен в более быструю, но дорогую и поэтому небольшую, память (см. [[:en:locality of reference]]). Использование более быстрой памяти увеличивает производительность вычислительного комплекса. Под памятью в данном случае подразумевается устройство хранения данных ([[запоминающее устройство]]) в [[Вычислительная_техникаВычислительная техника|Вычислительной технике]] или [[компьютерная память]].
 
При проектировании высокопроизводительных компьютеров и систем необходимо решить множество компромиссов, например, размеры и технологии для каждого уровня иерархии. Можно рассматривать набор различных памятей (m<sub>1</sub>,m<sub>2</sub>,…,m<sub>n</sub>), находящихся в иерархии, то есть каждый m<sub>i</sub> уровень является как бы подчиненным для m<sub>i-1</sub> уровня иерархии. Для уменьшения времени ожидания на более высоких уровнях, низшие уровни могут подготавливать данные укрупненными частями с буферизацией и, по наполнению буфера, сигнализировать верхнему уровню о возможности получения данных.
Строка 32:
 
Большинство программистов обычно предполагает, что память делится на два уровня, оперативную память и дисковые накопители, хотя в [[ассемблер|ассемблерных]] [[Языки программирования|языках]] и ассемблерно-совместимых (типа [[Си_(язык_программирования)|C]]) существует возможность непосредственной работы с регистрами. Получение преимуществ от иерархии памяти требует совместных действий от программиста, аппаратуры и компиляторов (а также базовая поддержка в операционной системе):
* Программисты отвечают за организацию передачи данных между дисками и памятью ([[ОЗУ]]), используя для этого [[файл|файловый]] [[ввод-вывод]]; Современные ОС также реализуют это как [[свопинг]].
* [[Аппаратное обеспечение]] отвечает за организацию передачи данных между памятью и кэшами.
* Оптимизирующие [[Компилятор|компиляторы]] отвечают за генерацию кода, при исполнении которого аппаратура эффективно использует регистры и кэш процессора.
 
Многие программисты не учитывают многоуровневость памяти при программировании. Этот подход работает пока приложение не столкнется с падением производительности из-за насыщениянехватки производительности подсистемы памяти ([[memory wall]]). При исправлении кода ([[Рефакторинг]]) необходимо учесть наличие и особенность работы верхних уровней иерархии памяти для достижения наивысшей производительности.
 
== Литература ==