Кэш-память процессора (L1, L2, L3)
# Кэш-память процессора
**Кэш** - сверхбыстрая память внутри процессора для хранения часто используемых данных.
## Иерархия памяти
```
Регистры CPU < 1 нс Байты
Кэш L1 ~1 нс 32-64 KB на ядро
Кэш L2 ~3-5 нс 256-512 KB на ядро
Кэш L3 ~10-20 нс 8-64 MB общий
ОЗУ (RAM) ~50-100 нс 8-64 GB
SSD ~100 мкс 256 GB - 4 TB
HDD ~5-10 мс 1-20 TB
```
## Уровни кэша
### L1 Cache (Level 1)
- **Самый быстрый** (1 такт процессора)
- **Самый маленький** (32-64 KB)
- Разделен на:
- L1i (instruction) - инструкции
- L1d (data) - данные
- Индивидуальный для каждого ядра
### L2 Cache (Level 2)
- **Средняя скорость** (3-5 тактов)
- **Средний размер** (256-512 KB)
- Индивидуальный для каждого ядра
- Хранит данные и инструкции
### L3 Cache (Level 3)
- **Медленнее L2, но быстрее RAM** (10-20 тактов)
- **Большой размер** (8-64 MB)
- **Общий для всех ядер**
- Обмен данными между ядрами
## Принцип работы
1. **Cache Hit** - данные найдены в кэше (быстро)
2. **Cache Miss** - данных нет, загрузка из RAM (медленно)
### Пример:
```
Цикл for (i=0; i<1000000; i++):
- Первая итерация: cache miss (загрузка из RAM)
- Остальные: cache hit (данные уже в кэше)
```
## Влияние на производительность
**Больше кэша = выше производительность:**
- Игры: L3 32MB vs 64MB = +5-10% FPS
- Компиляция: большой кэш ускоряет сборку
- Базы данных: кэш критичен для запросов
## Кэш-линии
- Данные загружаются блоками (64 байта)
- Принцип локальности:
- **Временная**: недавно использованные данные
- **Пространственная**: соседние данные