Зачем процессору нужен кэш

Устройство компьютера

Кэш — встроенная в процессор память, в которую записываются наиболее часто используемые данные (команды) оперативной памяти, что существенно ускоряет работу. Возникает резонный вопрос: зачем это нужно и не проще ли брать необходимую информацию из ОЗУ (оперативной памяти)?

Технологически и правда проще обойтись без кэша. Проблема в том, что запросы к ОЗУ довольно накладны. Чтобы снизить эти издержки и придумали некий промежуточный буфер.

В кэш помещаются данные, которые — с наибольшей вероятностью — понадобятся на следующих этапах выполнения программы. Доступ к этим данным выполняется на порядок быстрее, чем к оперативной памяти.

В современных процессорах используется:

  • Кэш 1-го уровня (L1 cache) — находится на ядре процессора, самая быстрая работа. Это память для команд (инструкций) и данных. Обладает наименьшим размером (всего несколько килобайт). У Intel Core i7-8700K объём составляет 64 (32 КБ для команд + 32 КБ для данных) КБ, у Ryzen 7 2700X — 96 (64+32) КБ.
  • Кэш 2-го уровня (L2 cache) — более ёмкий, нежели L1, но работает медленнее. Объём, как правило, не превышает нескольких мегабайт. Размер L2 кэша у Intel Core i7-8700K — 1,5 МБ, у Ryzen 7 2700X — 4 МБ.
  • Кэш 3-го уровня (L3 cache) — ещё более объёмная и медленная память. У процессора Intel Core i7-8700K — 12 МБ, у Ryzen 7 2700X — 16 МБ.
  • Кэш 4-го уровня (L4 cache) — как правило, используется в серверных процессорах. Из настольного сегмента можно вспомнить Intel Core пятого поколения. У модели i7-5775C объём составлял 128 МБ, что давало неплохой прирост в некоторых задачах. Очевидно, что это самый медленный из кэшей, но в любом случае, получать данные из него быстрее, нежели из оперативной памяти.

Как уже говорилось выше, в кэш помещаются данные из оперативной памяти, которые с наибольшей вероятностью понадобятся процессору для дальнейшей работы.

Если на очередном шаге работы процессору нужно выполнить какую-то операцию с участием определённой ячейки памяти, сначала нужное значение ищется в кэше 1-го уровня. Если там данных нет (для этого используется специальный термин кэш-промах), они ищутся в кэше 2-го уровня и т.д. Если ни в одном кэше данных не нашлось, происходит обращение к оперативной памяти.

В современных процессорах вероятность нахождения данных в кэшах 1–3 уровней доходит до 99%. В случае кэш-промаха процессор тратит десятки и даже сотни тактов на ожидание получения данных из оперативной памяти. Да, скорость работы памяти значительно уступает скорости процессора. Именно по этой причине и нужен кэш.