Архитектура компьютера
Иерархия памяти: Пирамида скорости
Цели урока
- Понимать проблему Memory Wall
- Знать уровни иерархии памяти и их характеристики
- Понимать temporal и spatial locality
- Знать основы работы кэша
Предварительные знания
- Структура 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 (пространственная):** Если обратились к данным, скоро обратимся к соседним.
| Паттерн | Temporal | Spatial | Cache-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 может стоить дороже, чем сотни арифметических операций?
- Какие техники программирования помогают максимизировать попадания в кеш при обходе двумерных массивов?