Вот попытка дать представление об относительной стоимости промахов кэша по аналогии с выпечкой шоколадного печенья ...
Ваши руки - это ваши регистры. Вам понадобится 1 секунда, чтобы положить шоколадные чипсы в тесто.
Кухонный счетчик - это ваш кэш L1, который в 12 раз медленнее регистров. Требуется 12 x 1 = 12 секунд, чтобы подойти к прилавку, взять пакет с грецкими орехами и вылить его в руку .
Холодильник - это ваш кэш L2, в четыре раза медленнее, чем L1. Требуется 4 x 12 = 48 секунд, чтобы подойти к холодильнику, открыть его, убрать остатки прошлой ночи с дороги, вынуть коробку яиц, откройте коробку, положите 3 яйца на прилавок и положите коробку обратно в холодильник.
Шкаф - это ваш кэш L3, в три раза медленнее, чем L2. Требуется 3 x 48 = 2 минуты и 24 секунды, чтобы сделать три шага к шкафу, наклониться, открыть дверь, повернуть вокруг чтобы найти противень для выпечки, извлеките его из шкафа, откройте его, выкопайте, чтобы найти разрыхлитель, положите его на прилавок и смести беспорядок, который вы пролили на пол.
А основная память? Это магазин на углу, в 5 раз медленнее, чем L3. Требуется 5 x 2:24 = 12 минут, чтобы найти свой кошелек, надеть обувь и куртку, броситься вниз по улице, взять литр молока, броситься домой, сними обувь и куртку и возвращайся на кухню.
Обратите внимание, что все эти обращения имеют постоянную сложность - O (1) - но различия между ними могут оказать огромное влияние на производительность. Оптимизация исключительно для сложности big-O - это все равно что решить, добавлять ли шоколадные чипсы в тесто 1 за раз или 10 за раз, но забыть положить их в свой список покупок.
Мораль истории: Организуйте доступ к своей памяти так, чтобы ЦПУ приходилось ходить за продуктами как можно реже.
Числа были взяты из сообщения в блоге Ошибка очистки кэша , в котором указано, что для конкретного процессора Intel 2012 года верно следующее:
- доступ к регистру = 4 инструкции за цикл
- L1 латентность = 3 цикла (12 х регистров)
- L2 латентность = 12 циклов (4 x L1, 48 x регистр)
- задержка L3 = 38 циклов (3 x L2, 12 x L1, 144 x регистр)
- Задержка DRAM = 65 нс = 195 циклов на процессоре 3 ГГц (5 x L3, 15 x L2, 60 x L1, 720 x регистр)
Галерея эффектов кэш-памяти также хорошо читает эту тему.