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

Материал из wikixw
Перейти к навигации Перейти к поиску

В компьютерной архитектуреиерархия памяти разделяет память компьютера на иерархию , основанную на времени отклика. Поскольку время отклика, сложность и пропускная способность взаимосвязаны, уровни могут также различаться по их производительности и технологиям управления.[1] иерархия памяти влияет на производительность при компьютерном архитектурном проектировании, предсказании алгоритмов и построениях программирования более низкого уровня, связанных с локальностью ссылок.

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

Существует четыре основных уровня хранения.

  1. Внутренние Регистры процессора и кэш.
  2. Основная – системная оперативная память и карты контроллера.
  3. On-line mass storage-вторичная память.
  4. Off-line bulk storage – третичное и автономное хранение.

Это общее структурирование иерархии памяти. Многие другие структуры полезны. Например, алгоритм разбиения на страницы может рассматриваться как уровень для виртуальной памяти при проектировании архитектуры компьютера, и можно включить уровень nearline хранения между сетевым и автономным хранилищем.

Схема иерархии памяти компьютера

Свойства технологий в иерархии памяти[править]

  • Добавление сложности замедляет иерархию памяти.[2]
  • Технология памяти CMOx растягивает пространство флэш - памяти в иерархии памяти
  • Одним из основных способов повышения производительности системы является минимизация того, как далеко вниз по иерархии памяти нужно идти, чтобы манипулировать данными.
  • Задержка и пропускная способность-это две метрики, связанные с кэшами. Ни один из них не является однородным, но специфичен для конкретного компонента иерархии памяти.
  • Предсказать, где в иерархии памяти находятся данные, довольно сложно.
    • ..расположение в иерархии памяти определяет время, необходимое для выполнения предварительной выборки.

Примеры[править]

Иерархия памяти сервера AMD Bulldozer.

Количество уровней в иерархии памяти и производительность на каждом уровне со временем увеличились. Тип памяти или компонентов хранилища также изменяется исторически. например, иерархия памяти процессора Intel Haswell Mobile примерно в 2013 г.:

  • Регистры процессора – максимально быстрый доступ (обычно 1 цикл процессора). Размер в несколько тысяч байт
  • Кэш
    • Кэш микроопераций уровня 0 (L0) – размер 6 КБ
    • Кэш команд уровня 1 (L1) – размер 128 Кб
    • Кэш данных уровня 1 (L1) – размер 128 Кб. Лучшая скорость доступа-около 700 гиб/с[9]
    • Уровень 2 (L2) инструкции и данные (общие) – размер 1 Мб. Лучшая скорость доступа - около 200 гиб/с
  • Общий кэш уровня 3 (L3) – размер 6 Мб. Лучшая скорость доступа-около 100 гиб/с
    • Общий кэш уровня 4 (L4) – 128 Мбайт. Лучшая скорость доступа-около 40 гиб/с
  • Основная память (Primary storage) – гигабайт в размере. Наилучшая скорость доступа составляет около 10 гиб/с. в случае машины NUMA время доступа может быть неравномерным
  • Дисковое хранилище (вторичное хранилище) – размер в терабайтах. По состоянию на 2017 год наилучшая скорость доступа с потребительского твердотельного накопителя составляет около 2000 МБ/с
  • Nearline storage (Третичное хранилище) - до эксабайт в размере. По состоянию на 2013 год, лучшая скорость доступа составляет около 160 МБ / с
  • Автономное хранилище данных

Нижние уровни иерархии – от дисков вниз – также известны как многоуровневое хранилище. Формальное различие между онлайн -, nearline и автономным хранилищем заключается в следующем:

  • Онлайн-хранилище сразу же доступно для ввода-вывода.
  • Хранилище Nearline доступно не сразу, но может быть быстро подключено к сети без вмешательства человека.
  • Автономное хранилище не сразу доступно, и требует некоторого вмешательства человека, чтобы вывести его в интернет.

Например, всегда включенные вращающиеся диски находятся в режиме онлайн, в то время как вращающиеся диски, которые вращаются вниз, такие как массивный массив холостого диска (MAID), находятся рядом. Съемные носители, такие как ленточные картриджи, которые могут быть загружены автоматически , как в библиотеке ленточныхносителей, находятся вблизи линии, в то время как картриджи, которые должны быть загружены вручную, находятся вне сети.

Большинство современных процессоров работают настолько быстро, что для большинства рабочих нагрузок программ узким местом является локальность ссылок на доступ к памяти и эффективность кэширования и передачи памяти между различными уровнями иерархии[нужная цитата]. В результате процессор тратит большую часть своего времени на холостом ходу, ожидая завершения ввода-вывода памяти. Это иногда называют стоимостью пространства, так как более крупный объект памяти с большей вероятностью переполнит малый/быстрый уровень и потребует использования большего/более медленного уровня. Результирующая нагрузка на использование памяти известна как давление (соответственно давление регистра, давление кэшаи (основное) давление памяти). Термины для данных, отсутствующих на более высоком уровне и нуждающихся в извлечении с более низкого уровня, соответственно: разлив регистра (из-за давления регистра: регистр в кэш), промах кэша (кэш в основную память) и (жесткая) ошибка страницы (основная память на диск).

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

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

Многие программисты предполагают один уровень памяти. Это работает нормально, пока приложение не попадает в стену производительности. Затем иерархия памяти будет оценена во время рефакторинга кода.

См. также[править]

Пруф[править]