Кэш L1, L2, L3: что это такое и для чего нужен кэш в современном мире?
![]()

Иногда в процессе эксплуатации компьютера встречаются такие понятия , как кэш L1, L2, L3 . В опрос : «Ч то это такое? » больше не поставит вас в тупик, если вы дочитаете статью до конца.
Кэш L1, L2, L3 — это кэш процессора разных ступеней.
Что такое кэш?

Если объяснять достаточно просто, то кэш — это самый быстрый из существующих типов памяти. По идее вы должны знать, что у компьютера быва е т несколько типов памяти:
- Hadr-диск, который хранит в себе все основные файлы компьютера: начиная от операционной системы и заканчивая всеми установленными программами. По своей производительности это довольно медленная память.
- Оперативная память, она же RAM, как правило, имеет меньший объем, но более высокую производительность , чем память hard-диска.
- Память процессора, котор ая среди пользователей называ ется «кэш». Это самая « скоростная » память.
Кэш является статистической памятью, а это значит, что он может сохранять в себе сведения без необходимости постоянно их обновлять. Основным предназначением кэша является ускорение работы оперативной памяти.
Как работает кэш процессора?

Любая программа на компьютере — это всего лишь большой набор различных инструкций, чтобы указать ПК , как он должен поступать. Данные инструкции обрабатывает процессор, но до него их нужно как-то донести. Как это происходит?
В момент запуска программы с hard-диска инструкции «перехватывает» оперативная память. Далее она по иерархии «передает» эти инструкции «выше», то есть непосредственно в процессор. Процессор способен обрабатывать очень много подобных инструкций в секунду времени. Однако, чтобы обработка инструкций не «тормозила» , у процессора должна быть собственная сверхбыстрая память, то есть кэш, который сейчас есть в каждом современном процессоре.
За перераспределение инструкций из процессора в его память отвечает специальный микроконтроллер памяти процессора, именно он отправляет инструкции в кэш.
С иерархией памяти в компьютере вроде все понятно, но что же такое кэш L1, L2, L3?
Что это такое — «кэш L1, L2, L3»?

Итак, инструкции программы попали в кэш процессора. Но тут есть собственная иерархия памяти, которая, также как и в компьютере, основывается на скорости функционирования кэша.
Получается, что кэш L1, L2, L3 — это иерархия памяти процессор а :
- L1 — это самый шустрый кэш процессора. В нем сохраняются те инструкции, которые м огут понадобиться процессору для работы программы в любую секунду.
- L2 — это уже не такой шустрый кэш, как L1, однако он существенно превосходит его по объему. В данном кэше сохраняются инструкции, которые м огут понадобиться процессору для работы программы в обозримом будущем.
- L3 — это самый медлительный и самый масштабный по объему кэш процессора. Этот тип кэша содержит в себе сведения, которые вряд ли понадобятся процессору в ближайшее время.
Наши инструкции вначале попадают в L3, потом — в L2 и в конце — в L1. Когда процессор « ищет » необходимые инструкции, то делает это в обратном порядке: сначала ищет в L1, потом — в L2 и в конце — в L3. Бывают случа и , когда процессор не находит необходимые инструкции в собственном кэше, тогда он делает запрос к оперативной памяти.
В общем, принцип прохождения инструкций для работы программы прост: они передаются от самой медленной памяти (hard-диск) к самой быстрой (кэш L1). А процессор посылает запросы в обратном порядке: от самой быстрой памяти к самой медленной.
Нужно отметить еще два понятия , связанных с кэшем:
- Попадание в кэш — это когда процессор находит нужные инструкции в каком-либо своем кэше: L1, L2, L3.
- Задержка — это время , необходимое процессору на поиск нужной инструкции в своем кэше. В L1 самая минимальная задержка, в L2 — больше, в L3 — еще больше , и дальше по иерархии.
Для чего нужен кэш в процессоре в современном мире?

Исходя из всего написанного выше , можно заключить, что кэш нужен для того , чтобы ускорить взаимодействие между процессором и основной памятью. От скорости такого взаимодействия напрямую зависит общая производительность компьютера.
Именно поэтому многие компании процессоров улучшают архитектуру своих устройств и увеличивают объем к э ша в процессоре, чтобы как можно больше было попаданий в к э ш и чтобы уменьшить время задержек. По статистик е, средний процент попаданий в к э ш в современном процессоре составляет 94-96%. Чтобы увеличить этот процент , многие компании идут даже на эксперименты, например , компания Intel в один модельный ряд своих процессоров внедрила к э ш L4, но все это пока так и осталось на уровне эксперимента.
Заключение
Теперь вы знаете, что к э ш L1, L2, L3 — это всего лишь иерархия к э ша в процессоре, а не что-то сверхъестественное и непонятное. Качественная реализация к э ша в процессоре — это более высокая производительность компьютера. А высокая производительность ПК — это лояльность его пользователей. Поэтому компании-производители процессоров продолжают эксперименты с кэшем, чтобы повысить процент попаданий в к э ш.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
На что влияет кэш процессора L1 L2 L3
Компьютерные процессоры сделали значительный рывок в развитии за последние несколько лет. Размер транзисторов с каждым годом уменьшается, а производительность растет. При этом закон Мура уже становится неактуальным. Что касается производительности процессоров, то следует учитывать, не только количество транзисторов и частоту, но и объем кэша.
Возможно, вы уже слышали о кэш памяти когда искали информацию о процессорах. Но, обычно, мы не обращаем много внимания на эти цифры, они даже не сильно выделяются в рекламе процессоров. Давайте разберемся на что влияет кэш процессора, какие виды кэша бывают и как все это работает.
Что такое кэш процессора?

Если говорить простыми словами, то кэш процессора это просто очень быстрая память. Как вы уже знаете, у компьютера есть несколько видов памяти. Это постоянная память, которая используется для хранения данных, операционной системы и программ, например, SSD или жесткий диск. Также в компьютере используется оперативная память. Это память со случайным доступом, которая работает намного быстрее, по сравнению с постоянной. И наконец у процессора есть ещё более быстрые блоки памяти, которые вместе называются кэшем.
Если представить память компьютера в виде иерархии по её скорости, кэш будет на вершине этой иерархии. К тому же он ближе всего к вычислительным ядрам, так как является частью процессора.
Кэш память процессора представляет из себя статическую память (SRAM) и предназначен для ускорения работы с ОЗУ. В отличие от динамической оперативной памяти (DRAM), здесь можно хранить данные без постоянного обновления.
Как работает кэш процессора?
Как вы, возможно, уже знаете, программа — это набор инструкций, которые выполняет процессор. Когда вы запускаете программу, компьютеру надо перенести эти инструкции из постоянной памяти в процессору. И здесь вступает в силу иерархия памяти. Сначала данные загружаются в оперативную память, а потом передаются в процессор.
В наши дни процессор может обрабатывать огромное количество инструкций в секунду. Чтобы по максимуму использовать свои возможности, процессору необходима супер быстрая память. Поэтому был разработан кэш.
Контроллер памяти процессора выполняет работу по получению данных из ОЗУ и отправке их в кэш. В зависимости от процессора, используемого в вашей системе, этот контроллер может быть размещен в северном мосту материнской плате или в самом процессоре. Также кэш хранит результаты выполнения инструкций в процессоре. Кроме того, в самом кэше процессора тоже есть своя иерархия.
Уровни кэша процессора — L1, L2 и L3
Веся кэш память процессора разделена на три уровни: L1, L2 и L3. Эта иерархия тоже основана на скорости работы кэша, а также на его объеме.
- L1 Cache (кэш первого уровня) — это максимально быстрый тип кэша в процессоре. С точки зрения приоритета доступа, этот кэш содержит те данные, которые могут понадобиться программе для выполнения определенной инструкции;
- L2 Cache (кэш второго уровня процессора) — медленнее, по сравнению L1, но больше по размеру. Его объем может быть от 256 килобайт до восьми мегабайт. Кэш L2 содержит данные, которые, возможно, понадобятся процессору в будущем. В большинстве современных процессоров кэш L1 и L2 присутствуют на самих ядрах процессора, причём каждое ядро получает свой собственный кэш;
- L3 Cache (кэш третьего уровня) — это самый большой и самый медленный кэш. Его размер может быть в районе от 4 до 50 мегабайт. В современных CPU на кристалле выделяется отдельное место под кэш L3.

