Как работают кеши процессоров L1 и L2 и почему они являются неотъемлемой частью современных чипов
Разработка кешей и кеширование - одно из самых значительных событий в истории вычислений. Практически каждый современный процессорный ядро от микросхем с ультранизким энергопотреблением, таких как ARM Cortex-A5, к высокопроизводительному Intel Core i7 использует кеши. Даже более высокопроизводительные микроконтроллеры часто имеют небольшие кеши или предлагают их в качестве опций - преимущества в производительности слишком велики, чтобы игнорировать даже в проектах с ультранизким энергопотреблением.
Кэширование было изобретено для решения значительной проблемы. В первые десятилетия вычислений основная память была чрезвычайно медленной и невероятно дорогой, но процессоры были не особенно быстрыми. Начиная с 1980-х годов, разрыв начал быстро расширяться. Микропроцессорные тактовые частоты взлетели, но время доступа к памяти улучшилось значительно реже. По мере роста этого разрыва стало все более очевидным, что для преодоления разрыва требуется новый тип быстрой памяти.
Как работает кеширование
Кэш-память процессора представляет собой небольшие пулы памяти, которые хранят информацию, которая, скорее всего, понадобится процессору. Какая информация загружается в кеш, зависит от сложных алгоритмов и некоторых предположений о программировании кода. Целью системы кэширования является обеспечение того, чтобы процессор имел следующий бит данных, который он должен будет уже загружать в кеш, к тому времени, когда он его ищет (также называется хитом кэша).
С другой стороны, промаха в кеше означает, что процессор должен сбежать, чтобы найти данные в другом месте. Именно здесь вступает в игру кеш L2 - в то время как он медленнее, он также намного больше. Некоторые процессоры используют инклюзивный дизайн кэша (то есть данные, хранящиеся в кеше L1, также дублируются в кэше L2), в то время как другие являются эксклюзивными (это означает, что два кэша никогда не обмениваются данными). Если данные не могут быть найдены в кэше L2, ЦП продолжает вниз по цепочке до L3 (как правило, все еще находится на уме), затем L4 (если он существует) и основная память (DRAM).
На этой диаграмме показана взаимосвязь между кешем L1 с постоянным коэффициентом попадания, но большим кэшем L2. Обратите внимание, что общий коэффициент попадания резко возрастает по мере увеличения размера L2. Более крупный, более медленный, более дешевый L2 может обеспечить все преимущества большого L1 - но без ограничения размера и мощности потребления. Большинство современных коэффициентов кеширования L1 имеют более высокие показатели, чем теоретические 50%, показанные здесь. Intel и AMD, как правило, занимают отметки в кэше на уровне 95 процентов или выше.
Следующей важной темой является набор-ассоциативность. Каждый процессор содержит определенный тип оперативной памяти, называемый оперативной памятью. Память тегов - это запись всех мест памяти, которые могут отображаться на любой заданный блок кеша. Если кеш полностью ассоциативный, это означает, что любой блок данных ОЗУ может храниться в любом блоке кеша. Преимущество такой системы состоит в том, что скорость попадания высокая, но время поиска чрезвычайно велико - процессор должен просмотреть весь свой кеш, чтобы узнать, имеются ли данные перед поиском основной памяти.
На противоположном конце спектра у нас есть карты с прямым отображением. Кэш с прямым отображением - это кеш, в котором каждый блок кэша может содержать один и только один блок основной памяти. Этот тип кеша можно искать очень быстро, но поскольку он отображает 1: 1 в ячейки памяти, он имеет низкий коэффициент попадания. В промежутке между этими двумя крайностями используются n-way ассоциативные кэши. 2-сторонний ассоциативный кеш (Piledriver's L1 - 2-way) означает, что каждый блок основной памяти может отображать один из двух блоков кэша. 8-портовый ассоциативный кеш означает, что каждый блок основной памяти может находиться в одном из восьми блоков кэша.
Следующие два слайда показывают, как скорость удара улучшается с заданной ассоциативностью. Имейте в виду, что такие вещи, как скорость попадания, весьма специфичны - разные приложения будут иметь разные коэффициенты попадания.
Почему кеши процессора продолжают увеличиваться
Итак, зачем добавлять постоянно большие кеши в первую очередь? Поскольку каждый дополнительный пул памяти отталкивает необходимость доступа к основной памяти и может повысить производительность в конкретных случаях.
Эта диаграмма из обзора Haswell от Anandtech полезна, потому что на самом деле это иллюстрирует влияние производительности на добавление огромного (128 МБ) кэша L4, а также обычных структур L1 / L2 / L3. Каждый шаг лестницы представляет собой новый уровень кеша. Красная линия - это чип с L4 - заметьте, что для больших размеров файлов он по-прежнему почти в два раза быстрее, чем два других чипа Intel.
Тогда может показаться логичным посвятить огромное количество ресурсов для уничтожения на кеш-памяти - но, оказывается, существует уменьшающийся маргинальный возврат к этому. Большие кеши являются более медленными и более дорогими. На шести транзисторах на бит SRAM (6T) кеш также дорогой (с точки зрения размера матрицы и, следовательно, долларовой стоимости). Прошлое некоторое время, имеет смысл потратить бюджет мощности микросхемы и количество транзисторов на большее количество исполнительных блоков, лучшее предсказание ветвления или дополнительные ядра. В верхней части истории вы можете увидеть изображение чипа Pentium M (Centrino / Dothan); вся левая часть матрицы предназначена для массивного кеша L2.
Как влияет дизайн кэша на производительность
Эффективное влияние добавления кэш-памяти процессора напрямую связано с его эффективностью или скоростью атаки; повторные пропуски кеша могут иметь катастрофическое влияние на производительность ЦП. Следующий пример значительно упрощен, но должен служить иллюстрацией этой точки.
Представьте себе, что ЦП должен загружать данные из кеша L1 100 раз подряд. Кэш L1 имеет латентность доступа 1 нс и 100% -ную скорость атаки. Поэтому для выполнения этой операции требуется наш процессор 100 наносекунд.
Теперь предположим, что кеш имеет 99-процентный коэффициент попадания, но данные, которые действительно нужны ЦП для его 100-го доступа, находятся в L2 с 10-часовой задержкой доступа (10 нс). Это означает, что процессорные наносекунды процессора 99 выполняют первые 99 считываний и 10 наносекунд для выполнения 100-го. Снижение скорости атаки на 1 процент только замедлило снижение КПД на 10 процентов.
В реальном мире кеш L1 обычно имеет коэффициент попадания между 95 и 97 процентами, но влияние этих двух значений на нашем простом примере не составляет 2% - это 14%. Имейте в виду, мы предполагаем, что пропущенные данные всегда находятся в кэше L2. Если данные были выведены из кеша и находятся в основной памяти, с задержкой доступа 80-120ns, разница в производительности между 95 и 97 процентами попаданий может почти удвоить общее время, необходимое для выполнения кода.
Назад, когда семейство Bulldozer AMD сравнивалось с процессорами Intel, тема дизайна кеша и производительности повлияла на многое. Неясно, сколько из низкой производительности Bulldozer можно обвинить в относительно медленной кеш-подсистеме - помимо наличия относительно высоких задержек, семейство Bulldozer также страдает от большого количества конфликтов кеша. Каждый модуль Bulldozer / Piledriver / Steamroller поделился своим кэшем команд L1, как показано ниже:
Кэш рассматривается, когда два разных потока записывают и перезаписывают данные в одном и том же пространстве памяти. Это ущемляет производительность обоих потоков - каждое ядро вынуждено тратить время на запись своих предпочтительных данных в L1, только для другого ядра оперативно переписывать эту информацию. Проблема с AMD STDER Steamroller по-прежнему запуталась в этой проблеме, хотя AMD увеличила кеш-код L1 до 96 КБ и сделала его трехсторонней ассоциативной, а не двух. Позже Ryzen CPU не разделяют кеш таким образом и не страдают от этой проблемы.
Этот график показывает, как скорость атаки Opteron 6276 (оригинальный процессор Bulldozer) упала, когда оба ядра были активны, по крайней мере, в некоторых тестах. Ясно, однако, что конкуренция с кешем - это не единственная проблема - 6276 исторически изо всех сил пыталась превзойти 6174, даже когда оба процессора имели одинаковые коэффициенты попадания.
Кэширование
Структура и дизайн кэша до сих пор точно настроены, поскольку исследователи ищут способы сжать более высокую производительность из меньших кешей. До сих пор производители, такие как Intel и AMD, не стали резко продвигаться к более крупным кэшам или к принятым проектам вплоть до L4. Есть некоторые процессоры Intel с встроенным EDRAM, у которых есть кеш L4, но этот подход необычен (поэтому мы использовали пример Haswell выше, хотя этот процессор старше на данный момент. Предположительно, преимущества кэша L4 еще не перевешивают издержки.
Несмотря на это, дизайн кэша, энергопотребление и производительность будут иметь решающее значение для производительности будущих процессоров, а существенное улучшение существующих проектов может повысить статус той компании, которая может их реализовать.
Ознакомьтесь с нашей серией wfoojjaec Explains для более глубокого освещения сегодняшних горячих тем.
Читать далее
Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем
Вам когда-нибудь было любопытно, как работает кеш L1 и L2? Мы рады, что вы спросили. Здесь мы глубоко погружаемся в структуру и природу одного из самых фундаментальных проектов и инноваций вычислительной техники.
Как работают L1 и L2 CPU кэширует работу, и почему они являются неотъемлемой частью современных чипсов
Когда-нибудь было любопытно, как работают в кэше L1 и L2? Мы рады, что вы спросили. Здесь мы глубоко погрузимся в структуру и природу одного из самых фундаментальных проектов вычислений и инноваций.