Когда речь заходит о «запуске модели искусственного интеллекта», по умолчанию подразумевается видеокарта (GPU) — но далеко не каждая задача ИИ подходит для такого оборудования. Небольшие модели или операции, чувствительные к задержкам и рассчитанные на одного пользователя, нередко выгоднее выполнять на центральном процессоре (CPU): так удаётся избежать накладных расходов на пересылку данных между видеокартой и процессором. К тому же существует масса ситуаций, когда отдельной видеокарты попросту нет либо доступно лишь скромное встроенное решение с ограниченными возможностями. Именно для таких сценариев Intel и AMD опубликовали полную спецификацию расширений ACE — набора инструкций, который делает выполнение ИИ-задач на процессорах x86 проще и энергоэффективнее.

Источник изображения - Getty ImagesИсточник изображения - Getty Images

Что такое ACE и зачем понадобился новый стандарт

ACE (AI Compute Extensions) — это технический стандарт, который опирается на уже существующие регистры AVX10, но добавляет кремний, отведённый специально под перемножение матриц. Преимуществ здесь несколько, но ключевые — заметно более высокая энергоэффективность, упрощение разработки и оптимизации, а также использование 512-битных входных данных AVX. Последнее обеспечивает лёгкую интеграцию с уже имеющимися конструкциями и избавляет от необходимости в специальных входных данных, привязанных к ACE.

Расширение появилось не в вакууме. Осенью 2024 года AMD и Intel создали x86 Ecosystem Advisory Group (EAG) — совместную инициативу, цель которой согласовать развитие платформы x86 и снизить разнобой между производителями. На этой площадке две компании договорились о четырёх опорных стандартах: FRED (новая модель обработки прерываний), AVX10 (объединение AVX-512 и AVX2 в единое векторное расширение), ChkTag (аппаратная разметка памяти для защиты от уязвимостей вроде переполнения буфера) и, наконец, ACE — матричное расширение для ускорения нагрузок искусственного интеллекта. ACE задуман как дополнение к AVX10, а не его замена.

Стандартизация важна сама по себе. Раньше новые возможности x86 появлялись то у одного производителя, то у другого, а внутри линеек распределялись неравномерно между настольными, рабочими и серверными решениями. Единый набор инструкций, который поддержат обе компании, даёт разработчикам весомый стимул им пользоваться — и помогает избежать той фрагментации, что в своё время преследовала набор AVX-512 с его многочисленными вариациями.

Почему перемножение матриц — это так важно

Перемножение матриц — краеугольный камень нагрузок искусственного интеллекта: берём таблицу чисел и прогоняем по всему массиву цикл «умножение-сложение». Такое всегда было возможно практически на любом процессоре, пусть и с ограниченной скоростью. Но даже сегодня выполнение этих циклов потребляет много энергии — в том числе при использовании инструкций умножения-накопления AVX10 в архитектуре x86. По сути это «костыль»: AVX изначально не проектировался под двумерные матричные операции.

Корень проблемы — в размерности. Классические векторные инструкции SIMD (одна инструкция — множество данных), к которым относится и AVX, работают с одномерными данными. А машинное обучение, построенное на операции умножения с накоплением матриц (MMA), требует обработки уже в двух измерениях. ACE как раз и закрывает этот разрыв, добавляя в набор инструкций полноценную двумерную матричную структуру.

Откуда берётся прирост в 16 раз

При одинаковом количестве входных векторов ACE выполняет в 16 раз больше операций по сравнению с AVX10. Важная оговорка: это не означает автоматического 16-кратного ускорения — итог зависит от конкретной реализации. Однако разумно ожидать, что в будущих разработках Intel и AMD выделят под эту задачу больше кремния ради дополнительной производительности. Вдобавок, поскольку каждая инструкция ACE выполняет больше работы, чем эквивалентный цикл AVX10, снижаются накладные расходы на инструкции процессора и потенциально лучше используется пропускная способность оперативной памяти — причём сразу, без дополнительной настройки.

Откуда конкретно берётся эта цифра, понятно из устройства новых регистров. ACE вводит в набор инструкций x86 восемь архитектурных матричных (tile) регистров, каждый шириной 512 бит и с 16 строками — этого достаточно, чтобы хранить матрицу 16×16 с 32-битным типом данных для накопления результата. За один такт такая конструкция формирует 256 новых произведений и накапливает их в матричном регистре, не затирая предыдущие значения, — в сумме до 1024 умножений за такт. Для сравнения: «голый» AVX без оптимизаций трактует 512-битный вектор как простую строку из 64 элементов (8-битные данные) и даёт лишь 64 умножения. Скачок с 64 до 1024 операций и есть источник заявленного 16-кратного выигрыша.

При этом разработчики постарались переиспользовать уже имеющуюся инфраструктуру. По задумке новые матричные регистры размещаются в том же физическом регистровом файле, что и 512-битные ZMM-регистры AVX-512/AVX10. На вход ACE-операции получают данные из ZMM-регистров, а матричные регистры выступают накопителем и местом для результата — причём итог можно быстро сконвертировать обратно в обычные SIMD-регистры. Такой подход экономит транзисторы и упрощает встраивание расширения прямо в ядро процессора.

Единый путь для разработчиков и поддержка форматов данных

Выгоды выходят далеко за рамки простого сокращения числа инструкций на ту же задачу. ACE задуман как независимый от реализации: фреймворки машинного обучения и их базовые библиотеки (PyTorch, TensorFlow) смогут писать единственный путь выполнения кода вместо нескольких вариаций, зависящих от конкретного оборудования и степени поддержки AVX.

ACE нативно поддерживает практически все типы данных, востребованные в операциях машинного обучения, — в том числе целочисленный INT8, 8-битные форматы с плавающей запятой (OCP FPM8, MXFP8, MXINT8) и 16-битный Bfloat16. Кроме того, расширение умеет нативно работать с блочно-масштабированными MX-форматами от Open Compute Project, чего AVX10 не обеспечивает. На старте ACE включает инструкции преобразования между этими форматами; в перспективе не исключено добавление и более компактных типов вроде FP6 или FP4.

Отдельно стоит выделить гибкость распределения нагрузки. Разработчики смогут переносить часть задач, обычно отводимых NPU, обратно на процессор — когда что-то нужно посчитать быстро и прямо сейчас. В таких ситуациях огромный плюс в том, что не приходится учитывать различия между разными NPU: ACE предлагает единую цель для всего оборудования на архитектуре x86.

Когда ждать ACE в железе

Первой архитектурой с поддержкой ACE, судя по всему, станет AMD Zen 7, выход которой ориентировочно намечен на 2028 год. На дорожной карте AMD для этого поколения значатся «новый матричный движок» и расширение поддержки форматов данных ИИ — что вполне укладывается в описание ACE. Документация спецификации во многом написана инженерами AMD, хотя Intel также участвовала в работе над стандартом, по меньшей мере на более позднем этапе.

Принципиальное отличие от прежнего подхода Intel в том, что охват у ACE заметно шире. Серверное расширение AMX от Intel было доступно только в процессорах Xeon, тогда как ACE задумано для всего диапазона устройств — от серверов до ноутбуков, включая мобильные решения. Если поддержку удастся встроить прямо в ядро через совместное использование физического регистрового файла без чрезмерного роста числа транзисторов, расширение может стать частью всех ядер x86, а не отдельным ускорителем за их пределами. Сроки появления поддержки в процессорах Intel пока не названы.