На данный момент это все уровни кэша процессора, компания Intel пыталась создать кэш уровня L4, однако, пока эта технология не прижилась.
Для чего нужен кэш в процессоре?
Пришло время ответить на главный вопрос этой статьи, на что влияет кэш процессора? Данные поступают из ОЗУ в кэш L3, затем в L2, а потом в L1. Когда процессору нужны данные для выполнения операции, он пытается их найти в кэше L1 и если находит, то такая ситуация называется попаданием в кэш. В противном случае поиск продолжается в кэше L2 и L3. Если и теперь данные найти не удалось, выполняется запрос к оперативной памяти.
Теперь мы знаем, что кэш разработан для ускорения передачи информации между оперативной памятью и процессором. Время, необходимое для того чтобы получить данные из памяти называется задержкой (Latency). Кэш L1 имеет самую низкую задержку, поэтому он самый быстрый, кэш L3 — самую высокую. Когда данных в кэше нет, мы сталкиваемся с еще более высокой задержкой, так как процессору надо обращаться к памяти.
Раньше, в конструкции процессоров кєши L2 и L3 были были вынесены за пределы процессора, что приводило к высоким задержкам. Однако уменьшение техпроцесса, по которому изготавливаются процессоры позволяет разместить миллиарды транизисторов в пространстве, намного меньшем, чем раньше. Как результат, освободилось место, чтобы разместить кэш как можно ближе к ядрам, что ещё больше уменьшает задержку.
Как кэш влияет на производительность?
Влияние кэша на произвоидтельность компьютера напрямую зависит от его эффективности и количества попаданий в кэш. Ситуации, когда данных в кэше не оказывается очень сильно снижают общую производительность.
Представьте, что процессор загружает данные из кэша L1 100 раз подряд. Если процент попаданий в кэш будет 100%, процессору понадобиться 100 наносекунд чтобы получить эти данные. Однако, как только процент попаданий уменьшится до 99%, процессору нужно будет извлечь данные из кэша L2, а там уже задержка 10 наносекунд. Получится 99 наносекунд на 99 запросов и 10 наносекунд на 1 запрос. Поэтому уменьшение процента попаданий в кэш на 1% снижает производительность процессора 10%.
В реальном времени процент попаданий в кэш находится между 95 и 97%. Но как вы понимаете, разница в производительности между этими показателями не в 2%, а в 14%. Имейте в виду, что в примере, мы предполагаем, что прощенные данные всегда есть в кэше уровня L2, в реальной жизни данные могут быть удалены из кэша, это означает, что их придется получать из оперативной памяти, у которой задержка 80-120 наносекунд. Здесь разница между 95 и 97 процентами ещё более значительная.
Низкая производительность кэша в процессорах AMD Bulldozer и Piledriver была одной из основных причин, почему они проигрывали процессорам Intel. В этих процессорах кэш L1 разделялся между несколькими ядрами, что делало его очень не эффективным. В современных процессорах Ryzen такой проблемы нет.
Можно сделать вывод, чем больше объем кэша, тем выше производительность, поскольку процессор сможет получить в большем количестве случаев нужные ему данные быстрее. Однако, стоит обращать внимание не только на объем кэша процессора, но и на его архитектуру.
Выводы
Теперь вы знаете за что отвечает кэш процессора и как он работает. Дизайн кэша постоянно развивается, а память становится быстрее и дешевле. Компании AMD и Intel уже провели множество экспериментов с кэшем, а в Intel даже пытались использовать кэш уровня L4. Рынок процессоров развивается куда быстрее, чем когда-либо. Архитектура кэша будет идти в ногу с постоянно растущей мощностью процессоров.
Кроме того, многое делается для устранения узких мест, которые есть у современных компьютеров. Уменьшение задержки работы с памятью одна из самых важных частей этой работы. Будущее выглядит очень многообещающе.
Уровни кэша процессора и влияние на производительность
Когда мы говорим о производительности компьютера, одним из ключевых факторов является скорость обработки данных процессором. И здесь на помощь приходит кэш CPU – небольшая, но очень важная часть процессора, которая играет решающую роль в ускорении работы компьютера.
Как работает кэш ЦП и что такое кэш L1, L2 и L3? Готовы разобраться в том, как работает кэш CPU и какие преимущества он может принести? Тогда продолжайте чтение и приготовьтесь к захватывающему погружению в технический мир компьютерных процессоров!
Что такое кэш процессора
Кэш процессора относится к памяти, встроенной непосредственно в CPU. Он отличается от системной памяти (ОЗУ), которая установлена на материнской плате и, на самом деле, намного медленнее, чем кэш-память ЦП.
Давайте разберем некоторые из этих различий.
Чем кэш ЦП отличается от системной памяти (RAM, VRAM, ETC)
Если оперативная память ПК является системной памятью, зачем центральному процессору собственный выделенный встроенный кэш?
В конце концов, оперативная память с каждым годом становится только быстрее, причём как DDR4, так и DDR5 RAM раздвигают пределы частоты DRAM.
Ответ на удивление прост: системная память по-прежнему недостаточно быстра, и даже несмотря на то, что она установлена ближе к ЦП, чем любой из других компонентов, это расстояние по-прежнему имеет значение с точки зрения передачи сигнала.
Кэш ЦП необходим, потому что к тому времени, когда ваше хранилище и ОЗУ разобрались, что вы делаете, ваш ЦП ещё должен разбить то, что он делает в режиме реального времени, на двоичный машинный язык.
Это требует некоторой опережающей скорости со стороны ЦП, даже если кэш-память ЦП обычно измеряется десятками мегабайт, а не дюжиной или более гигабайт, как системная оперативная память.
Как работает кэш процессора
Таким образом, цель кеша ЦП состоит в том, чтобы разбить всё, что происходит на вашем ПК, на простые 1 и 0, с которыми ЦП фактически работает.
Для сравнения, выделенная системная оперативная память может хранить практически любые данные, от используемых приложений до видеофайлов и т.д., когда вы выполняете рендеринг видео.

Кэш ЦП предназначен для управления фактическими инструкциями в реальном времени, которые подаются на ЦП, а больший размер кеша ЦП снижает потребность в частом доступе ЦП к системной памяти, повышая производительность в рабочих нагрузках, чувствительных к кешу ЦП.
Подробнее об этом чуть позже!
Что такое кэш L1, L2 и L3
Кэш L1
Кэш L1 или Кэш первого уровня – это основной кэш ЦП. Это самый быстрый «уровень» кэша ЦП, а также самый маленький объём памяти. Чем быстрее/ниже уровень кэша, тем меньше циклов требуется вашему процессору для доступа к нему.
Для внешнего пользователя эти «циклы» соответствуют отдельным герцам на процессорах, способных обрабатывать несколько гигагерц циклов в секунду, это означает, что современный ЦП обрабатывает миллиарды циклов в секунду.
Так что на самом деле разница между кэшем L1 и L2, о которой мы здесь говорим, заметна только на стороне машины. Однако, эта разница всё ещё имеет значение, так что давайте поговорим о кэше L2!
Кэш L2
Кэш L2 или Кэш второго уровня, является вторичным кэшем ЦП. Он медленнее, чем кэш-память уровня 1, но всё же довольно быстр и обеспечивает значительный прирост объёма памяти.
В зависимости от того, есть ли у вашего ЦП кэш-память L3 или нет, кэш-память L2 будет либо распределена между отдельными ядрами ЦП, либо будет совместно использоваться всеми ядрами ЦП. До недавнего времени процессоры Intel использовали только кэш-память L2, в то время как AMD использует кэш-память L3 уже несколько лет.
В наши дни Intel также использует Cache L3, хотя он распределяется по-разному в зависимости от того, является ли ядро ЦП P-Core или E-Core.

Кэш L3
Наконец, поговорим о кэше L3 , также известном как кэш третьего уровня.
Кэш L3 медленнее, чем кэш уровня 1 и 2, но служит цели сделать их обоих быстрее, предоставляя им самый большой пул памяти на ЦП.
Кэш L3 также используется всеми ядрами ЦП, тогда как кэш L1 и L2 обычно встроены в отдельные ядра.
Как кэш процессора влияет на производительность
Теперь, когда мы рассмотрели основы того, что такое кэш ЦП, давайте поговорим о том, как он может повлиять на производительность.
Я думаю, что лучшим примером для этой статьи будет AMD Ryzen 5800X и его вариант 5800X3D .

Это более или менее одинаковые ЦП с точки зрения архитектуры ядра ЦП и количества ядер, но 3D-вариант может похвастаться гораздо большей кэш-памятью L3 (колоссальные 96 МБ в 3D по сравнению с 32 МБ на стандартном 5800X).
Это значительно упрощает количественную оценку того, как повышение кэш-памяти ЦП влияет на производительность, поскольку, как правило, кэш-память ЦП постепенно увеличивается вместе с другими характеристиками ЦП по мере того, как вы поднимаетесь по стеку продуктов.
Технически ЦП потребовал некоторых изменений, чтобы сделать возможным увеличение кэш-памяти L3. Базовый и повышающий блоки в 3D снижены до 3,4 ГГц и 4,5 ГГц, соответственно, по сравнению со спецификацией 3,8-4,7 ГГц исходного 5800X.
Кроме того, 3D вообще не поддерживает разгон. Это довольно незначительное снижение тактовой частоты, но всё же стоит отметить.
Как же влияет на производительность повышение кэш-памяти ЦП без существенного изменения остальной части ЦП? Давайте посмотрим поближе.

С точки зрения создания контента, повышение кэш-памяти L3 либо не обеспечивает существенного прироста производительности в большинстве рабочих нагрузок (поскольку кэш-память изначально не была узким местом), либо активно снижает производительность из-за других жертв, которые пришлось принести для увеличенный кэш L3, например, более низкие тактовые частоты.
Однако, для игр увеличение кэш-памяти L3 оказывается весьма полезным.

Согласно проведенному тесту 5800X3D с 41 игрой, увеличение кэш-памяти L3 весьма существенно для игровой производительности, если игра правильно оптимизирована.
Даже самая интенсивная игра в этом списке, Microsoft Flight Simulator, показывает колоссальный прирост производительности, в среднем, на 21%.
Те, кто особенно хорошо разбирается в игровых тестах, также должны знать о важности повышения минимумов на 1%, поскольку они указывают, когда игровой движок изо всех сил пытается отобразить всё на экране.
Увеличенный кэш L3 очень помогает в этих сценариях, как показано ниже:

Какой вывод?
Очевидно, что вы не можете реально увеличить кэш процессора, не меняя весь процессор.
Для покупателя гораздо разумнее смотреть на тесты для ваших рабочих нагрузок при оценке того, какой ЦП лучше всего соответствует вашим потребностям, а не на то, какой из них просто имеет больше или меньше кэш-памяти.
Тем не менее, 5800X и 5800X3D предоставили нам беспрецедентный взгляд на то, как на самом деле может повлиять на производительность процессора упущенная из виду спецификация кэш-памяти процессора.
Оказывается, это действительно хорошо для игр и некоторых рабочих нагрузок, таких как кодирование H.264. Но, в целом, кэш-память процессора не должна быть вашим основным приоритетом при покупке процессора, даже если больший кэш-память процессора лучше для игровой производительности.
Часто задаваемые вопросы
Существует ли кэш L4?
Если вы внимательно следили за этой статьей, вы могли заметить, что кэш L1 и L2 долгое время был стандартом, а кэш L3 использовался только для процессоров AMD до более поздних поколений процессоров Intel.
Без наличия кэша L3 кэш L2, в значительной степени, выполнял ту же роль на старых процессорах.
Таким образом, кэш L4 является ещё одним уровнем более высокой емкости и более низкой скорости встроенной памяти ЦП. Это довольно редко и совсем не распространено в процессорах для настольных ПК, но оно существует, особенно если рассматриваемый процессор для настольных ПК имеет встроенную графику.
Со временем это может даже стать более распространенным явлением, поскольку Intel объявила, что их процессоры 14-го поколения будут использовать кэш L4.
Всегда ли кэш-память L2 и кэш-память L3 включены в ЦП?
Кэш L3, да.
Кэш L2, почти всегда да. Однако, в прошлом L2-кэш также обнаруживался на сопроцессоре в непосредственной близости от ЦП.
В наши дни все «L-кэши» находятся на самом ЦП, а ОЗУ и видеопамять графического процессора являются единственными источниками памяти, доступными для остальной части системы и ЦП после использования собственного кэша.
Правда в том, что мне нужно было сократить довольно много информации, исследуемой для этой статьи, в интересах сохранения краткости и доступности для более широкой аудитории.
Более глубокие тонкости кэширования ЦП и инструкций ЦП немного… выходят за рамки этой статьи, особенно если вы не программист или инженер. Тем не менее, мы надеемся, что приведенная здесь информация поможет понять, как кэш ЦП влияет на производительность!
Что такое кэш? L1 vs L2 vs L3

В любом процессоре любого компьютера – от дешевого ноутбука до сервера в миллион долларов – есть то, что называется кэшем. И чаще всего он ещё и многоуровневый.
Должно быть, это что-то важное, иначе зачем бы это было? Но что оно делает, и зачем там несколько уровней? И что, вообще, значат всякие там множественно-ассоциативные 12-канальности?
Что же такое кэш?
Это небольшая, но очень быстрая память, которая находится рядом с логическими блоками процессора.
Но, конечно, такого определения нам недостаточно.
Представим себе идеальную волшебную систему хранения данных: бесконечно быструю, с бесконечным числом одновременных операций, и при этом обеспечивая абсолютную сохранность данных. Ничего подобного в реальности не существует, но если бы существовало, то устройство процессора было бы существенно проще.
Процессору было бы достаточно иметь только логические блоки для выполнения арифметических операций и систему для контроля передачи данных. Потому, что наша воображаемая система хранения мгновенно отправляет и получает все необходимые значения; ни один из логических блоков не задерживается в ожидании выполнения транзакции данных.
Но мы такими магическими технологиями хранения не обладаем. У нас есть лишь жесткие или твердотельные накопители, и даже лучшие из них не способны справиться с обработкой всех транзакций, необходимых для типичного процессора.

«Слон Мироздания» в мире хранения данных. Источник: techspot.com
Причина в том, что современные процессоры невероятно быстры – им требуется всего один такт, чтобы сложить два 64-битных целых числа, а для процессора, работающего на частоте 4 ГГц, это занимает всего 0,00000000025 секунды (четверть наносекунды).
В то время как вращающимся жестким дискам требуются тысячи наносекунд только для того, чтобы найти данные на внутренних дисках, не говоря уже об их передаче. Твердотельные накопители работают быстрее, но и им требуются десятки или сотни наносекунд.
Понятно, что такие накопители нельзя встроить внутрь процессора, а это означает, что между ними будет физическое разделение и, следовательно, понадобится больше времени на перемещение данных, что еще больше усугубляет ситуацию.

К сожалению, мир хранения данных стоит скорее на «Великой Черепахе». Источник: techspot.com
Итак, нам нужна еще одна система хранения данных, которая находилась бы между процессором и основным хранилищем. Она должна быть быстрее, чем диск, уметь обрабатывать большое количество транзакций одновременно и быть в непосредственной близости к процессору.
Что ж, у нас уже есть такая штука, и она называется RAM. Во всех компьютерах она используется как раз для этой цели.
Почти всегда это – DRAM (динамическая память с произвольным доступом), и она способна совершать обмен данными намного быстрее любого диска.

