Для чего нужна кэш память на каких микросхемах она реализуется
Что такое кэш-память в компьютере и зачем она нужна?
Кэш-память — хранилище для часто используемой информации, доступ к которому осуществляется намного быстрее по сравнению с оперативной памятью или жестким диском компьютера. Рассматриваемая технология базируется на подсистеме компьютерной памяти. Главным предназначением является ускорение работы устройства. Даже если ПК обладает непроизводительным процессором, благодаря кэшированию информации скорость выполнения задач существенно повышается.
Кэш-памятью оборудованы главные элементы компьютера — жесткие диски, видеокарты, процессоры. Архитектура и работа технологии способны отличаться. Например, кэш может служить обычным буфером обмена — устройство обрабатывает информацию и передает полученные данные в специальный буфер, из которого результат поступает на интерфейс. Назначением такого кэша является предотвращение ошибок благодаря аппаратной проверке информации на целостность.
Кэш процессора
Современный процессор обладает несколькими основными уровнями кэш-памяти, нередко называемыми сверхоперативной памятью. На кристалле находится несколько аппаратных модулей. Самым меньшим по размеру является Cache Level 1, объем которого способен варьироваться от 32 до 64 Кб в зависимости от процессора. L2 обладает повышенной емкостью — от 128 Кб до 12 Мб. L3 считается самым объемным (до 40 Мб) и самым медленным.
Сверхоперативная память необходима для хранения часто используемой информации, поступающей из ОЗУ. Сегодня производители устанавливают больше трех уровней кэширования для обеспечения производительной работы компьютера. Например, компания Intel смогла реализовать дополнительный уровень кэша 0 для краткосрочного хранения расшифрованных команд. В производительных ЦП встречается сверхоперативная память 4 уровня, расположенная в отдельной микросхеме.
Кэш жесткого диска
В жестких дисках присутствует специализированная оперативная память, выступающая в качестве промежуточного звена для хранения информации. Она предназначена для краткосрочного хранения данных, считанных с носителя, но не поступивших на обработку. Необходимость использования кэша обусловлена разницей в скорости между различными компьютерными компонентами. Сегодня популярны модели дисков с объемом кэша от 32 до 64 Мб.
Программный кэш
Представляет собой директорию на жестком диске компьютера, создаваемую программами для непродолжительного хранения информации. Например, браузер сохраняет страницы, просмотренные пользователем. При повторном переходе по введенному адресу браузер сначала обращается к кеш-памяти, чтобы ускорить загрузку страницы и одновременно уменьшить потребление трафика. Размер папки способен варьироваться от разновидности программного обеспечения.
Кэш-память смартфона
Современные мобильные телефоны тоже обладают кэш-памятью. Она представляет собой место хранения информации приложений. Данные записываются в специальную директорию, позволяющую быстро вернуться к просмотру файлов. Наглядный пример использования кэша — работа с галереей. После просмотра фотографий устройство сохраняет уменьшенные копии изображений. Также краткосрочная память вмещает настройки приложений, отчеты и загруженные веб-ресурсы.
Если кэш-память телефона будет перегружена, пользователь заметит существенное замедление работы мобильного устройства. Могут даже возникнуть программные ошибки, а некоторые приложения иногда отказываются запускаться. Для решения проблемы рекомендуется выполнить очистку кэша смартфона. Вот подробная инструкция.
Основным предназначением кэш-памяти является ускорение устройства и краткосрочное хранение информации. Модули кэш-памяти встречаются в жестких дисках, центральных процессорах и видеокартах. Также соответствующей технологией обладают смартфоны. Для обеспечения стабильной работы устройства пользователю рекомендуется периодически очищать память в настройках операционной системы телефона — такая процедура часто улучшает быстродействие.
Кэш память и её предназначение в процессоре
Всем доброго времени суток. Сегодня мы постараемся растолковать вам такое понятие как кэш. Кэш память процессора – это сверхбыстрый массив обработки данных, скорость которого превышает показатели стандартной ОЗУ раз так в 16-17, если речь идет о DDR4.
Именно объем кэш-памяти позволяет ЦП работать на предельных скоростях, не дожидаясь, пока оперативная память обработает какие-либо данные и не отправит результаты готовых вычислений чипу для дальнейшей их обработки. Аналогичный принцип прослеживается в HDD, только там используется буфер на 8-128 МБ. Другое дело, что скорости гораздо ниже, но процесс работы аналогичен.
Что такое кэш процессора?
Как вообще происходит процесс вычислений? Все данные хранятся в оперативной памяти, которая предназначена для временного хранения важной пользовательской и системной информации. Процессор выбирает для себя определенное количество задач, которые загоняются в сверхбыстрый блок, именуемый кэш-памятью, и начинает заниматься своими прямыми обязанностями.
Результаты вычислений снова отправляются в ОЗУ, но уже в гораздо меньшем количестве (вместо тысячи значений на выходе получаем куда меньше), а на обработку берется новый массив. И так до тех пор, пока работа не будет сделана.
Скорость работы определяется эффективностью оперативной памяти. Но ни один современный модуль DDR4, включая оверклокерские решения с частотами под 4000 МГц, и рядом не стоял с возможностями самого чахлого процессора с его «медленным» КЭШем.
Все потому, что скорость работы ЦП превышает показатели работы ОЗУ в среднем раз в 15, а то и выше. И не смотрите только на параметры частоты, помимо них отличий хватает.В теории получается, что даже сверхмощные Intel Xeon и AMD Epyc вынуждены простаивать, но по факту оба серверных чипа работают на пределе возможностей. А все потому, что они набирают необходимое количество данных по величине кэша (вплоть до 60 и более МБ) и моментально обрабатывают данные. ОЗУ служит в качестве некоего склада, откуда черпаются массивы для вычислений. Эффективность вычислений компьютера возрастает и все довольны.
Краткий экскурс в историю
Первые упоминания о кэш-памяти датированы концом 80-х годов. До этого времени скорость работы процессора и памяти были приблизительно одинаковой. Стремительное развитие чипов требовало придумать какой-нибудь «костыль», чтобы повысить уровень быстродействия ОЗУ, однако использовать сверхбыстрые чипы было очень затратно, а потому решились обойтись более экономичным вариантом – внедрением скоростного массива памяти в ЦП.
Впервые модуль кэш-памяти появился в Intel 80386. В то время задержки при работе DRAM колебались в пределах 120 наносекунд, в то время как более современный модуль SRAM сокращал время задержек до внушительных по тем временам 10 наносекунд. Примерная картина более наглядно продемонстрирована в противостоянии HDD против SSD.
Изначально кэш-память распаивалась прямиком на материнских платах, ввиду уровня техпроцесса того времени. Начиная с Intel 80486 8 кб памяти было внедрено непосредственно в кристалл процессора, что дополнительно увеличивало производительность и снижало площадь кристалла.
Данная технология расположения оставалась актуальной лишь до выхода Pentium MMX, после чего SRAM-память была заменена более прогрессивной SDRAM. Да и процессоры стали гораздо меньше, а потому надобность во внешних схемах отпала.
Уровни кэш-памяти
На маркировке современных ЦП, помимо тактовой частоты и количества потоков, можно встретить такое понятие как размер кэша 1,2 и 3 уровней. Как он определяется и на что влияет? Давайте разбираться простым языком.
В продаже можно встретить как двух- так и трехуровневую структуру памяти. Какая из них лучше? Если вы используете процессор лишь для офисных программ и казуальных игр, то никакой разницы не почувствуете. Если же система собирается с прицелом под сложные 3D-игры, архивацию, рендеринг и работу с графикой, то прирост в некоторых случаях будет колебаться от 5 до 10%.Кэш третьего уровня оправдан лишь в том случае, если вы намерены регулярно работать с многопоточными приложениями, требующими регулярные сложные расчеты. По этой причине в серверных моделях нередко используют кэш L3 больших объемов. Хотя бывают случаи, что и этого не хватает, а потому приходится дополнительно ставить так называемые модули L4, которые выглядят как отдельная микросхема, подключаемая к материнской плате.
Как узнать количество уровней и размер кэша на своем процессоре?
Начнем с того, что сделать это можно 3 способами:
Если взять за основу тот факт, что у большинства процессоров L1 составляет 32 КБ, а L2 и L3 могут колебаться в широких пределах, последние 2 значения нам и нужны. Для их поиска открываем командную строку через «Пуск» (вводим значение «cmd» через строку поиска).
Далее необходимо прописать значение «wmic cpu get L2CacheSize, L3CacheSize».
Система покажет подозрительно большое значение для L2. Необходимо поделить его на количество ядер процессора и узнать итоговый результат.
Если вы собрались искать данные в сети, то для начала узнайте точное имя ЦП. Нажмите правой кнопкой по иконке «Мой компьютер» и выберите пункт «Свойства». В графе «Система» будет пункт «Процессор», который нам, собственно, нужен. Переписываете его название в тот же Google или Yandex и смотрите значение на сайтах. Для достоверной информации лучше выбирать официальные порталы производителя (Intel или AMD).Третий способ также не вызывает проблем, но требует установки дополнительного софта вроде GPU-Z, AIDA64 и прочих утилит для изучения спецификаций камня. Вариант для любителей разгона и копошения в деталях.
Итоги
Теперь вы понимаете, что такое кэш-память, от чего зависит ее объем, и для каких целей используется сверхбыстрый массив данных. На данный момент наиболее интересными решениями на рынке в плане большого объема кэш-памяти, можно назвать устройства AMD Ryzen 5 и 7 с их 16 МБ L3.
В следующих статьях осветим такие темы как коэффициент умножения процессоров, пользу от встроенных графических чипов и не только. Следите за свежими публикациями и оставайтесь с нами. До новых встреч, пока.
Кэш L1, L2, L3: что это такое и для чего нужен кэш в современном мире?
Кэш L1, L2, L3 — это кэш процессора разных ступеней.
Что такое кэш?
Если объяснять достаточно просто, то кэш — это самый быстрый из существующих типов памяти. По идее вы должны знать, что у компьютера быва е т несколько типов памяти:
Кэш является статистической памятью, а это значит, что он может сохранять в себе сведения без необходимости постоянно их обновлять. Основным предназначением кэша является ускорение работы оперативной памяти.
Как работает кэш процессора?
За перераспределение инструкций из процессора в его память отвечает специальный микроконтроллер памяти процессора, именно он отправляет инструкции в кэш.
С иерархией памяти в компьютере вроде все понятно, но что же такое кэш L1, L2, L3?
Что это такое — «кэш L1, L2, L3»?
Итак, инструкции программы попали в кэш процессора. Но тут есть собственная иерархия памяти, которая, также как и в компьютере, основывается на скорости функционирования кэша.
Получается, что кэш L1, L2, L3 — это иерархия памяти процессор а :
В общем, принцип прохождения инструкций для работы программы прост: они передаются от самой медленной памяти (hard-диск) к самой быстрой (кэш L1). А процессор посылает запросы в обратном порядке: от самой быстрой памяти к самой медленной.
Для чего нужен кэш в процессоре в современном мире?
Заключение
Теперь вы знаете, что к э ш L1, L2, L3 — это всего лишь иерархия к э ша в процессоре, а не что-то сверхъестественное и непонятное. Качественная реализация к э ша в процессоре — это более высокая производительность компьютера. А высокая производительность ПК — это лояльность его пользователей. Поэтому компании-производители процессоров продолжают эксперименты с кэшем, чтобы повысить процент попаданий в к э ш.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3
Во всех центральных процессорах любого компьютера, будь то дешёвый ноутбук или сервер за миллионы долларов, есть устройство под названием «кэш». И с очень большой вероятностью он обладает несколькими уровнями.
Наверно, он важен, иначе зачем бы его устанавливать? Но что же делает кэш, и для чего ему разные уровни? И что означает «12-канальный ассоциативный кэш» (12-way set associative)?
Что такое кэш?
TL;DR: это небольшая, но очень быстрая память, расположенная в непосредственной близости от логических блоков центрального процессора.
Однако мы, разумеется, можем узнать о кэше гораздо больше…
Давайте начнём с воображаемой волшебной системы хранения: она бесконечно быстра, может одновременно обрабатывать бесконечное количество операций передачи данных и всегда обеспечивает надёжное и безопасное хранение данных. Конечно же, ничего подобного и близко не существует, однако если бы это было так, то структура процессора была бы гораздо проще.
Процессорам бы тогда требовались только логические блоки для сложения, умножения и т.п, а также система управления передачей данных, ведь наша теоретическая система хранения способна мгновенно передавать и получать все необходимые числа; ни одному из логических блоков не приходится простаивать в ожидании передачи данных.
Но, как мы знаем, такой волшебной технологии хранения не существует. Вместо неё у нас есть жёсткие диски или твердотельные накопители, и даже самые лучшие из них далеки от возможностей обработки, необходимых для современного процессора.
Великий Т’Фон хранения данных
Причина этого заключается в том, что современные процессоры невероятно быстры — им требуется всего один тактовый цикл для сложения двух 64-битных целочисленных значений; если процессор работает с частотой 4 ГГЦ, то это составляет всего 0,00000000025 секунды, или четверть наносекунды.
В то же время, вращающемуся жёсткому диску требуются тысячи наносекунд только для нахождения данных на дисках, не говоря уже об их передаче, а твердотельным накопителям — десятки или сотни наносекунд.
Очевидно, что такие приводы невозможно встроить внутрь процессоров, поэтому между ними будет присутствовать физическое разделение. Поэтому ещё добавляется время на перемещение данных, что усугубляет ситуацию.
Увы, но это Великий А’Туин хранения данных
Именно поэтому нам нужна ещё одна система хранения данных, расположенная между процессором и основным накопителем. Она должна быть быстрее накопителя, способна одновременно управлять множеством операций передачи данных и находиться намного ближе к процессору.
Ну, у нас уже есть такая система, и она называется ОЗУ (RAM); она присутствует в каждом компьютере и выполняет именно эту задачу.
Почти все такие хранилища имеют тип DRAM (dynamic random access memory); они способны передавать данные гораздо быстрее, чем любой накопитель.
Однако, несмотря на свою огромную скорость, DRAM не способна хранить такие объёмы данных.
Одни из самых крупных чипов памяти DDR4, разработанных Micron, хранят 32 Гбит, или 4 ГБ данных; самые крупные жёсткие диски хранят в 4 000 раз больше.
Итак, хоть мы и повысили скорость нашей сети данных, нам потребуются дополнительные системы (аппаратные и программные), чтобы разобраться, какие данные должны храниться в ограниченном объёме DRAM, готовые к обработке процессором.
DRAM могут изготавливаться в корпусе чипа (это называется встроенной (embedded) DRAM). Однако процессоры довольно малы, поэтому в них не удастся поместить много памяти.
10 МБ DRAM слева от графического процессора Xbox 360. Источник: CPU Grave Yard
Подавляющее большинство DRAM расположено в непосредственной близости от процессора, подключено к материнской плате и всегда является самым близким к процессору компонентом. Тем не менее, эта память всё равно недостаточно быстра…
DRAM требуется примерно 100 наносекунд для нахождения данных, но, по крайней мере, она способна передавать миллиарды битов в секунду. Похоже, нам нужна ещё одна ступень памяти, которую можно разместить между блоками процессора и DRAM.
На сцене появляется оставшаяся ступень: SRAM (static random access memory). DRAM использует микроскопические конденсаторы для хранения данных в виде электрического заряда, а SRAM для той же задачи применяет транзисторы, которые работают с той же скоростью, что и логические блоки процессора (примерно в 10 раз быстрее, чем DRAM).
Разумеется, у SRAM есть недостаток, и он опять-таки связан с пространством.
Память на основе транзисторов занимает гораздо больше места, чем DRAM: в том же размере, что чип DDR4 на 4 ГБ, можно получить меньше 100 МБ SRAM. Но поскольку она производится по тому же технологическому процессу, что и CPU, память SRAM можно встроить прямо внутрь процессора, максимально близко к логическим блокам.
С каждой дополнительной ступенью мы увеличивали скорость перемещаемых данных ценой хранимого объёма. Мы можем продолжить и добавлять новые ступени,, которые будут быстрее, но меньше.
И так мы добрались до более строгого определения понятия кэша: это набор блоков SRAM, расположенных внутри процессора; они обеспечивают максимальную занятость процессора благодаря передаче и сохранению данных с очень высокими скоростями. Вас устраивает такое определение? Отлично, потому что дальше всё будет намного сложнее!
Кэш: многоуровневая парковка
Как мы говорили выше, кэш необходим, потому что у нас нет волшебной системы хранения, способной справиться с потреблением данных логических блоков процессора. Современные центральные и графические процессоры содержат множество блоков SRAM, внутри упорядоченных в иерархию — последовательность кэшей, имеющих следующую структуру:
На приведённом выше изображении процессор (CPU) обозначен прямоугольником с пунктирной границей. Слева расположены ALU (arithmetic logic units, арифметико-логические устройства); это структуры, выполняющие математические операции. Хотя строго говоря, они не являются кэшем, ближайший к ALU уровень памяти — это регистры (они упорядочены в регистровый файл).
Каждый из них хранит одно число, например, 64-битное целое число; само значение может быть элементом каких-нибудь данных, кодом определённой инструкции или адресом памяти каких-то других данных.
Регистровый файл в десктопных процессорах довольно мал, например, в каждом из ядер Intel Core i9-9900K есть по два банка таких файлов, а тот, который предназначен для целых чисел, содержит всего 180 64-битных целых чисел. Другой регистровый файл для векторов (небольших массивов чисел) содержит 168 256-битных элементов. То есть общий регистровый файл каждого ядра чуть меньше 7 КБ. Для сравнения: регистровый файл потоковых мультипроцессоров (так в GPU называются аналоги ядер CPU) Nvidia GeForce RTX 2080 Ti имеет размер 256 КБ.
Регистры, как и кэш, являются SRAM, но их скорость не превышает скорость обслуживаемых ими ALU; они передают данные за один тактовый цикл. Но они не предназначены для хранения больших объёмов данных (только одного элемента), поэтому рядом с ними всегда есть более крупные блоки памяти: это кэш первого уровня (Level 1).
Одно ядро процессора Intel Skylake. Источник: Wikichip
На изображении выше представлен увеличенный снимок одного из ядер десктопного процессора Intel Skylake.
ALU и регистровые файлы расположены слева и обведены зелёной рамкой. В верхней части фотографии белым обозначен кэш данных первого уровня (Level 1 Data cache). Он не содержит много информации, всего 32 КБ, но как и регистры, он расположен очень близко к логическим блокам и работает на одной скорости с ними.
Ещё одним белым прямоугольником справа показан кэш инструкций первого уровня (Level 1 Instruction cache), тоже имеющий размер 32 КБ. Как понятно из названия, в нём хранятся различные команды, готовые к разбиению на более мелкие микрооперации (обычно обозначаемые μops), которые должны выполнять ALU. Для них тоже существует кэш, который можно классифицировать как Level 0, потому что он меньше (содержит всего 1 500 операций) и ближе, чем кэши L1.
Вы можете задаться вопросом: почему эти блоки SRAM настолько малы? Почему они не имеют размер в мегабайт? Вместе кэши данных и инструкций занимают почти такую же площадь на чипе, что основные логические блоки, поэтому их увеличение приведёт к повышению общей площади кристалла.
Но основная причина их размера в несколько килобайт заключается в том, что при увеличении ёмкости памяти повышается время, необходимое для поиска и получения данных. Кэшу L1 нужно быть очень быстрым, поэтому необходимо достичь компромисса между размером и скоростью — в лучшем случае для получения данных из этого кэша требуется около 5 тактовых циклов (для значений с плавающей запятой больше).
Кэш L2 процессора Skylake: 256 КБ SRAM
Но если бы это был единственный кэш внутри процессора, то его производительность наткнулась бы на неожиданное препятствие. Именно поэтому в ядра встраивается еще один уровень памяти: кэш Level 2. Это обобщённый блок хранения, содержащий инструкции и данные.
Он всегда больше, чем Level 1: в процессорах AMD Zen 2 он занимает до 512 КБ, чтобы кэши нижнего уровня обеспечивались достаточным объёмом данных. Однако большой размер требует жертв — для поиска и передачи данных из этого кэша требуется примерно в два раза больше времени по сравнению с Level 1.
Во времена первого Intel Pentium кэш Level 2 был отдельным чипом, или устанавливаемым на отдельной небольшой плате (как ОЗУ DIMM), или встроенным в основную материнскую плату. Постепенно он перебрался в корпус самого процессора, и, наконец, полностью интегрировался в кристалл чипа; это произошло в эпоху таких процессоров, как Pentium III и AMD K6-III.
За этим достижением вскоре последовал ещё один уровень кэша, необходимый для поддержки более низких уровней, и появился он как раз вовремя — в эпоху расцвета многоядерных чипов.
Чип Intel Kaby Lake. Источник: Wikichip
На этом изображении чипа Intel Kaby Lake в левой части показаны четыре ядра (интегрированный GPU занимает почти половину кристалла и находится справа). Каждое ядро имеет свой «личный» набор кэшей Level 1 и 2 (выделены белыми и жёлтым прямоугольниками), но у них также есть и третий комплект блоков SRAM.
Кэш третьего уровня (Level 3), хоть и расположен непосредственно рядом с одним ядром, является полностью общим для всех остальных — каждое ядро свободно может получать доступ к содержимому кэша L3 другого ядра. Он намного больше (от 2 до 32 МБ), но и намного медленнее, в среднем более 30 циклов, особенно когда ядру нужно использовать данные, находящиеся в блоке кэша, расположенного на большом расстоянии.
Ниже показано одно ядро архитектуры AMD Zen 2: кэши Level 1 данных и инструкций по 32 КБ (в белых прямоугольниках), кэш Level 2 на 512 КБ (в жёлтых прямоугольниках) и огромный блок кэша L3 на 4 МБ (в красном прямоугольнике).
Увеличенный снимок одного ядра процессора AMD Zen 2. Источник: Fritzchens Fritz
Но постойте: как 32 КБ могут занимать больше физического пространства чем 512 КБ? Если Level 1 хранит так мало данных, почему он непропорционально велик по сравнению с кэшами L2 и L3?
Не только числа
Кэш повышает производительность, ускоряя передачу данных в логические блоки и храня поблизости копию часто используемых инструкций и данных. Хранящаяся в кэше информация разделена на две части: сами данные и место, где они изначально располагаются в системной памяти/накопителе — такой адрес называется тег кэша (cache tag).
Когда процессор выполняет операцию, которой нужно считать или записать данные из/в память, то он начинает с проверки тегов в кэше Level 1. Если нужные данные там есть (произошло кэш-попадание (cache hit)), то доступ к этим данным выполняется почти сразу же. Промах кэша (cache miss) возникает, если требуемый тег не найден на самом нижнем уровне кэша.
В кэше L1 создаётся новый тег, а за дело берётся остальная часть архитектуры процессора выполняющая поиск в других уровнях кэша (при необходимости вплоть до основного накопителя) данных для этого тега. Но чтобы освободить пространство в кэше L1 под этот новый тег, что-то обязательно нужно перебросить в L2.
Это приводит к почти постоянному перемешиванию данных, выполняемому всего за несколько тактовых циклов. Единственный способ добиться этого — создание сложной структуры вокруг SRAM для обработки управления данными. Иными словами, если бы ядро процессора состояло всего из одного ALU, то кэш L1 был бы гораздо проще, но поскольку их десятки (и многие из них жонглируют двумя потоками инструкций), то для перемещения данных кэшу требуется множество соединений.
Для изучения информации кэша в процессоре вашего компьютера можно использовать бесплатные программы, например CPU-Z. Но что означает вся эта информация? Важным элементом является метка set associative (множественно-ассоциативный) — она указывает на правила, применяемые для копирования блоков данных из системной памяти в кэш.
Представленная выше информация кэша относится к Intel Core i7-9700K. Каждый из его кэшей Level 1 разделён на 64 небольших блока, называемые sets, и каждый из этих блоков ещё разбит на строки кэша (cache lines) (размером 64 байта). «Set associative» означает, что блок данных из системы привязывается к строкам кэша в одном конкретном сете, и не может свободно привязываться к какому-то другому месту.
«8-way» означает, что один блок может быть связан с 8 строками кэша в сете. Чем выше уровень ассоциативности (т.е. чем больше «way»), тем больше шансов на кэш-попадание во время поиска процессором данных и тем меньше потери, вызываемые промахами кэша. Недостатки такой системы заключаются в повышении сложности и энергопотребления, а также понижении производительности, потому что для каждого блока данных нужно обрабатывать больше строк кэша.
Инклюзивный кэш L1+L2, victim cache L3, политики write-back, есть даже ECC. Источник: Fritzchens Fritz
Ещё один аспект сложности кэша связан с тем, как хранятся данные между разными уровнями. Правила задаются в inclusion policy (политике инклюзивности). Например, процессоры Intel Core имеют полностью инклюзивные кэши L1+L3. Это означает, что одни данные в Level 1, например, могут присутствовать в Level 3. Может показаться, что это пустая трата ценного пространства кэша, однако преимущество заключается в том, что если процессор совершает промах при поиске тега в нижнем уровне, ему не потребуется обыскивать верхний уровень для нахождения данных.
В тех же самых процессорах кэш L2 неинклюзивен: все хранящиеся там данные не копируются ни на какой другой уровень. Это экономит место, но приводит к тому, что системе памяти чипа нужно искать ненайденный тег в L3 (который всегда намного больше). Victim caches (кэши-жертвы) имеют похожий принцип, но они используются для хранения информации, переносимой с более низких уровней. Например, процессоры AMD Zen 2 используют victim cache L3, который просто хранит данные из L2.
Существуют и другие политики для кэша, например, при которых данные записываются и в кэш, и основную системную память. Они называются политиками записи (write policies); большинство современных процессоров использует кэши write-back — это означает, что когда данные записываются на уровень кэшей, происходит задержка перед записью их копии в системную память. Чаще всего эта пауза длится в течение того времени, пока данные остаются в кэше — ОЗУ получает эту информацию только при «выталкивании» из кэша.
Графический процессор Nvidia GA100, имеющий 20 МБ кэша L1 и 40 МБ кэша L2
Для проектировщиков процессоров выбор объёма, типа и политики кэшей является вопросом уравновешивания стремления к повышению мощности процессора с увеличением его сложности и занимаемым чипом пространством. Если бы можно было создать 1000-канальные ассоциативные кэши Level 1 на 20 МБ такими, чтобы они при этом не занимали площадь Манхэттена (и не потребляли столько же энергии), то у нас у всех бы были компьютеры с такими чипами!
Самый нижний уровень кэшей в современных процессорах за последнее десятилетие практически не изменился. Однако кэш Level 3 продолжает расти в размерах. Если бы десять лет назад у вас было 999 долларов на Intel i7-980X, то вы могли бы получить кэш размером 12 МБ. Сегодня за половину этой суммы можно приобрести 64 МБ.
Подведём итог: кэш — это абсолютно необходимое и потрясающее устройство. Мы не рассматривали другие типы кэшей в CPU и GPU (например, буферы ассоциативной трансляции или кэши текстур), но поскольку все они имеют такую же простую структуру и расположение уровней, разобраться в них будет несложно.
Был ли у вас компьютер с кэшем L2 на материнской плате? Как насчёт слотовых Pentium II и Celeron (например, 300a) на дочерних платах? Помните свой первый процессор с общим L3?
На правах рекламы
Наша компания предлагает в аренду серверы с процессорами от Intel и AMD. В последнем случае — это эпичные серверы! VDS с AMD EPYC, частота ядра CPU до 3.4 GHz. Максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe.