Как работают L1 и L2 CPU кэширует работу, и почему они являются неотъемлемой частью современных чипсов
Развитие кешей и кэширования является одним из самых значительных событий в истории вычислений. Практически каждый современный CPU ядра CPU от ультранизких мощностей, таких как ARM Cortex-A5, к самым высоким целям Intel Core I9, используют кэши. Даже более высокие микроконтроллеры часто имеют небольшие кэши или предлагают их как варианты - преимущества производительности слишком велики, чтобы игнорировать даже в ультра-низких энергетических конструкциях.
Кэширование было изобретено для решения существенной проблемы. В начале десятилетия вычисления основная память была чрезвычайно медленной и невероятно дорогой, но процессоры также не были особенно быстрыми. Начиная с 1980-х годов, разрыв начал быстро расширяться. Микропроцессорные часовые скорости сняли, но время доступа к памяти улучшилось гораздо менее резко. По мере того, как этот пробел рос, становится все более очевидно, что нового типа быстрой памяти необходим для преодоления зазора.
Как работает кэширование
CPU Caches - это небольшие бассейны памяти, которые хранятся в магазине Информация о процессоре, скорее всего, понадобится дальше. Какая информация загружается в кэш, зависит от сложных алгоритмов и определенных предположений о программном коде. Целью системы кэша является обеспечение того, чтобы ЦП имел следующий бит данных, который он понадобится уже загружен в кеш к тому времени, когда он ищет его (также называемый кэшем).
Кэш промывает, с другой стороны, означает, что ЦП должен повернуться, чтобы найти данные в другом месте. Именно здесь вступление L2 вступает в игру - пока он медленнее, это также намного больше. Некоторые процессоры используют дизайн инклюзивных кэша (означающие, что данные, хранящиеся в кэше L1, также дублируются в кэше L2), в то время как другие являются исключительными (что означает, что две кеши никогда не обмениваются данными). Если данные не могут быть обнаружены в кэше L2, ЦП продолжается вниз по цепочке на L3 (обычно все еще на on-Die), затем L4 (если она существует) и основная память (DRAM).
Эта диаграмма показывает взаимосвязь между кэшем L1 с постоянным скоростью попадания, но больший кэш L2. Обратите внимание, что общая скорость попадания резко повышается, поскольку размер L2 увеличивается. Большая, медленная, дешевле L2 может обеспечить все преимущества большого L1, но без размера умирания и штрафа энергопотребления. Наиболее современные показатели кэша L1 имеют показания намного выше теоретических 50 процентов, показанных здесь - Intel и AMD, как правило, скорости попадания в полевой кэш на 95 процентов или выше.
Следующая важная тема - это ассоциативность. Каждый процессор содержит определенный тип оперативной памяти, называемой Tag Ram. Tag Ram - это запись всех местоположений памяти, которые могут отображать на любой данный блок кеша. Если кэш полностью ассоциативно, это означает, что любой блок данных ОЗУ может храниться в любом блоке кеша. Преимущество такой системы состоит в том, что скорость попадания высока, но время поиска чрезвычайно длительно - процессор должен просмотреть весь свой кеш, чтобы узнать, присутствуют ли данные перед поиском главной памяти.
На противоположном конце спектра у нас есть прямые кэши. Кэш с прямым сопоставлением - это кеш, когда каждый блок кеша может содержать один и только один блок основной памяти. Этот тип кэша можно искать чрезвычайно быстро, но поскольку он отображает 1: 1 к местам памяти, он имеет низкую скорость попадания. Между этими двумя крайностями являются н-путь ассоциативные кэши. Двухсторонний ассоциативный кэш (L1 Piledriver 2-х способов) означает, что каждый основной блок памяти может отображаться на один из двух блоков кэша. Восемьсторонний ассоциативный кэш означает, что каждый блок основной памяти может быть в одном из восьми блоков кеша. Кеш инструкций L1 Ryzen - это 4-х полосный ассоциативный ассоциативный, в то время как кэш данных L1 составляет 8-проборовный набор.
Следующие два скольжения показывают, как скорость попадания улучшается с установленной ассоциативностью. Имейте в виду, что такие вещи, как скорость попадания, - это высокое особое внимание - разные приложения будут иметь разные темпы попадания.
Почему CPU кэши продолжают становиться больше
Так зачем добавлять постоянно большие кэши в первую очередь? Поскольку каждый дополнительный пул памяти отталкивает необходимость доступа к основной памяти и может улучшить производительность в конкретных случаях.
Этот график от обзора HASEWELL ANANDTECH полезен, потому что он иллюстрирует влияние производительности добавления огромных (128 МБ) кэша L4, а также обычных структур L1 / L2 / L3. Каждый этаристый этап представляет новый уровень кэша. Красная линия - это чип с L4 - обратите внимание, что для больших размеров файлов он все еще почти в два раза быстрее, чем два других чипа Intel.
Тогда это может показаться логичным, чтобы посвятить огромные суммы ресурсов на умирание к кэше - но оказывается убывающая предельная рентабельность для этого. Большие кэши как медленнее и дороже. В шести транзисторах на бит срама (6Т) кэш также дорого (с точки зрения размера умирания, а следовательно, долларовые расходы). Несмотря на определенный момент, это имеет больше смысла тратить бюджет питания и транзистор Phip и транзистор на более выступающих устройствах, улучшению прогнозирования ветвления или дополнительных ядер. В верхней части истории вы можете увидеть изображение чипа Pentium M (Centrino / Dothan); Вся левая сторона матрицы посвящена массированному кеше L2. Это было в последних днях однопоточных процессорных процессоров, теперь, когда у нас есть многоядерные чипсы и умирают GPU во многих случаях, меньший процент общего процессора посвящен кэше.
Как конструкция кэша влияет на производительность
Воздействие производительности добавления кэша CPU напрямую связана с его эффективностью или скоростью попадания; Повторные промахи кэша могут иметь катастрофическое влияние на производительность процессора. Следующий пример значительно упрощен, но должен служить для иллюстрации точки.
Представьте, что CPU должен загружать данные из кэша 100 раз в ряд. Кэш L1 имеет задержку доступа 1ns и скорость попадания на 100 процентов. Это, следовательно, берет наши наносекунды CPU 100 для выполнения этой операции.
Теперь предположим, что кэш имеет 99-процентный скорость попадания, но данные, которые фактически нуждаются в процессоре для его 100-го доступа, сидят в L2 с задержкой доступа 10 цикла (10ns). Это означает, что требуется NanoSecond CPU 99 для выполнения первых 99 чтения и 10 наносекунд для выполнения 100-го. 1-процентное снижение ставки поступления просто замедлило CPU на 10 процентов.
В реальном мире кеш L1 обычно имеет скорость попадания в 95 и 97 процентов, но влияние на производительность этих двух значений в нашем простом примере не на 2 процента - это 14 процентов. Имейте в виду, мы предполагаем, что пропущенные данные всегда сидят в кэше L2. Если данные были выселены из кэша и сидят в основной памяти, с задержкой доступа 80-120NS разность производительности между скоростью достижения 95 и 97 процентов может почти удвоить общее время, необходимое для выполнения кода.
Назад, когда семья Бульдозера AMD сравнивалась с процессорами Intel, тема дизайна кэша и воздействия на производительность пришла в голову. Неясно, сколько от злоуструктовов бульдозера может быть обвинена на его относительно медленной подсистеме кэша - в дополнение к относительно высоким задержкам, семья бульдозера также пострадала от большого количества конфлиги кэша. Каждый модуль Bulldozer / Piledriver / Steamroller поделился своим кэшем инструкций L1, как показано ниже:
Кэш содержится, когда два разных потока пишут и перезаписывают данные в том же пространстве памяти. Это больно производительность обоих потоков - каждое ядро вынуждено проводить время, написание собственных предпочтительных данных в L1, только для другого ядра оперативно перезаписать эту информацию. Старый Steamrolleler AMD по-прежнему разрушается этой проблемой, хотя AMD увеличил кэш кода L1 до 96 КБ и сделал его трехсторонней ассоциативностью вместо двух. Позже Ryzen CPU не разделяют кэш в этой моде и не страдают от этой проблемы.
Этот график показывает, как скорость попадания OPteron 6276 (оригинальный процессор бульдозера) выпал, когда оба ядра были активны, по крайней мере, в некоторых тестах. Однако четко, однако, конкуренция кэша не является единственной проблемой - 6276 исторически изо всех сил пытается превзойти 6174, даже если оба процессора имели равные темпы достижения.
Зен 2 не имеет таких недостатков сегодня, и общий кеш и производительность памяти Zen и Zen 2 намного лучше, чем старая архитектура Piledriver.
Современные процессоры также часто имеют очень маленький кэш-память «L0», который часто находится всего в нескольких кварталах и используется для хранения Micro-OPS. AMD и Intel используют этот тип кэша; Дзен имел кэш-память 2 048 мкок, а Zen 2 имеет 4 096 μop кэш. Эти крошечные бассейны кеша работают под теми же общими принципами, что и L1 и L2, но представляют собой даже меньший пул памяти, который CPU может получить доступ к еще более низким задержкам, чем L1. Часто компании будут корректировать эти возможности друг против друга. Zen 1 и Zen + (ryzen 1xxx, 2xxx, 3xxx apus) имеют кэш инструкции по эксплуатации L1 64Kb, который 4-ходовой набор ассоциативных ассоциативных и 2 048 μop L0. ZEN 2 (Ryzen 3xxx Desktop CPU, Ryzen Mobile 4xxx) имеет кэш инструкций 32 КБ L1, который с 8-сторонней ассоциативной ассоциативной ассоциацией и 4 096 μop. Удвоение установленного ассоциативности и размер кэша μop позволил AMD сократить размер кэша L1 вдвое. Эти виды компромиссов распространены в проектах ЦП.
Будущие инновации
В последнее время IBM дебютировал свой телемонный микропроцессор с интересным и необычным кэш-структурой. Telum имеет обычный L1 и L2, но вместо физического L3 CPU развертывает виртуальный L3. Вместо того, чтобы полностью выделить данные L2, которые ЦП больше не верит, что процессор следующего поколения выселяет его в кэш L2 другого процессора на одном и том же ломтике кремния, и отмечает его в качестве данных L3. Каждое ядро имеет свой собственный 32 МБ L2, а виртуальный L3 по всему чипу составляет 256 МБ. IBM может даже поделиться этими возможностями по нескольким чипным системам, создавая виртуальную L4 с общим количеством 8192 МБ хранилища данных.
Этот тип виртуальной системы кэша является чем-то уникальным - у него нет эквивалента на стороне x86 уравнения - и это интересный пример того, как компании выталкивают конверт дизайна кэша. В то время как V-Cache amd предназначен для обеспечения дополнительной L3, а не 2, мы бы не упомянули его вообще. Недавнее достижение AMD и возможности, ожидаемое появление в будущем ZEN CPU, - это большой кеш L3, вертикально установленный на вершине существующих Chiblets и подключен к ним через силиконовый VIAS. Кэш может быть 40 лет на данный момент, но производители и дизайнеры все еще находятся способы улучшения его и расширения его утилиты.
Кэшировать
Структура и дизайн кэширования все еще в порядке, поскольку исследователи ищут способы выжимания более высокой производительности из более мелких кэшей. До сих пор производители, такие как Intel и AMD, не резко не выталкивали на большие кэши или проводят конструирует весь путь к L4. Есть несколько процессоров Intel с бортовым эдрами, которые имеют то, что имеет кэш L4, но этот подход необычен. Вот почему мы использовали пример Haswell, даже если этот ЦП старше. Предположительно, преимущества большого кеша L4 еще не перевешивают затраты на большинство случаев использования.
Независимо от того, дизайн кеша, энергопотребление и производительность будет иметь решающее значение для выполнения будущих процессоров, а существенные улучшения к текущим проектам могут повысить статус того, что компания может их реализовать.