Источник: techspot.com
Однако, значительно превосходя в скорости, DRAM столь же значительно уступает в объёме хранимых данных.
Самые большие на сегодня чипы DDR4 (производства Micron, одного из немногих производителей DRAM) уступают самым большим по объёму жестким дискам примерно в 4000 раз.
Поэтому, увеличив скорость обмена данными, встала другая задача: с помощью аппаратных и программных решений определить, какие данные следует поместить в ограниченный объём DRAM, для оперативного пользования процессором.
Но по крайней мере, DRAM можно встроить в корпус процессора (встраиваемая DRAM, eDRAM). Однако процессоры относительно небольшие, поэтому особо внутри них не развернёшься.

10 Мб DRAM чип слева от графического процессора Xbox 360. Источник: CPU Grave Yard
Подавляющее большинство модулей DRAM располагается на материнской плате рядом с процессором, и это всегда ближайший к процессору компонент в компьютерной системе. И всё равно это недостаточно быстро.
Опять же, для поиска данных DRAM требуется время около 100 наносекунд, но по крайней мере она может передавать миллиарды бит данных в секунду. Похоже, нам понадобится еще одна промежуточная память, между блоками процессора и DRAM.
Встречайте: SRAM (статическая память с произвольным доступом). В то время как DRAM использует микроскопические конденсаторы для хранения данных в виде электрического заряда, SRAM для той же цели использует транзисторы, работающие почти с той же скоростью, что и логические блоки в процессоре (примерно в 10 раз быстрее, чем DRAM).

Источник: techspot.com
Конечно, у SRAM есть недостаток, и опять же, речь об объёме.
Транзисторная память занимает намного больше физического места, чем DRAM: чип SRAM размером с чип DDR4 4 Гб будет иметь объём менее 100 Мб. Но поскольку технологически SRAM основана на том же процессе, что и процессор, то её можно встроить прямо внутрь него, в непосредственной близости к его логическим блокам.
Каждая такая дополнительная система памяти на пути к сверхбыстрым узлам процессора отличается повышенной скоростью в ущерб её объёму. Можно добавить больше таких систем, каждая из которых будет быстрее, но меньше.
И вот теперь мы можем дать более внятное определение, что такое кэш: это несколько модулей SRAM, расположенных внутри процессора. Они обеспечивают максимальную загрузку логических блоков, выполняя обмен данными на сверхвысоких скоростях. Этого достаточно? Отлично, потому что с этого момента все станет намного сложнее!
Кэш – это как многоуровневая парковка
Как мы выяснили, кэш необходим, потому что системы хранения данных неидеальны и не способны удовлетворить соответствующие требования логических блоков в процессоре. Современные CPU и GPU содержат массив блоков SRAM, которые внутренне организованы в иерархию – последовательность кэшей, упорядоченных следующим образом:

Источник: techspot.com
На этой схеме область процессора выделена черным пунктирным прямоугольником. Блоки ALU (арифметико-логическое устройство) находятся в крайнем левом углу; это те самые структуры, которые и делают процессор – процессором, выполняя математические вычисления. Ближайшим к ALU уровнем памяти являются регистры (они сгруппированы в файл регистров) – но технически они кэшем не являются.
Каждый из них содержит одно число, например 64-битное целое; само значение может быть фрагментом каких-то данных, кодом определенной инструкции, либо же ссылкой на адрес других данных.
Файл регистров в процессоре настольного компьютера довольно мал – например, в Intel Core i9-9900KF их на каждое ядро по два банка: один для целых чисел, содержащий 180 64-битных регистров, другой – для векторов (небольших массивов чисел), имеющий 168 256-битных регистров. Таким образом, общий файл регистров для каждого ядра чуть меньше 7 Кб. Для сравнения, размер файла регистров в потоковых мультипроцессорах (графических эквивалентах ядер CPU) в NVIDIA GeForce RTX 2080 Ti равен 256 Кб.
Регистры – это SRAM-память, как и кэш, но работающие на той же скорости, что и обслуживаемые ими ALU, вводя и выводя данные за один такт. Но они не предназначены для хранения большого количества данных (а только одного их фрагмента), поэтому поблизости всегда есть несколько блоков памяти побольше: это кэш уровня 1, L1 (Level 1).

