Новая статья: NVIDIA Vera: 88 «олимпийских» Arm-ядер для ИИ-агентов

Ядро NVIDIA Olympus с ISA ARMv9.2 было разработано в рамках экстремального совместного проектирования для платформы Vera Rubin, охватывающей CPU, GPU, сети, хранилища, подсистемы памяти и ПО, что позволило оптимизировать ИИ-фабрику в целом. Ядро Olympus разработано для ускорения нерегулярных, ресурсоёмких (с большим количеством ветвлений) и чувствительных к задержкам процессов, которые всё больше определяют сквозную производительность ИИ-платформы целиком. В особенности при работе с нагрузками ИИ-агентов, которых становится всё больше.

Источник изображений: NVIDIA

Источник изображений: NVIDIA

Ядро Olympus ориентировано на максимизацию количества исполняемых инструкций за такт (IPC) для высококонкурентных рабочих нагрузок ИИ. Оно сочетает в себе высокую производительность в однопоточном режиме, большую ширину конвейера, глубокое внеочередное выполнение и передовые технологии ускорения работы памяти для эффективного выполнения агентного ИИ, обучения с подкреплением, анализа данных и крупномасштабных программных рабочих нагрузок. Ядро включает оптимизированный предсказатель ветвлений, «умный» планировщик, оптимизированные для векторных задач исполнительные блоки и оптимизированную с точки зрения снижения задержек кеш-подсистему.

Среды выполнения агентов, интерпретаторы, компиляторы, графовая аналитика и фреймворки обработки данных нередко сочетают большой объём инструкций с частыми изменениями потока управления. Для решения этих проблем в Olympus предусмотрены расширенное предсказание ветвлений, высокоскоростная выборка инструкций и декодер шириной в 10 инструкций. Olympus включает нейронный предсказатель ветвлений, способный с высокой точностью оценивать две ветки за такт. Блок выборки может передавать из L1-кеша до 16 инструкций за такт (128 байт) в очередь декодирования длиной 48 инструкций, которая отдаёт декодеру до 10 fuse-инструкций.

Агентные задачи часто включают длинные, зависимые от результатов исполнения предыдущих инструкций цепочки команд, включая интерпретацию кода, обход объектов (traversing), управление состоянием во время исполнения и навигацию по графоподобным структурам данных. При этом производительность зависит не только от скорости выборки инструкций, но и от способности обнаруживать независимые участки исполняемого кода. Ядро Olympus разработано для выявления и ускорения этого скрытого параллелизма. Расширенный механизм переименования и аллокации сочетается с большим буфером переупорядочивания и обширным объёмом физических регистров, что позволяет увеличить глубину внеочередного исполнения.

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

Как отметил ServeTheHome, NVIDIA не раскрывает размер важнейшего буфера переупорядочивания. Также не раскрывается размер регистровых файлов, используемых для переименования. Вместе с тем сообщается, что ядро CPU способно переименовывать до 10 микроопераций за цикл, не отставая от декодера. Также примечательно, что NVIDIA использует переименование памяти (по аналогии с переименованием регистров) — метод, который применяется в последних разработках AMD. Согласно NVIDIA, это позволяет Olympus выполнять зависимые инструкции (store-to-load) ещё до завершения загрузки (load), если взаимосвязь данных может быть предсказана или заранее определена.

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

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

Для рабочих нагрузок агентов, которые часто являются импульсными, событийными и перемежающимися с фоновой системной активностью, важна многопоточность, но не совсем типичная. Вместо традиционной одновременной многопоточности (SMT), которая может привести к конкуренции за блок предсказания ветвлений, декодер, исполнительные блоки, кеш и память, в результате чего активность одного потока может снижать производительность другого, NVIDIA использует т.н. пространственную многопоточность (Spatial Multithreading).

NVIDIA SMT позволяет разделить ресурсы ядра между двумя аппаратными потоками, что даёт Olympus возможность работать как высокопроизводительному однопоточному ядру, когда требуется максимальная производительность на поток (соседний поток обрабатывает только операции управления), или в режиме двух изолированных потоков, когда требуется более высокая плотность. Это повышает утилизацию ресурсов и даёт более предсказуемое поведение под нагрузкой в части задержки и пропускной способности.

Каждое ядро Olympus имеет довольно большой набор исполнительных блоков. Так, имеется восемь простых ALU для целочисленных арифметических операций и ветвлений, но в дополнение пара ALU поддерживает обработку сложных арифметических операций (умножение/деление), а ещё пара — CRC, сдвиг и т.д. Базовые операции ALU выполняются за один цикл, в то время как умножение может быть выполнено всего за два цикла, а деление — за 5–20 циклов в зависимости от количества необходимых итераций. 128-бит SVE2-блоков с поддержкой FP8-операций в ядре шесть (в Grace было четыре), причём и тут в дополнение пара блоков поддерживает также криптооперации AES, SHA, SM3/4 и т.д.

