Если ячейка памяти была запрошена сейчас, высока вероятность повторного обращения к ней в ближайшее время.
for (int i = 0...)).Если запрошен адрес $, высока вероятность обращения к соседним адресам +1, A+2, \dots$
Кэш оперирует не байтами, а кэш-линиями (Cache Lines) по 64 байта (^6 = 64$).
Аппаратный компаратор находит набор по индексу и сравнивает тег адреса с тегом в кэше. Если тег совпал и Valid Bit = 1, байт выдается процессору мгновенно.
Тег не совпал. Процессор приостанавливает выполнение инструкции, инициирует загрузку всей 64-байтной строки из ОЗУ и помещает её в кэш.
где $ — коэффициент попаданий (Hit Rate), $ — промахи (Miss Rate), {ram}$ — задержка обращения к ОЗУ (Miss Penalty).
Падение Hit Rate всего на 9% (с 99% до 90%) утраивает задержку памяти! Без принципов локальности и больших кэшей L3 процессоры теряли бы до 80% времени на ожидание шины памяти.
Чем больше бит на ячейку, тем меньше разница напряжений между соседними состояниями. При QLC малейшая утечка нескольких электронов искажает данные, требуя тяжелых алгоритмов коррекции ошибок LDPC ECC.
Приоритет: Наносекундная латентность случайного доступа.
Решение: Максимальный объем DRAM (DDR5) + NVMe SSD для упреждающего журнала транзакций (WAL).
Приоритет: Минимальная стоимость за терабайт и сохранность данных на десятилетия.
Решение: Ленты LTO-9 / LTO-10 + массивы HDD с черепичной записью (SMR).
Приоритет: Большой кэш L3 (3D V-Cache) + потоковая подгрузка текстур NVMe PCIe 4.0/5.0 напрямую в VRAM GPU.
Приоритет: Энергопотребление в режиме сна, стойкость к обесточиванию (PLP), LPDDR4X/5 + eMMC/UFS.