Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Развитие кешей и кеширования - одно из самых значительных событий в истории вычислительной техники. Практически каждое современное ядро ​​ЦП от чипов со сверхнизким энергопотреблением, таких как ARM Cortex-A5, до Intel Core i9 самого высокого уровня, использует кеши. Даже микроконтроллеры более высокого уровня часто имеют небольшие кеши или предлагают их в качестве дополнительных функций - преимущества производительности слишком велики, чтобы их игнорировать, даже в конструкциях со сверхнизким энергопотреблением.

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

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Как работает кеширование

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

С другой стороны, промах в кэше означает, что ЦП должен уйти в поисках данных в другом месте. Здесь в игру вступает кэш L2 - он медленнее, но гораздо больше. Некоторые процессоры используют инклюзивный дизайн кэша (это означает, что данные, хранящиеся в кэше L1, также дублируются в кеше L2), в то время как другие являются эксклюзивными (то есть два кеша никогда не обмениваются данными). Если данные не могут быть найдены в кэше L2, ЦП переходит вниз по цепочке к L3 (обычно все еще на кристалле), затем L4 (если он существует) и основной памяти (DRAM).

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

На этой диаграмме показана взаимосвязь между кешем L1 с постоянной частотой попаданий, но большим кешем L2. Обратите внимание, что общая частота совпадений резко возрастает с увеличением размера L2. Более крупный, медленный и дешевый L2 может обеспечить все преимущества большого L1, но без потери размера кристалла и энергопотребления. Большинство современных коэффициентов попадания в кэш L1 намного выше теоретических 50 процентов, показанных здесь - Intel и AMD обычно используют коэффициент попадания в кэш 95 процентов или выше.

Следующая важная тема - ассоциативность множеств. Каждый ЦП содержит определенный тип ОЗУ, называемый ОЗУ тегов. ОЗУ тегов - это запись всех ячеек памяти, которые можно сопоставить с любым заданным блоком кеша. Если кеш полностью ассоциативен, это означает, что любой блок данных RAM может храниться в любом блоке кеша. Преимущество такой системы состоит в том, что частота совпадений высока, но время поиска чрезвычайно велико - ЦП должен просмотреть весь свой кеш, чтобы выяснить, присутствуют ли данные, прежде чем выполнять поиск в основной памяти.

На противоположном конце спектра у нас есть кеши с прямым отображением. Кэш с прямым отображением - это кэш, в котором каждый блок кеша может содержать один и только один блок основной памяти. Этот тип кэша можно искать очень быстро, но, поскольку он отображает 1: 1 в ячейки памяти, у него низкий процент попаданий. Между этими двумя крайностями находятся n-сторонние ассоциативные кеши. Двухсторонний ассоциативный кеш (L1 Piledriver является двусторонним) означает, что каждый блок основной памяти может отображаться в один из двух блоков кеша. Восьмисторонний ассоциативный кеш означает, что каждый блок основной памяти может находиться в одном из восьми блоков кеша. Кэш инструкций L1 Ryzen является четырехсторонним ассоциативным, а кэш данных L1 - восьмисторонним ассоциативным.

Следующие два слайда показывают, как повышается процент попаданий с помощью ассоциативности набора. Имейте в виду, что такие вещи, как частота попаданий, очень специфичны - разные приложения будут иметь разные показатели.

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Почему кеш-память ЦП становится больше

Так зачем вообще добавлять кеши постоянно большего размера? Потому что каждый дополнительный пул памяти устраняет необходимость доступа к основной памяти и может улучшить производительность в определенных случаях.

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Эта диаграмма из обзора Haswell компании Anandtech полезна, поскольку она иллюстрирует влияние на производительность добавления огромного (128 МБ) кэша L4, а также обычных структур L1 / L2 / L3. Каждая ступенька представляет собой новый уровень кеша. Красная линия - это чип с L4 - обратите внимание, что для файлов большого размера он все равно почти в два раза быстрее, чем два других чипа Intel.

Тогда может показаться логичным выделять огромное количество ресурсов на кристалле для кеширования, но оказывается, что предельная отдача от этого уменьшается. Кеши большего размера работают медленнее и дороже. При шести транзисторах на бит SRAM (6T) кэш также стоит дорого (с точки зрения размера кристалла и, следовательно, стоимости в долларах). По прошествии определенного момента имеет смысл потратить бюджет мощности чипа и количество транзисторов на большее количество исполнительных блоков, лучшее предсказание ветвлений или дополнительные ядра. Вверху истории вы можете увидеть изображение чипа Pentium M (Centrino / Dothan); вся левая сторона кристалла отведена под массивный кэш L2. Так было в последние дни однопоточных ЦП, теперь, когда у нас есть многоядерные чипы и во многих случаях встроенный графический процессор, меньший процент от общего ЦП выделяется для кеширования.

Как дизайн кэша влияет на производительность

Влияние на производительность добавления кэша ЦП напрямую связано с его эффективностью или частотой попаданий; повторяющиеся промахи в кэше могут иметь катастрофическое влияние на производительность процессора. Следующий пример значительно упрощен, но должен служить для иллюстрации сути.

Представьте, что ЦП должен загрузить данные из кеша L1 100 раз подряд. Кэш L1 имеет задержку доступа 1 нс и 100-процентную частоту совпадений. Следовательно, для выполнения этой операции нашему ЦП требуется 100 наносекунд.

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Теперь предположим, что коэффициент попадания в кэш составляет 99 процентов, но данные, которые фактически необходимы ЦП для его сотого доступа, находятся в L2 с задержкой доступа 10 циклов (10 нс). Это означает, что процессору требуется 99 наносекунд для выполнения первых 99 операций чтения и 10 наносекунд для выполнения сотого. Снижение частоты обращений на 1 процент только что замедлило работу ЦП на 10 процентов.

В реальном мире кэш L1 обычно имеет процент попаданий от 95 до 97 процентов, но влияние этих двух значений на производительность в нашем простом примере составляет не 2 процента - это 14 процентов. Имейте в виду, мы предполагаем, что пропущенные данные всегда находятся в кэше L2. Если данные были исключены из кеша и находятся в основной памяти с задержкой доступа 80–120 нс, разница в производительности между 95 и 97 процентами совпадений может почти удвоить общее время, необходимое для выполнения кода.

Когда сравнивали семейство AMD Bulldozer с процессорами Intel, тема дизайна кеша и влияния на производительность стала очень актуальной. Неясно, насколько низкая производительность Bulldozer может быть связана с его относительно медленной подсистемой кеширования - помимо относительно высоких задержек, семейство Bulldozer также страдает от большого количества конфликтов с кешем. Каждый модуль Bulldozer / Piledriver / Steamroller имеет общий кэш инструкций L1, как показано ниже:

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

Кэш считается спорным, когда два разных потока записывают и перезаписывают данные в одном и том же пространстве памяти. Это вредит производительности обоих потоков - каждое ядро ​​вынуждено тратить время на запись своих собственных предпочтительных данных в L1, только для того, чтобы другое ядро ​​быстро перезаписало эту информацию. AMD СТАРЫЙ Steamroller по-прежнему сталкивается с этой проблемой, хотя AMD увеличила кэш кода L1 до 96 КБ и сделала его трехсторонним ассоциативным вместо двух. Более поздние процессоры Ryzen не разделяют кеш таким образом и не страдают от этой проблемы.

Как работают кэши ЦП L1 и L2 и почему они являются неотъемлемой частью современных микросхем

На этом графике показано, как снизилась частота попаданий Opteron 6276 (оригинальный процессор Bulldozer), когда оба ядра были активны, по крайней мере, в некоторых тестах. Ясно, однако, что конкуренция за кэш - не единственная проблема - 6276 исторически изо всех сил пытался превзойти 6174, даже когда оба процессора имели одинаковую частоту попаданий.

У Zen 2 сегодня нет таких недостатков, а общая производительность кеш-памяти и памяти Zen и Zen 2 намного лучше, чем у более старой архитектуры Piledriver.

Современные процессоры также часто имеют очень маленький кэш L0, который часто составляет всего несколько килобайт и используется для хранения микроопераций. AMD и Intel используют такой кэш; У Zen кеш-память 2048 µOP, а у Zen 2 - 4096 µOP. Эти крошечные пулы кеш-памяти работают по тем же общим принципам, что и L1 и L2, но представляют собой пул памяти еще меньшего размера, к которому ЦП может обращаться с еще более низкой задержкой, чем L1. Часто компании адаптируют эти возможности друг к другу. Zen 1 и Zen + (APU Ryzen 1xxx, 2xxx, 3xxx) имеют кэш инструкций L1 объемом 64 КБ, который имеет 4-сторонний ассоциативный набор, и кэш L0 2048 µOP. Zen 2 (процессоры Ryzen 3xxx для настольных ПК, Ryzen Mobile 4xxx) имеет кеш-память L1 размером 32 КБ с 8-позиционным ассоциативным набором и 4096 µOP кэш-памяти. Удвоение ассоциативности набора и размера кеш-памяти µOP позволило AMD вдвое сократить размер кеш-памяти L1. Подобные компромиссы обычны в конструкции ЦП.

Кэширование

Структура и дизайн кэша все еще дорабатываются, поскольку исследователи ищут способы выжать более высокую производительность из кешей меньшего размера. Пока что такие производители, как Intel и AMD, еще не настаивали на увеличении кэшей и не перенесли дизайн на L4. Есть несколько процессоров Intel со встроенной памятью EDRAM, у которых есть кэш L4, но такой подход необычен. Вот почему мы использовали приведенный выше пример Haswell, хотя этот процессор старше. Предположительно, преимущества большого кэша L4 еще не перевешивают затраты для большинства случаев использования.

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

Читать далее

Почему чип M1 от Apple угрожает Intel и AMD
Почему чип M1 от Apple угрожает Intel и AMD

Собственная история Intel подсказывает это, и AMD должна очень серьезно отнестись к новой SoC M1 от Apple.

Почему вы не можете защитить свой игровой компьютер от будущего
Почему вы не можете защитить свой игровой компьютер от будущего

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

Интервью: Адам Стельцнер из НАСА говорит об упорстве и о том, почему мы не должны колонизировать Марс
Интервью: Адам Стельцнер из НАСА говорит об упорстве и о том, почему мы не должны колонизировать Марс

Марсоход НАСА Perseverance должен приземлиться на Марсе в ближайшие дни, и у нас была возможность поговорить с одним из людей, которые приложили руку к осуществлению этой миссии.

Илон Маск объясняет, почему Starship SN10 взорвался после приземления
Илон Маск объясняет, почему Starship SN10 взорвался после приземления

Прототип SpaceX Starship SN10 приземлился после высотного испытательного полета и взорвался через несколько минут. Теперь мы немного знаем, почему это произошло и как SpaceX стремится решить эту проблему с помощью SN11.