Архитектура компьютера

Иерархия памяти: Пирамида скорости

Цели урока

  • Понимать проблему Memory Wall
  • Знать уровни иерархии памяти и их характеристики
  • Понимать temporal и spatial locality
  • Знать основы работы кэша

Предварительные знания

  • Структура CPU
  • Понятие памяти
  • Структура CPU

Процессор на 4 ГГц простаивает 100+ тактов, ожидая данные из RAM. Иерархия памяти - способ скрыть эту задержку.

  • Оптимизация структур данных для кэша
  • Cache-oblivious алгоритмы
  • Профилирование cache misses
  • Game development оптимизация

Проблема: Memory Wall

**Memory Wall:** Скорость CPU растёт быстрее, чем скорость памяти. Разрыв увеличивается каждый год.

КомпонентЗадержкаОтносительно
Регистр~0.3 нс1×
L1 кэш~1 нс3×
L2 кэш~4 нс12×
L3 кэш~12 нс40×
RAM (DDR5)~50-100 нс150-300×
SSD NVMe~20,000 нс60,000×
HDD~5,000,000 нс15,000,000×

**Цена простоя:** Если данных нет в кэше, CPU простаивает 100+ тактов. При 4 ГГц это ~25 нс потерянного времени!

Memory Wall - это:

Уровни иерархии

**Решение:** Иерархия - маленькая быстрая память + большая медленная. Используем обе умно!

УровеньРазмерЗадержкаСтоимость/ГБ
SRAM (кэш)МБ1-10 нс~50
DRAM (RAM)ГБ50-100 нс~5
Flash (SSD)ТБ10-100 мкс~0.10
HDDТБ5-10 мс~0.02

**Почему не всё SRAM?** 16 ГБ SRAM стоили бы ~$800,000 (vs $50 для DRAM). Экономика диктует иерархию!

Почему L1 кэш меньше L3?

Принципы локальности

Иерархия работает благодаря **локальности** - закономерностям доступа к данным.

**Temporal Locality (временная):** Если обратились к данным, скоро обратимся снова.

**Spatial Locality (пространственная):** Если обратились к данным, скоро обратимся к соседним.

ПаттернTemporalSpatialCache-friendly?
Последовательный обходНизкаяВысокаяДа!
Цикл по одной переменнойВысокаяНизкаяДа!
Случайный доступНизкаяНизкаяНет!
Обработка матрицы по строкамНизкаяВысокаяДа!
Обработка матрицы по столбцамНизкаяНизкаяНет!

**Cache thrashing:** Случайный доступ к большому массиву убивает производительность. Каждое обращение - cache miss!

Пример пространственной локальности:

Как работает кэш

**Кэш** - быстрая копия часто используемых данных из RAM.

**Cache Line:** Кэш загружает не байт, а блок (обычно 64 байта). Это использует spatial locality!

**Hit Rate:** Типичный L1 hit rate = 95%+. Это значит только 5% обращений идут в L2.

Кэш просто ускоряет все обращения к памяти

Кэш ускоряет только повторные обращения (temporal) и соседние данные (spatial).

При случайном доступе каждое обращение - cache miss. Кэш не помогает, а только добавляет latency проверки.

Если cache line = 64 байта, а int = 4 байта, сколько int'ов загружается за один cache miss?

Ключевые идеи

  • Memory Wall: CPU быстрее RAM в 100-300 раз
  • Иерархия: регистры → L1 → L2 → L3 → RAM → SSD
  • Меньше = быстрее, но дороже
  • Temporal locality: повторное использование
  • Spatial locality: соседние данные
  • Cache line = 64 байта, загружается целиком

Связанные темы

Иерархия памяти - фундамент для понимания производительности.

  • Кэш-память — Детальное устройство кэша
  • Виртуальная память — Абстракция над физической памятью

Вопросы для размышления

  • Как принцип локальности данных влияет на выбор структур данных в высоконагруженных системах?
  • Почему cache miss может стоить дороже, чем сотни арифметических операций?
  • Какие техники программирования помогают максимизировать попадания в кеш при обходе двумерных массивов?

Связанные уроки

  • os-01-intro
Иерархия памяти: Пирамида скорости

0

1

Войти