Кэш процессора


Кэш ЦП — это аппаратный кеш , используемый центральным процессором (ЦП) компьютера для снижения средних затрат (времени или энергии) на доступ к данным из основной памяти . [1] Кэш — это более быстрая память меньшего размера, расположенная ближе к ядру процессора , в которой хранятся копии данных из часто используемых ячеек основной памяти . Большинство ЦП имеют иерархию нескольких уровней кэша (L1, L2, часто L3 и редко даже L4) с различными кэшами для инструкций и данных на уровне 1.

Существуют и другие типы кешей (которые не учитываются в «размере кеша» наиболее важных кешей, упомянутых выше), например резервный буфер трансляции (TLB), который является частью блока управления памятью (MMU), который есть у большинства ЦП.

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

Первые ЦП, использовавшие кеш, имели только один уровень кеша; в отличие от более позднего кеша уровня 1, он не был разделен на L1d (для данных) и L1i (для инструкций). Разделенный кэш L1 начался в 1976 году с ЦП IBM 801 , [2] [3] стал основным в конце 1980-х, а в 1997 году вышел на рынок встраиваемых ЦП с ARMv5TE. В 2015 году даже SoC стоимостью менее доллара разделяли кеш L1. У них также есть кэши L2, а для более крупных процессоров — кэши L3. Кэш L2 обычно не разделяется и действует как общий репозиторий для уже разделенного кеша L1. Каждое ядро многоядерного процессораимеет выделенный кэш L1 и обычно не распределяется между ядрами. Кэш L2 и кэши более высокого уровня могут совместно использоваться ядрами. Кэш L4 в настоящее время встречается редко и обычно находится в динамической памяти с произвольным доступом (DRAM), а не в статической памяти с произвольным доступом (SRAM), на отдельном кристалле или микросхеме (в исключительных случаях форма eDRAM используется для всех уровней кэша, вплоть до L1). Исторически так было и с L1, в то время как более крупные чипы позволяли интегрировать его и вообще все уровни кэша, за исключением, возможно, последнего уровня. Каждый дополнительный уровень кеша имеет тенденцию быть больше и оптимизироваться по-разному.

Кэши (как и для ОЗУ исторически) обычно имеют размер в степенях: 2, 4, 8, 16 и т. Д. КиБ ; при размерах до МиБ (т. е. для более крупных, отличных от L1), очень рано шаблон сломался, чтобы обеспечить большие кэши, не принуждая себя к парадигме удвоения размера, например, с Intel Core 2 Duo с 3 МБ кэш-памяти L2 в апреле 2008 года. Однако намного позже для размеров L1, которые по-прежнему учитываются лишь в небольшом количестве КиБ, однако IBM zEC12 от 2012 года является исключением, чтобы получить необычно большой кэш данных L1 96 КиБ для своего времени, и, например, IBM z13 , имеющий Кэш инструкций L1 96 КиБ (и кэш данных L1 128 КиБ), [4] и Intel Ice Lakeпроцессоры на базе 2018 года выпуска, имеющие 48 КБ кэша данных L1 и 48 КБ кэша инструкций L1. В 2020 году некоторые процессоры Intel Atom (до 24 ядер) имеют (кратные) размеры кэша 4,5 МБ и 15 МБ. [5] [6]

Данные передаются между памятью и кешем блоками фиксированного размера, называемыми строками кеша или блоками кеша . Когда строка кэша копируется из памяти в кэш, создается запись кэша. Запись кэша будет включать в себя скопированные данные, а также запрошенную ячейку памяти (называемую тегом).


Материнская плата компьютера NeXTcube (1990 г.). На нижнем краю изображения, слева от середины, находится ЦП Motorola 68040 , работающий на частоте 25 МГц , с двумя отдельными кэшами 1-го уровня по 4 КиБ каждый на кристалле, один для процессорной части и один для интегрированного FPU , и нет внешний кеш.
Иллюстрация различных способов кэширования областей памяти с помощью определенных ячеек кэша.
Иерархия памяти сервера AMD Bulldozer
Иерархия кэша ядра K8 в процессоре AMD Athlon 64.
Путь чтения для двустороннего ассоциативного кеша