AVX-512 — это 512-битное расширение 256-битных инструкций SIMD Advanced Vector Extensions для архитектуры набора команд x86 (ISA), предложенное Intel в июле 2013 года и впервые реализованное в Intel Xeon Phi x200 (Knights Landing) 2016 года [1] ] , а затем позже в ряде процессоров AMD и других процессоров Intel (см. список ниже). AVX-512 состоит из нескольких расширений, которые можно реализовать независимо. [2] Эта политика является отходом от исторического требования реализации всего блока команд. Для всех реализаций AVX-512 требуется только основное расширение AVX-512F (AVX-512 Foundation).
Помимо расширения большинства 256-битных инструкций, расширения вводят различные новые операции, такие как новые преобразования данных, операции разброса и перестановки. [2] Количество регистров AVX увеличено с 16 до 32, и добавлены восемь новых «регистров маски», которые позволяют выбирать переменные и смешивать результаты инструкций. В ЦП с расширением длины вектора (VL), включенном в большинство процессоров с поддержкой AVX-512 (см. § ЦП с AVX-512), эти инструкции также могут использоваться с размерами векторов 128 и 256 бит. AVX-512 — не первый 512-битный набор инструкций SIMD, который Intel внедрила в процессоры: более ранние 512-битные инструкции SIMD, используемые в сопроцессорах Xeon Phi первого поколения и созданные на основе проекта Intel Larrabee , аналогичны, но не совместимы на уровне двоичного кода и только частично совместим с исходным кодом. [1]
Набор инструкций AVX-512 состоит из нескольких отдельных наборов, каждый из которых имеет свой собственный уникальный бит функции CPUID; однако они обычно группируются по поколению процессоров, в которых они реализованы.
Префикс VEX , используемый AVX и AVX2, хотя и был гибким, не оставлял достаточно места для функций, которые Intel хотела добавить в AVX-512. Это побудило их определить новый префикс под названием EVEX .
По сравнению с VEX, EVEX имеет следующие преимущества: [6]
Расширенные регистры, бит ширины SIMD и регистры opmask AVX-512 являются обязательными и требуют поддержки со стороны ОС.
Инструкции AVX-512 предназначены для смешивания с 128/256-битными инструкциями AVX/AVX2 без снижения производительности. Однако расширения AVX-512VL позволяют использовать инструкции AVX-512 в 128/256-битных регистрах XMM/YMM, поэтому большинство инструкций SSE и AVX/AVX2 имеют новые версии AVX-512, закодированные с префиксом EVEX, которые обеспечивают доступ к новым функциям. такие как opmask и дополнительные регистры. В отличие от AVX-256, новые инструкции не имеют новой мнемоники, но разделяют пространство имен с AVX, что делает различие между версиями инструкций, закодированными VEX и EVEX, в исходном коде неоднозначным. Поскольку AVX-512F работает только с 32- и 64-битными значениями, инструкции SSE и AVX/AVX2, которые работают с байтами или словами, доступны только с расширением AVX-512BW (поддержка байтов и слов). [6]
Ширина файла регистров SIMD увеличена с 256 бит до 512 бит и увеличена с 16 до 32 регистров ZMM0–ZMM31. Эти регистры могут быть адресованы как 256-битные регистры YMM из расширений AVX и 128-битные регистры XMM из потоковых расширений SIMD , а устаревшие инструкции AVX и SSE могут быть расширены для работы с 16 дополнительными регистрами XMM16-XMM31 и YMM16-YMM31 при использовании EVEX. закодированная форма.
Большинство инструкций AVX-512 могут указывать один из 8 регистров опмаски (k0–k7). Для инструкций, которые используют регистр маски в качестве маски операции, регистр «k0» является специальным: жестко запрограммированная константа, используемая для обозначения немаскированных операций. Для других операций, например, операций записи в регистр opmask или выполнения арифметических или логических операций, «k0» является функционирующим и допустимым регистром. В большинстве инструкций маска op используется для контроля того, какие значения записываются в место назначения. Флаг управляет поведением opmask, которое может быть либо «нулевым», что обнуляет все, что не выбрано маской, либо «объединением», что оставляет все невыделенное нетронутым. Поведение слияния идентично инструкциям смешивания.
Регистры opmask обычно имеют ширину 16 бит, но с расширением AVX-512BW могут достигать 64 бит. [6] Однако количество битов, которые фактически используются, зависит от векторного типа маскируемых инструкций. Для 32-битных одинарных или двойных слов с плавающей запятой 16 бит используются для маскировки 16 элементов в 512-битном регистре. Для двойных слов с плавающей запятой и четверных слов используется не более 8 битов маски.
Регистр opmask является причиной того, что в AVX-512 были добавлены несколько побитовых инструкций, которые, естественно, не имеют ширины элементов. Например, побитовое И, ИЛИ или 128-битное перемешивание теперь существует как в вариантах с двойным словом, так и с четырьмя словами, с той лишь разницей, что в окончательной маскировке.
Регистры opmask имеют новое мини-расширение инструкций, работающих непосредственно с ними. В отличие от остальных инструкций AVX-512, все эти инструкции закодированы VEX. Все первоначальные инструкции opmask представляют собой 16-битные версии (Word). В AVX-512DQ были добавлены 8-битные (Byte) версии, чтобы лучше соответствовать требованиям маскировки 8 64-битных значений, а в AVX-512BW были добавлены 32-битные (Double) и 64-битные (Quad) версии, чтобы они могли маска до 64 8-битных значений. Инструкции KORTEST и KTEST можно использовать для установки флагов x86 на основе регистров маски, чтобы их можно было использовать вместе с инструкциями ветвления x86, отличными от SIMD, и условными инструкциями.
Многие инструкции AVX-512 представляют собой просто EVEX-версии старых инструкций SSE или AVX. Однако есть несколько новых инструкций, а также старые инструкции, которые были заменены новыми версиями AVX-512. Ниже перечислены новые или сильно переработанные инструкции. Эти базовые инструкции также включают расширения AVX-512VL и AVX-512BW, поскольку эти расширения просто добавляют новые версии этих инструкций вместо новых инструкций.
Версий инструкций смешивания из SSE4 с префиксом EVEX не существует ; вместо этого AVX-512 имеет новый набор инструкций смешивания, использующих регистры маски в качестве селекторов. Вместе с приведенными ниже общими инструкциями сравнения с маской они могут использоваться для реализации общих троичных операций или cmov, аналогичных VPCMOV в XOP .
Поскольку смешивание является неотъемлемой частью кодирования EVEX, эти инструкции также можно считать базовыми инструкциями перемещения. Используя режим наложения обнуления, их также можно использовать в качестве инструкций маскировки.
AVX-512F имеет четыре новые инструкции сравнения. Как и их коллеги из XOP , они используют поле «Непосредственно» для выбора между 8 различными сравнениями. Однако, в отличие от своего вдохновения XOP, они сохраняют результат в регистре маски и изначально поддерживают только сравнения двойных и четверных слов. Расширение AVX-512BW предоставляет байтовые и словные версии. Обратите внимание, что для инструкций могут быть указаны два регистра маски: один для записи, а другой для объявления обычного маскировки. [6]
Последний способ установки масок — использование маски логического набора. Эти инструкции выполняют либо И, либо НЕИ, а затем устанавливают операционную маску назначения на основе нулевых или ненулевых значений результата. Обратите внимание, что, как и инструкции сравнения, они принимают два регистра opmask: один в качестве адресата, а другой — обычную opmask.
Инструкции сжатия и расширения соответствуют одноименным операциям APL . Они используют opmask немного иначе, чем другие инструкции AVX-512. Сжатие сохраняет только значения, отмеченные в маске, но сохраняет их в сжатом виде, пропуская и не резервируя место для неотмеченных значений. Расширение работает противоположным образом: загружается столько значений, сколько указано в маске, а затем распределяется по выбранным позициям.
Был добавлен новый набор инструкций перестановки для полных двух перестановок входных данных. Все они принимают три аргумента, два исходных регистра и один индекс; результат выводится путем перезаписи первого исходного регистра или индексного регистра. AVX-512BW расширяет инструкции, включая также 16-битные версии (слова), а расширение AVX-512_VBMI определяет байтовые версии инструкций.
Добавлены две новые инструкции, которые могут логически реализовать все возможные побитовые операции между тремя входами. Они принимают на вход три регистра и 8-битное непосредственное поле. Каждый бит на выходе генерируется с использованием поиска трех соответствующих битов на входах для выбора одной из 8 позиций в 8-битном немедленном сообщении. Поскольку с использованием трех бит возможны только 8 комбинаций, это позволяет выполнять все возможные 3 входные побитовые операции. [6] Это единственные побитовые векторные инструкции в AVX-512F; Версии EVEX двух исходных побитовых векторных инструкций SSE и AVX AND, ANDN, OR и XOR были добавлены в AVX-512DQ.
Разница между версиями двойного и четверного слова заключается только в применении opmask.
Был добавлен ряд инструкций преобразования или перемещения; они дополняют набор инструкций преобразования, доступных в SSE2.
Среди уникальных новых функций AVX-512F — инструкции по разложению значений с плавающей запятой и обработке специальных значений с плавающей запятой . Поскольку эти методы совершенно новые, они существуют и в скалярных версиях.
Это второй набор новых методов с плавающей запятой, который включает в себя новое масштабирование и приближенный расчет обратной величины и обратной величины квадратного корня. Приблизительные обратные инструкции гарантируют максимальную относительную ошибку 2 −14 . [6]
Инструкции в обнаружении конфликтов AVX-512 (AVX-512CD) предназначены для эффективного расчета бесконфликтных подмножеств элементов в циклах, которые обычно не могут быть безопасно векторизованы. [8]
Экспоненциальные и обратные инструкции AVX-512 (AVX-512ER) содержат более точные приблизительные обратные инструкции, чем инструкции в основе AVX-512; относительная ошибка не более 2-28 . Они также содержат две новые экспоненциальные функции, имеющие относительную ошибку не более 2–23 . [6]
Инструкции предварительной выборки AVX-512 (AVX-512PF) содержат новые операции предварительной выборки для новых функций рассеяния и сбора, представленных в AVX2 и AVX-512. T0
предварительная выборка означает предварительную выборку в кеш уровня 1 и T1
означает предварительную выборку в кеш уровня 2.
Два набора инструкций выполняют несколько итераций обработки. Обычно они встречаются только в продуктах Xeon Phi.
AVX-512DQ добавляет новые инструкции из двойного и четверного слова. AVX-512BW добавляет байтовые и словесные версии одних и тех же инструкций, а также добавляет байтовые и словесные версии инструкций двойного/четверного слова в AVX-512F. Некоторые инструкции, которые получают только словесные формы с помощью AVX-512BW, приобретают байтовые формы с расширением AVX-512_VBMI ( VPERMB
, VPERMI2B
, VPERMT2B
, VPMULTISHIFTQB
).
В набор инструкций маски были добавлены две новые инструкции: KADD
и KTEST
(формы B и W для AVX-512DQ, D и Q для AVX-512BW). Остальные инструкции маски, которые имели только словесные формы, получили байтовые формы с AVX-512DQ и формы двойного/четверного слова с AVX-512BW. KUNPCKBW
был расширен до KUNPCKWD
AVX KUNPCKDQ
-512BW.
Среди инструкций, добавленных AVX-512DQ, есть несколько инструкций SSE и AVX, которые не получили версии AVX-512 с AVX-512F, среди них все две входные побитовые инструкции и инструкции извлечения/вставки целых чисел.
Ниже приведены совершенно новые инструкции.
Введены три новые операции с плавающей запятой. Поскольку они не только новы для AVX-512, у них есть как упакованные/SIMD, так и скалярные версии.
Инструкции VFPCLASS
проверяют, является ли значение с плавающей запятой одним из восьми специальных значений с плавающей запятой, какое из восьми значений будет запускать бит в регистре выходной маски, который контролируется непосредственным полем. Инструкции VRANGE
выполняют минимальные или максимальные операции в зависимости от значения непосредственного поля, которое также может контролировать, выполняется ли операция абсолютно или нет, и отдельно, как обрабатывается знак. Инструкции VREDUCE
работают с одним источником и вычитают из него целую часть значения источника плюс количество битов, указанных в непосредственном поле его дроби.
Расширьте VPCOMPRESS и VPEXPAND вариантами байтов и слов. Инструкции по сменам новые.
Инструкции векторной нейронной сети: [9] AVX512-VNNI добавляет инструкции в коде EVEX , описанные ниже. В AVX-512F эти инструкции могут работать с 512-битными векторами, а в AVX-512VL дополнительно добавлена поддержка 128- и 256-битных векторов.
Более позднее расширение AVX-VNNI добавляет кодировку этих инструкций VEX , которая может работать только с 128- или 256-битными векторами. AVX-VNNI не является частью пакета AVX-512, он не требует AVX-512F и может быть реализован независимо.
Инструкции умножения-сложения целых чисел. AVX512-IFMA добавляет инструкции в коде EVEX , описанные ниже.
Отдельное расширение набора команд AVX-IFMA определяет кодировку этих инструкций VEX . Это расширение не является частью пакета AVX-512 и может быть реализовано независимо.
Новые инструкции поля Галуа полезны для криптографии [10] , поскольку их можно использовать для реализации S-блоков в стиле Рейндала, таких как те, которые используются в AES, Camellia и SM4 . [11] Эти инструкции также можно использовать для манипуляций с битами в сетях и обработке сигналов. [10]
GFNI — это автономное расширение набора команд, которое можно включить отдельно от AVX или AVX-512. В зависимости от того, указана ли процессором поддержка AVX и AVX-512F, поддержка GFNI позволяет использовать устаревшие (SSE), инструкции с кодировкой VEX или EVEX, работающие с 128-, 256- или 512-битными векторами.
VPCLMULQDQ с AVX-512F добавляет 512-битную версию инструкции PCLMULQDQ в кодировке EVEX . В AVX-512VL добавлены 256- и 128-битные версии с кодировкой EVEX. Только VPCLMULQDQ (то есть на процессорах, отличных от AVX512) добавляет только 256-битную версию с кодировкой VEX. (Наличие 128-битной версии с кодировкой VEX указывается разными битами CPUID: PCLMULQDQ и AVX.) Более широкие, чем 128-битные, варианты инструкции выполняют одну и ту же операцию с каждой 128-битной частью входных регистров, но они не расширять его для выбора четверных слов из разных 128-битных полей (значение операнда imm8 одинаково: выбирается либо младшее, либо старшее четверное слово 128-битного поля).
Инструкции AES в кодировке VEX и EVEX . Более широкие, чем 128-битные варианты инструкции выполняют одну и ту же операцию с каждой 128-битной частью входных регистров. Версии VEX можно использовать без поддержки AVX-512.
Инструкции по ускорению AI, работающие с числами Bfloat16 .
Расширение более раннего набора команд F16C , добавляющее комплексную поддержку чисел с плавающей запятой в двоичном формате 16 (также известных как FP16, float16 или числа с плавающей запятой половинной точности). Новые инструкции реализуют большинство операций, которые ранее были доступны для чисел с плавающей запятой одинарной и двойной точности, а также представляют новые инструкции для комплексных чисел и инструкции преобразования. Поддерживаются скалярные и пакетные операции.
В отличие от инструкций формата одинарной и двойной точности, операнды половинной точности не сбрасываются условно до нуля ( FTZ ) и не обрабатываются условно как ноль ( DAZ ) в зависимости от MXCSR
настроек. Субнормальные значения обрабатываются на полной скорости аппаратно, чтобы облегчить использование полного динамического диапазона чисел FP16. Инструкции, создающие номера FP32 и FP64, по-прежнему учитывают этот MXCSR.FTZ
бит. [12]
^Примечание 1. Intel официально не поддерживает семейство инструкций AVX-512 на микропроцессорах Alder Lake . Intel отключила встроенный (отключенный предохранитель) AVX-512 в последних версиях микропроцессоров Alder Lake, чтобы клиенты не могли включить AVX-512. [33] В старых процессорах семейства Alder Lake с некоторыми устаревшими комбинациями версий BIOS и микрокода можно было выполнять инструкции семейства AVX-512 при отключении всех эффективных ядер, которые не содержат микросхем для AVX-512. [34] [35] [22]
Intel Vectorization Advisor (начиная с версии 2017) поддерживает встроенный анализ производительности AVX-512 и качества векторного кода (для процессоров «Core», Xeon и Intel Xeon Phi ). Наряду с традиционным профилем горячих точек, рекомендациями Advisor и «бесшовной» интеграцией диагностики векторизации компилятора Intel, анализ Advisor Survey также предоставляет метрики AVX-512 ISA и новые «характеристики», специфичные для AVX-512, например разброс, сжатие/расширение, использование маски. [36] [37]
На некоторых процессорах (в основном Intel до Ice Lake ) инструкции AVX-512 могут вызывать даже большее регулирование частоты, чем его предшественники, что приводит к штрафам за смешанные рабочие нагрузки. Дополнительный даунклокинг запускается 512-битной шириной векторов и зависит от характера выполняемых инструкций, а использование 128- или 256-битной части AVX-512 (AVX-512VL) не вызывает его. В результате gcc и clang по умолчанию предпочитают использовать 256-битные векторы для целей Intel. [38] [39] [40]
Компиляторы C/ C++ также автоматически обрабатывают развертывание циклов и предотвращают зависания в конвейере , чтобы наиболее эффективно использовать AVX-512. Это означает, что программист, использующий встроенные функции языка для принудительного использования AVX-512, иногда может привести к ухудшению производительности по сравнению с код, сгенерированный компилятором, когда он встречает циклы, явно написанные в исходном коде. [41] В других случаях использование встроенных функций AVX-512 в коде C/C++ может привести к повышению производительности по сравнению с написанным в чистом виде C/C++. [42]
Существует множество примеров приложений AVX-512 , включая обработку мультимедиа, криптографию, видеоигры , [43] нейронные сети , [44] и даже OpenJDK , который использует AVX-512 для сортировки . [45]
В широко цитируемой цитате из 2020 года Линус Торвальдс сказал: «Я надеюсь, что AVX-512 умрет мучительной смертью, и что Intel начнет исправлять реальные проблемы вместо того, чтобы пытаться создавать волшебные инструкции, чтобы затем создавать тесты, на которых они смогут хорошо выглядеть» [ 46] , заявив, что он предпочел бы, чтобы транзисторный бюджет был потрачен на дополнительные ядра и целочисленную производительность, и что он «ненавидел» тесты с плавающей запятой . [47]
Numenta рекламирует свою «очень редкую » [48] технологию нейронных сетей, которая, по их словам, устраняет необходимость в графических процессорах , поскольку их алгоритмы работают на процессорах с AVX-512. [49] Они заявляют о десятикратном ускорении по сравнению с A100 , главным образом потому, что их алгоритмы уменьшают размер нейронной сети, сохраняя при этом точность , с помощью таких методов, как алгоритм разреженного эволюционного обучения (SET) [50] и прогнозирование. [51]
Новые процессоры x86-64 также поддерживают новые инструкции Galois Field New (GFNI), которые позволяют более просто реализовать Camellia s-box и обеспечивают еще большую производительность.
{{cite web}}
: CS1 maint: неподходящий URL ( ссылка )