Память · РЕДАКЦИОННЫЙ МАТЕРИАЛ
Кэш, память и локальность
Почему порядок обхода данных иногда важнее количества вычислений.
Близкие данные
Кэши хранят копии недавно использованных участков памяти. Обращение обычно работает с блоком — кэш-линией, а не с одним байтом. Размер линии, ёмкость и организация зависят от процессора. Последовательный обход массива использует пространственную локальность: соседние элементы часто попадают в уже загруженные блоки.
Повторное использование
Временная локальность означает повторное обращение к тем же данным. Если рабочий набор помещается в кэш, повторный проход может обойтись без части обращений к основной памяти. Слишком большой набор вытесняет полезные блоки. Поэтому результат маленького синтетического теста нельзя автоматически переносить на большой производственный набор.
Задержка и пропускная способность
Задержка отвечает на вопрос, сколько ждём одну зависимую загрузку. Пропускная способность — сколько данных система передаёт за интервал времени. Несколько независимых загрузок могут перекрываться, но цепочка указателей создаёт зависимости. Ускорение одного паттерна доступа не доказывает ускорение другого.
Что попробовать в программе
Сравните последовательный и перемешанный обход одного набора; проверьте несколько размеров данных и повторов. Убедитесь, что компилятор не удалил вычисления. Сохраняйте результат и проверяйте его. Не объявляйте найденный скачок точным размером кэша без дополнительных проверок: влияют предвыборка, TLB и другие процессы.
Проверить по первоисточнику
Общий материал проверен по документации 26 октября 2026 года. Детали конкретного процессора уточняйте в его руководстве.