Следует отметить, что у Olympus больше каналов для целочисленных операций, чем для операций с плавающей запятой. Также есть четыре блока для канала для операций load/store. Два из них являются общими, поддерживая как загрузку, так и сохранение, в то время как ещё два предназначены исключительно для загрузки данных. Следует отметить, что у Olympus нет явно выделенных каналов для генерации адресов. Наконец, есть ещё четыре блока ветвления, работающие в паре с предсказателем ветвлений. Примечательно, что здесь все эти блоки расположены попарно, что является важным элементом работы NVIDIA SMT на основе разделов.

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

Каждое ядро получило 64 Кбайт 4-ассоциативного L1i-кеша и 96 Кбайт 6-ассоциативного L1d-кеша, а также 2 Мбайт L2-кеша. Ядро включает полностью ассоциативные TLB для данных и инструкций, а также унифицированный TLB второго уровня, что ускоряет обращения к памяти. Чип в целом имеет 164 Мбайт общего L3-кеша. Ядра, L3-кеш, контроллеры памяти и IO-блоки объединены кеш-когерентым интерконнектом SCF (Scalable Coherency Fabric) с пропускную способностью 3,4 Тбайт/с (bisectional), что почти втрое быстрее всей подсистемы внешней памяти, которая использует модули SOCAMM2 LPDDR5X-9600 (8 каналов, до 1,5 Тбайт) с суммарной ПСП 1,2 Тбайт/с (12,7 Гбайт/c на ядро).

SCF формируется вокруг узлов коммутации CSN (Cache Switch Nodes), каждый из которых обслуживает два ядра и отвечает за маршрутизацию трафика между ядрами, L3-кешем, памятью (через MSN), контроллерами I/O (через BSN) и общение с другими ядрами и CSN. Интерфейсы MSN (Memory Switch Nodes) распределяют обращения по нескольким контроллерам памяти, что позволяет сбалансировать утилизацию доступной пропускной способности, а также эффективно «кормить» данными и сам CPU, подключённые GPU. BSN (Bridge Switch Nodes) отвечают за прямое подключение к интерфейсам NVLink-C2C (1,8 Тбайт/с в дуплексе) и PCIe/CXL.

По словам NVIDIA, SCF позволяет обращаться к другим пулам L2-кеша или MSN без существенного увеличения задержки, а размещение L3-кеша и NOC-фабрики на монолитном кристалле позволяет Vera избежать задержек и изменчивости, характерных для чиплетных конструкций, обеспечивая более предсказуемый доступ к общим данным внутри процессора. А поддержка подключения NVLink-C2C, тоже кеш-когерентого, даёт унифицированное адресное пространство при объединении двух сокетов. NVIDIA сознательно упростила NUMA-архитектуру, оставив только два домена (собственно сокета), но добавив программный механизм MPAM (Memory System Resource Partitioning and Monitoring) для выделения нагрузкам части L3-кеша и ПСП.

Процессор Vera наделён 88 линиями PCIe 6.4 с поддержкой CXL 3.1 и возможностью бифуркации вплоть x2. В 2S-платформе это даёт 176 линий, а в случае Vera Rubin — 96 линий. Поддержка устройств CXL Type-3 позволяет прозрачно нарастить доступный системе объём памяти с сохранением кеш-когерентности, но, возможно, более интересной видится возможность использования общих пулов памяти сразу несколькими хостами. В том числе с защитой (TDISP). Vera поддерживает Arm CCA, RME-DA и RME-CDA, позволяя создавать изолированные, защищённые индивидуальными ключами шифрования ВМ. Наконец, отдельное внимание было уделено расширению функций RAS.

По словам NVIDIA, ядро Olympus создавалось для максимальной производительности в однопоточном режиме при полной нагрузке сокета за счёт более «широкого» и эффективного ядра, а не только благодаря более высокой тактовой частоте. Для подтверждения своих слов компания провела сравнение со 128-ядерными AMD EPYC 9755 (Turin) на базе архитектуры Zen 5. Приведенные результаты по четырём агентным рабочим нагрузкам показывают, что ядро Olympus обеспечивает по сравнению с Zen 5 в 1,9 раза более высокий IPC в однопоточном режиме с большей эффективностью в условиях нагрузки, характерных для агентных систем.

Olympus использует усовершенствованный блок предсказания ветвлений BPU с надёжными механизмами конвейерной обработки, обеспечивающими до 2,3 раза больше предсказаний за цикл по сравнению с Zen 5. BPU работает с более высокой эффективной скоростью, сохраняя при этом преимущество MPKI (количество пропущенных предсказаний на 1000 инструкций), отдавая более полезные потоки инструкций в широкий конвейер декодирования и исполнения. Также Olympus обеспечивает до 2,4 раза больше операций выборки инструкций за цикл по сравнению с Zen 5. При этом Vera обеспечивает вполовину меньшие задержки при общении ядер между собой, 90% утилизацию ПСП, на 40% меньшую задержку обращений к памяти при полной загрузке и почти вчетверо большую ПСП на ядро. Впрочем, AMD обещает, что EPYC Venice окажутся быстрее Vera.

Если вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER. | Можете написать лучше? Мы всегда рады новым авторам.

Источник:

©  3DNews