Процессор Intel Skylake, увеличенное изображение одного из ядер. Источник: Wikichip
На фото крупным планом показано ядро процессора Intel Skylake для PC.
Зелёным прямоугольником слева выделены ALU и файлы регистров. В центре вверху белым прямоугольником показан кэш данных 1 уровня (L1 D cache). Его объём небольшой, всего 32 Кб, но, как и регистры, он находится очень близко к логическим блокам и работает с той же скоростью, что и они.
Второй белый прямоугольник – это кэш инструкций 1 уровня (L1 Ins cache), также размером 32 Кб. Как следует из названия, здесь хранятся различные команды, готовые к разделению на более мелкие – так называемые микрооперации (обычно обозначаемые как μops) для выполнения ALU. Для них также есть свой кэш – так сказать, кэш нулевого уровня (L0 cache), поскольку он меньше (всего на 1500 операций) и ближе, чем кэши L1.
Вы можете спросить: а почему эти блоки SRAM такие маленькие? Почему бы не увеличить их размер до мегабайта хотя бы? Во-первых, основные логические блоки процессора занимают в чипе такое же пространство, как и кэши данных и инструкций вместе взятые, поэтому увеличение размеров последних приведет и к существенному увеличению общего размера кристалла.
А во-вторых (и в-главных), причина, по которой они хранят всего несколько килобайт, заключается в том, что время, необходимое для поиска и извлечения данных, увеличивается по мере увеличения объёма памяти. Кэш L1 должен быть очень быстрым, поэтому необходим компромисс между размером и скоростью – в лучшем случае требуется около 5 тактовых циклов (чуть больше для значений с плавающей точкой), чтобы предоставить данные из этого кэша, готовые к использованию.

Кэш L2 в Skylake: 256 Кбайт удовольствия SRAM
Но если бы это был единственный кэш внутри процессора, то производительность последнего резко упала бы. Вот почему все процессоры имеют другой уровень памяти, встроенный в ядра: кэш 2 уровня, L2 (Level 2 cache). Это общее хранилище для инструкций и данных.
Его размер всегда несколько больше, чем L1: к примеру, в процессорах AMD Zen 2 устанавливается до 512 Кб памяти L2, поэтому кэши более низкого уровня обеспечиваются должным образом. Но за этот дополнительный размер приходится платить: на поиск и передачу данных из этого кэша уходит примерно вдвое больше времени по сравнению с L1.
Возвращаясь в прошлое, во времена оригинального Intel Pentium, кэш-память 2 уровня представляла собой отдельную микросхему – либо на небольшой съёмной плате расширения по подобию RAM DIMM, либо встроенную в материнскую плату. Затем кэш L2 переехал в сам корпус процессора, и в конечном итоге был интегрирован в кристалл, что стало причиной появления Pentium III и AMD K6-III.
За этим развитием вскоре последовал другой уровень кэш-памяти, предназначенный для поддержки более низких уровней, и это было связано с появлением многоядерных чипов.

Intel Kaby Lake. Источник: Wikichip
На этой макрофотографии чипа Intel Kaby Lake мы видим его 4 ядра слева от центра (интегрированный GPU почти полностью занимает половину кристалла справа от центра). Каждое
ядро имеет свой собственный «личный» набор кэшей L1 и L2 (белые и желтый прямоугольники), но кроме этого имеет ещё и третий банк блоков SRAM (выделены красным).
Несмотря на то, что кэш 3 уровня (Level 3 cache) непосредственно окружает каждое ядро, он является общим для всех ядер – любое из ядер может свободно получать доступ к содержимому L3 другого ядра. Этот кэш-уровень намного больше (от 2 до 32 Мб), но и намного медленнее – в среднем на 30 циклов, особенно если ядру необходимо использовать данные, которые находятся в дальнем блоке кэша.
Ниже мы видим строение ядра в архитектуре AMD Zen 2: кэши данных и инструкций L1 (белым) объемом 32 Кб, L2 (жёлтым) – 512 Кб, и огромный блок кэша L3 (красным) размером 4 Мб.

Увеличенное изображение ядра процессора AMD Zen 2. Источник: Fritzchens Fritz
Постойте! Как 32 Кб могут занимать больше физического пространства, чем 512 Кб? Если L1 хранит так мало данных, почему он пропорционально значительно больше, чем кэши L2 и L3?
Больше, чем просто число
Кэш повышает производительность за счет ускорения передачи данных в логические блоки и хранения наготове часто используемых инструкций и данных. Информация, хранящаяся в кэше, делится на две части: сами данные и информация о том, где они изначально находились (в системной памяти или на носителе) – этот адрес называется тегом кэша.
Когда процессор выполняет операцию, которая собирается прочитать/записать данные из/в память, он начинает с проверки тегов в кэше L1. Если затребованные данные там присутствуют (cache hit, «кэш-попадание»), к ним можно сразу получить доступ напрямую. «Кэш-промах» (cache miss) происходит, когда кэш самого низкого уровня не содержит запрашиваемый тег.
В последнем случае, в кэше L1 создается новый тег, и соответствующие узлы архитектуры процессора начинают перебирать другие уровни кэша (вплоть до основного накопителя, если нужно), чтобы найти данные для затребованного тега. Но чтобы освободить место в кэше L1 для этого нового тега, нужно что-то оттуда выгрузить в L2.
В результате данные почти постоянно перемещаются и перемешиваются за считанные такты. Единственный способ управлять этим всем – оснастить сложной структурой обслуживания SRAM. Иными словами: если бы в ядре процессора был бы только один ALU, то кэш L1 был бы намного проще, но поскольку их десятки (многие из которых жонглируют двумя потоками инструкций), кэшу требуется сразу несколько подключений для поддержания кэшированных данных в движении.
С помощью бесплатных утилит типа CPU-Z можно получить информацию о кэше в вашем процессоре. Что же мы там видим? Важным элементом является параметр ассоциативности (set associative) – он определяет, как именно блоки данных из системной памяти копируются в кэш.
В приведенном выше примере представлена информация о кэше процессора Intel Core i7-9700KF. Каждый из кэшей L1 разделен на 64 маленьких блока, называемых сэтами (set, “набор”), и каждый из них далее делится на кэш-линии (cache lines), размером 64 байта. «Set associative»
(множественно- или наборно-ассоциативный) означает, что блок данных из RAM отображается на кэш-линии одного конкретного сэта, а не где угодно.
«8-way» – означает 8-канальный, то есть каждый один блок может быть ассоциирован с восемью кэш-линиями в сэте. Чем выше уровень ассоциативности (т.е. чем больше каналов), тем выше количество кэш-попаданий при поиске процессором данных, и ниже негативный эффект от кэш-промахов. Недостатком является то, что это усложняет систему, увеличивает энергопотребление, а также может снизить производительность, поскольку обрабатывается больше кэш-линий на каждый блок данных.

Инклюзивный кэш L1+L2, жертвенный кэш L3, политика отложенной записи (write-back policies), ECC (корректор ошибок). Источник: Fritzchens Fritz
Ещё одним аспектом организации кэша является то, как именно данные распределяются по разным уровням. Соответствующие правила устанавливаются так называемой политикой инклюзивности (inclusion policy). Например, процессоры Intel Core имеют полностью инклюзивный кэш L1+L3. Это означает, что одни и те же данные, например, в L1, могут находиться и в L3. Может показаться, что это лишь трата столь ценного пространства кэша, но преимущество состоит в том, что если процессор получает кэш-промах при поиске тега в низком уровне, ему не нужно искать его в более высоком уровне.
В тех же процессорах кэш L2 является не-инклюзивным: любые хранящиеся в нем данные не копируются на какой-либо другой уровень. Это экономит место, но приводит к тому, что системе памяти чипа приходится выполнять поиск по L3 (который всегда намного больше), чтобы найти требуемый тег. Подобным образом устроены и жертвенные кэши (victim cache), но они используются для хранения информации, вытесняемой с более низкого уровня – например, процессоры AMD Zen 2 используют L3 в качестве кэша жертв, который просто хранит данные, вытесненные из L2.
Существуют и другие политики для организации кеширования, например, регламентирующие запись данных в кэш и RAM. Это так называемые политики записи (write policies), и большинство современных процессоров используют кэши с отложенной записью (write-back); это означает, что когда данные записываются на уровень кэша, происходит задержка перед тем, как копия этих данных отправляется в RAM. По большей части эта пауза длится до тех пор, пока данные в кэше не будут замещены новыми данными – и только тогда происходит запись вытесняемых данных в RAM.

Видеокарта Nvidia GA100, оснащенная 20 Мб кэш-памяти L1 и 40 Мб L2.
При выборе объема, типа и политик кэш-памяти, разработчики процессоров стараются найти оптимальный баланс между повышением производительности процессора и увеличением необходимой площади кристалла с неминуемым усложнением системы. Если бы было возможно просто взять и сделать 1000-канальные полностью ассоциативные 20-мегабайтные кэши L1, и при этом их размер не был бы размером с Манхэттэн (и не потребляли бы такую же мощность), то у нас всех уже были бы компьютеры с такими процессорами!
За последние десять лет кэш L1 претерпел мало изменений, в то время как L3 продолжает увеличиваться. Десять лет назад, покупая Intel i7-980X за 999 долларов, вы получали 12 Мб L3. Сегодня же кэшем L3 объёмом 64 Мб снабжены процессоры стоимостью вдвое дешевле.
Итак, кэш – это абсолютно необходимые и совершенно потрясающие технологии. В данной статье мы не рассматривали другие типы кэшей в CPU и GPU (например, буфер ассоциативной трансляции – TLB, или текстурные кэши), но поскольку все они следуют той же логике и структуре уровней, как мы описали здесь, то вам, скорее всего, уже будет не так сложно разобраться с ними.