AVX-512- это 512-битные расширения для 256-битных Advanced Vector Extensions SIMD инструкции для x86 архитектуры набора команд (ISA), предложенные Intel в июле 2013 г. и реализован в процессорах Intel Xeon Phi x200 (Knights Landing) и Skylake-X ; это включает серию Core-X (за исключением Core i5-7640X и Core i7-7740X), а также новое семейство масштабируемых процессоров Xeon и Xeon D-2100 Embedded Series.
AVX-512 - не первый 512-битный набор инструкций SIMD, который Intel представила в процессорах: более ранние 512-битные инструкции SIMD, используемые в сопроцессорах Xeon Phi первого поколения, производные от Проект Intel Larrabee аналогичен, но не совместим с двоичными кодами и только частично совместим с исходным кодом.
AVX-512 состоит из нескольких расширений, которые могут быть реализованы независимо. Эта политика является отходом от исторического требования реализации всего блока инструкций. Для всех реализаций AVX-512 требуется только базовое расширение AVX-512F (AVX-512 Foundation).
Набор команд AVX-512 состоит из нескольких отдельных наборов, каждый из которых имеет свой собственный уникальный бит функции CPUID; однако они обычно группируются по поколению процессоров, в котором они реализованы.
Префикс VEX, используемый AVX и AVX2, хотя и был гибким, не оставлял достаточно места для функций, которые Intel хотела добавить в AVX-512. Это побудило их определить новый префикс под названием EVEX.
По сравнению с VEX, EVEX добавляет следующие преимущества:
Расширенные регистры, бит ширины 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 (поддержка байтов и слов).
Имя | Наборы расширений | Регистры | Типы |
---|---|---|---|
Устаревшие SSE | SSE-SSE4.2 | xmm0-xmm15 | одиночные поплавки. Из SSE2: байты, слова, двойные слова, четверные слова и двойные числа с плавающей запятой. |
AVX-128 (VEX) | AVX, AVX2 | xmm0-xmm15 | байты, слова, двойные слова, четверные слова, одинарные и двойные числа с плавающей запятой. |
AVX-256 (VEX) | AVX, AVX2 | ymm0-ymm15 | с одинарным и двойным поплавком. Из AVX2: байты, слова, двойные слова, четверные слова |
AVX-128 (EVEX) | AVX-512VL | xmm0-xmm31 (k1-k7) | двойные слова, четверные слова, одинарное и двойное поплавок. С AVX512BW: байты и слова |
AVX-256 (EVEX) | AVX-512VL | ymm0-ymm31 (k1-k7) | двойные слова, четверные слова, одинарное число с плавающей запятой и двойной поплавок. С AVX512BW: байты и слова |
AVX-512 (EVEX) | AVX-512F | zmm0-zmm31 (k1-k7) | двойные слова, четверные слова, одинарное число с плавающей запятой и двойной поплавок. С AVX512BW: байты и слова |
511256 | 255128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | YMM1 | XMM1 |
ZMM2 | YMM2 | XMM2 |
ZMM3 | YMM3 | XMM3 |
ZMM4 | YMM4 | XMM4 |
ZMM5 | YMM5 | XMM5 |
ZMM6 | YMM6 | XMM6 |
ZMM7 | YMM7 | XMM7 |
ZMM8 | YMM8 | XMM8 |
ZMM9 | YMM9 | XMM9 |
ZMM10 | YMM10 | XMM10 |
ZMM11 | YMM11 | XMM11 |
ZMM12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ZMM14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ZMM16 | YMM16 | XMM16 |
ZMM17 | YMM17 | XMM17 |
ZMM18 | YMM18 | XMM18 |
ZMM19 | YMM19 | XMM19 |
ZMM20 | YMM20 | XMM20 |
ZMM21 | YMM21 | XMM21 |
ZMM22 | YMM22 | XMM22 |
ZMM23 | YMM23 | XMM23 |
ZMM24 | YMM24 | XMM24 |
ZMM25 | YMM25 | XMM25 |
ZMM26 | YMM26 | XMM26 |
ZMM27 | YMM27 | XMM27 |
ZMM28 | YMM28 | XMM28 |
ZMM29 | YMM29 | XMM29 |
ZMM30 | YMM30 | XMM30 |
ZMM31 | YMM31 | XMM31 |
Ширина файла регистров SIMD увеличена с 256 бит до 512 бит и расширена с 16 до 32 регистров ZMM0-ZMM31. Эти регистры могут быть адресованы как 256-битные регистры YMM из расширений AVX и 128-битные регистры XMM из Streaming SIMD Extensions, а устаревшие инструкции AVX и SSE могут быть расширены для работы с 16 дополнительными регистрами XMM16-XMM31 и YMM16-YMM31 при использовании формы в кодировке EVEX.
Большинство инструкций AVX-512 могут указывать один из 8 регистров opmask (k0 – k7). Для инструкций, которые используют регистр маски в качестве маски операции, регистр k0 является специальным: жестко запрограммированная константа, используемая для обозначения немаскированных операций. Для других операций, таких как те, которые записывают в регистр opmask или выполняют арифметические или логические операции, «k0» является действующим, действительным регистром. В большинстве инструкций маска операции используется для управления тем, какие значения записываются в место назначения. Флаг управляет поведением opmask, которое может быть либо «нулевым», при котором обнуляется все, что не выбрано маской, либо «merge», при котором все, что не выбрано, остается нетронутым. Поведение слияния идентично инструкциям по смешиванию.
Регистры opmask обычно имеют ширину 16 бит, но могут иметь длину до 64 бит с расширением AVX-512BW. Тем не менее, сколько бит фактически используется, зависит от типа вектора маскируемых инструкций. Для 32-битных одинарных слов с плавающей запятой или двойных слов 16 битов используются для маскировки 16 элементов в 512-битном регистре. Для двойных слов с плавающей точкой и четверных слов используется не более 8 битов маски.
Регистр opmask является причиной того, почему несколько побитовых инструкций, которые, естественно, не имеют ширины элементов, были добавлены в AVX-512. Например, побитовое И, ИЛИ или 128-битное перемешивание теперь существует как для двойного, так и для четверного слова, с единственной разницей в окончательной маскировке.
Регистры opmask имеют новое мини-расширение инструкций, действующих непосредственно на них. В отличие от остальных инструкций AVX-512, все эти инструкции закодированы в VEX. Все начальные инструкции opmask - это 16-битные (Word) версии. С AVX-512DQ были добавлены 8-битные (байтовые) версии, чтобы лучше соответствовать потребностям маскировки 8 64-битных значений, а с AVX-512BW были добавлены 32-битные (Double) и 64-битные (Quad) версии, чтобы они могли маска до 64 8-битных значений. Инструкции KORTEST и KTEST могут использоваться для установки флагов x86 на основе регистров маски, чтобы их можно было использовать вместе с ветвлениями x86, отличными от SIMD, и условными инструкциями.
Команда | Набор расширений | Описание |
---|---|---|
KAND | F | Поразрядное логическое И Маски |
KANDN | F | Поразрядное логическое И НЕ Маски |
KMOV | F | Перемещение из и в регистры маски или регистры общего назначения |
KUNPCK | F | Распаковка для регистров маски |
KNOT | F | NOT Mask Register |
KOR | F | Побитовое логическое ИЛИ Маски |
KORTEST | F | ИЛИ маски И установите флаги |
KSHIFTL | F | Регистры маски сдвига влево |
KSHIFTR | F | Регистры маски сдвига вправо |
KXNOR | F | Побитовые логические маски XNOR |
KXOR | F | Побитовые логические маски XOR |
KADD | BW / DQ | Добавить две маски |
KTEST | BW / DQ | Побитовое сравнение и установить флаги |
Многие инструкции AVX-512 - это просто EVEX-версии старых инструкций SSE или AVX. Однако есть несколько новых инструкций и старые инструкции, которые были заменены новыми версиями AVX-512. Новые или существенно переработанные инструкции перечислены ниже. Эти базовые инструкции также включают расширения от AVX-512VL и AVX-512BW, поскольку эти расширения просто добавляют новые версии этих инструкций вместо новых инструкций.
Нет версий инструкций смешивания с префиксом EVEX из SSE4 ; вместо этого AVX-512 имеет новый набор инструкций смешивания, использующих регистры маски в качестве селекторов. Вместе с общими инструкциями сравнения с маской, приведенными ниже, они могут использоваться для реализации общих тернарных операций или cmov, подобных VPCMOV XOP.
Поскольку смешивание является неотъемлемой частью кодирования EVEX, эти инструкции также могут считаться базовыми командами перемещения. Используя режим наложения обнуления, их также можно использовать в качестве инструкций по маскированию.
Инструкция | Набор расширений | Описание |
---|---|---|
VBLENDMPD | F | Смешивание векторов float64 с помощью управления opmask |
VBLENDMPS | F | Смешивание векторов float32 с помощью управления opmask |
VPBLENDMD | F | Смешивание векторов int32 с использованием управления opmask |
VPBLENDMQ | F | Смешивание векторов int64 с использованием управления opmask |
VPBLENDMB | BW | Смешивание векторов байтовых целочисленных значений с использованием управления opmask |
VPBLENDMW | BW | Смешать целочисленные векторы слов с помощью управления opmask |
AVX-512F имеет четыре новых инструкции сравнения. Как и их аналоги XOP, они используют непосредственное поле для выбора между 8 различными сравнениями. Однако, в отличие от своих идей XOP, они сохраняют результат в регистре маски и изначально поддерживают только сравнения двойных и четверных слов. Расширение AVX-512BW предоставляет версии в байтах и словах. Обратите внимание, что для инструкций могут быть указаны два регистра маски: один для записи, а другой для объявления регулярного маскирования.
Немедленное | Сравнение | Описание |
---|---|---|
0 | EQ | Равно |
1 | LT | Меньше |
2 | LE | Меньше или равно |
3 | FALSE | Обнулить |
4 | NEQ | Не равно |
5 | NLT | Больше или равно |
6 | NLE | Больше |
7 | ИСТИНА | Установить на единицу |
Инструкция | Набор расширений | Описание |
---|---|---|
VPCMPD
| F | Сравнить подписанные / беззнаковые двойные слова с маской |
VPCMPQ
| F | Сравнить подписанные / беззнаковые четверные слова с маской |
VPCMPB
| BW | Сравнить подписанные / неподписанные байты в маске |
VPCMPW
| BW | Сравнить подписанные / неподписанные слова в маске |
Последний способ установки масок - использование маски логического набора. Эти инструкции выполняют либо И, либо И НЕ, а затем устанавливают целевую операционную маску на основе значений результата, равных нулю или отличных от нуля. Обратите внимание, что, как и инструкции сравнения, они принимают два регистра opmask, один в качестве назначения, а другой - в качестве обычной маски opmask.
Инструкция | Набор расширений | Описание |
---|---|---|
VPTESTMD , VPTESTMQ | F | Логическое И и установка маски для 32- или 64-битных целых чисел. |
VPTESTNMD , VPTESTNMQ | F | Логическая И-НЕ и установка маски для 32- или 64-битных целых чисел. |
VPTESTMB , VPTESTMW | BW | Логическое И и установка маски для 8- или 16-битных целых чисел. |
VPTESTNMB , VPTESTNMW | BW | Логическая И-НЕ и установка маски для 8- или 16-битных целых чисел. |
Инструкции сжатия и раскрытия соответствуют одноименным операциям APL. Они используют операционную маску немного иначе, чем другие инструкции AVX-512. Сжатие сохраняет только значения, отмеченные в маске, но сохраняет их сжатыми, пропуская и не резервируя место для немаркированных значений. Expand работает противоположным образом, загружая столько значений, сколько указано в маске, а затем распределяя их по выбранным позициям.
Инструкция | Описание |
---|---|
VCOMPRESSPD ,
| Сохранение разреженных упакованных значений с плавающей запятой двойной / одинарной точности в плотной памяти |
VPCOMPRESSD ,
| Сохранение разреженных упакованные целочисленные значения двойного / четверного слова в плотную память / регистр |
VEXPANDPD ,
| Загрузка разреженных упакованных значений с плавающей запятой двойной / одинарной точности из плотной памяти |
VPEXPANDD ,
| Загрузка разреженной упакованные целочисленные значения двойного / четверного слова из плотной памяти / регистра |
Новый набор был добавлен для полных двух входных перестановок. Все они принимают три аргумента, два исходных регистра и один индекс; результат выводится путем перезаписи первого исходного регистра или индексного регистра. AVX-512BW расширяет инструкции, включая также 16-битные (словесные) версии, а расширение AVX-512_VBMI определяет байтовые версии инструкций.
Команда | Набор расширений | Описание |
---|---|---|
VPERMB | VBMI | Перестановка упакованных байтовых элементов. |
VPERMW | BW | Перестановка элементов упакованных слов. |
VPERMT2B | VBMI | Перестановка полного байта, перезапись первого источника. |
VPERMT2W | BW | Полная перестановка слов перезаписывает первый источник. |
VPERMI2PD , VPERMI2PS | F | Полная перестановка с одинарной / двойной плавающей запятой, перезапись индекса. |
VPERMI2D , VPERMI2Q | F | Полная перестановка двойного / четверного слова с перезаписью индекса. |
VPERMI2B | VBMI | Переключение полного байта поверх индекса. |
VPERMI2W | BW | Полная перестановка слов с перезаписью индекса. |
VPERMT2PS , VPERMT2PD | F | Полная перестановка с одинарной / двойной плавающей запятой, перезапись первого источника. |
VPERMT2D , VPERMT2Q | F | Полная перестановка двойного / четверного слова с перезаписью первого источника. |
VSHUFF32x4 , VSHUFF64x2 ,
| F | Перемешать четыре упакованных 128-битных строки. |
VPMULTISHIFTQB | VBMI | Выбрать упакованные невыровненные байты из источников четырех слов. |
Добавленные две новые инструкции могут логически реализовать все возможные побитовые операции между тремя входами. В качестве входных данных они принимают три регистра и 8-битное поле непосредственного ввода. Каждый бит на выходе генерируется с помощью поиска трех соответствующих битов на входах для выбора одной из 8 позиций в 8-битном немедленном. Поскольку с использованием трех битов возможны только 8 комбинаций, это позволяет выполнять все возможные 3 входные побитовые операции. Это единственные побитовые векторные инструкции в AVX-512F; Версии EVEX двух исходных команд побитовых векторов SSE и AVX AND, ANDN, OR и XOR были добавлены в AVX-512DQ.
Разница в версиях двойного слова и четверного слова заключается только в применении opmask.
Инструкция | Описание |
---|---|
VPTERNLOGD , VPTERNLOGQ | Побитовая троичная логика |
A0 | A1 | A2 | Двойное И (0x80) | Двойное ИЛИ (0xFE) | Побитовое смешение (0xCA) |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 1 | 1 |
Число преобразований или добавлены инструкции по перемещению; они завершают набор инструкций по преобразованию, доступных в SSE2.
Команда | Набор расширений | Описание |
---|---|---|
| F | Преобразование четверного слова или двойного слова в двойное слово, слово или байт; ненасыщенный, насыщенный или насыщенный без знака. Обратный знак / ноль расширяет инструкции из SSE4.1. |
VPMOVWB , VPMOVSWB , VPMOVUSWB | BW | преобразовать слово с понижением в байт; ненасыщенный, насыщенный или насыщенный без знака. |
VCVTPS2UDQ , VCVTPD2UDQ ,
| F | Преобразование с усечением или без усечения упакованных чисел с плавающей запятой одинарной или двойной точности в упакованные целые числа без знака с двойным словом. |
VCVTSS2USI , VCVTSD2USI ,
| F | Преобразование со скалярной одинарной или двойной точностью с плавающей запятой в беззнаковое целое двойное слово с усечением или без него. |
VCVTPS2QQ , VCVTPD2QQ ,
| Преобразование с усечением или без него упакованных чисел с плавающей запятой одинарной или двойной точности в упакованные целые числа со знаком или без знака. | |
VCVTUDQ2PS , VCVTUDQ2PD | F | Преобразование упакованных целых чисел с двойным словом без знака в упакованные числа с плавающей запятой одинарной или двойной точности. |
VCVTUSI2PS , VCVTUSI2PD | F | Преобразование скалярных целых чисел с двойным словом без знака в числа с плавающей запятой одинарной или двойной точности. |
VCVTUSI2SD , VCVTUSI2SS | F | Преобразование скалярных целых чисел без знака в числа с плавающей запятой одинарной или двойной точности. |
VCVTUQQ2PS , VCVTUQQ2PD | DQ | Преобразование упакованных целых четверных слов без знака в упакованные числа с плавающей запятой одинарной или двойной точности. |
VCVTQQ2PD , VCVTQQ2PS | F | Преобразование упакованных четверных целых чисел в упакованные числа с плавающей запятой одинарной или двойной точности. |
Среди уникальных новых функций в AVX-512F - инструкции для декомпозиции значений с плавающей запятой и обработки специальных значений с плавающей запятой. Поскольку эти методы совершенно новые, они также существуют в скалярных версиях.
Инструкция | Описание | |
---|---|---|
VGETEXPPD , VGETEXPPS | Преобразование экспонент упакованных значений fp в значения fp | |
VGETEXPSD , VGETEXPSS | Преобразовать показатель скалярного значения fp в значение fp | |
VGETMANTPD , VGETMANTPS | Извлечь вектор нормализованных мантисс из вектора float32 / float64 | |
VGETMANTSD , VGETMANTSS | Извлечь float32 / float64 нормализованной мантиссы из скаляра float32 / float64 | |
VFIXUPIMMPD , VFIXUPIMMPS | Исправить специальные упакованные значения float32 / float64 <366MSD VFIXUPIMD, VFIXUPIMMSS | Исправить специальное скалярное значение float32 / float64 |
Это второй набор новых методов с плавающей запятой, который включает новое масштабирование и приближенное вычисление обратной и обратной величины квадратного корня. Приблизительные обратные инструкции гарантируют относительную ошибку не более 2.
Инструкция | Описание |
---|---|
VRCP14PD , VRCP14PS | Вычисление приблизительных обратных величин упакованных значений float32 / float64 |
VRCP14SD , VRCP14SS | Вычисление приблизительных обратных величин скалярного значения float32 / float64 |
VRNDSCALEPS , VRNDSCALEPD | Округление упакованных значений float32 / float64 для включения заданного числа дробных битов |
VRNDSCALESS , VRNDSCALESD | Круглое скалярное значение float32 / float64 для включения заданного количества дробных битов |
VRSQRT14PD , VRSQRT14PS | Вычислить приблизительные обратные числа из квадратных корней упакованных значений float32 / float64 |
VRSQRT14SD , VRSQRT14SS | Вычислить приблизительную обратную величину квадратного корня из скалярного значения float32 / float64 |
VSCALEFPS , VSCALEFPD | Масштабировать упакованные значения float32 / float64 со значениями float32 / float64 |
VSCALEFSS , VSCALEFSD | Масштабировать скалярное значение float32 / float64 w со значением float32 / float64 |
Инструкция | Набор расширений | Описание |
---|---|---|
VBROADCASTSS , VBROADCASTSD | F, VL | Широковещательная передача одинарного / двойного значения с плавающей запятой |
VPBROADCASTB , VPBROADCASTW , VPBROADCASTD , VPBROADCASTQ | F, VL, DQ, BW | Broadcast байт / слово / двойное слово / четырехслово целочисленное значение |
VBROADCASTI32X2 ,VBROADCASTI64X2 , VBROADCASTI32X4 ,VBROADCASTI32X8 <128 , VBROADCASTI32X8 , VBROADCASTI32X8 , VBROADCASTI64X4 |
Инструкция | Набор расширений | Описание |
---|---|---|
VALIGND , VALIGNQ | F, VL | Выровнять векторы двойных или четверных слов |
VDBPSADBW | BW | Двойная блочная упакованная абсолютная сумма-разность (SAD) в байтах без знака |
VPABSQ | F | Упакованное квадраслово абсолютного значения |
VPMAXSQ , VPMAXUQ | F | Максимум упакованного четвертого слова со знаком / без знака |
VPMINSQ , VPMINUQ | F | Минимум упакованных четырехслово со знаком / без знака |
VPROLD , VPROLVD ,VPROLQ , VPROLVQ ,VPRORD , VPRORVD ,VPRORQ , VPRORVQ | F | Поворот битов влево или вправо |
VPSCATTERDD , VPSCATTERDQ ,VPSCATTERQD , VPSCATTERQQ | F | Двойное слово / четырехслово с разбросом и двойное слово со знаком и индексы четверного слова |
VSCATTERDPS , VSCATTERDPD ,VSCATTERQPS , VSCATTERQPD | F | Scatter упакованный float32 / float64 с индексами двойного слова и четвертого слова со знаком |
Инструкции в обнаружении конфликтов AVX-512 (AVX-512CD) предназначены для помощи в эффективном вычислении бесконфликтных подмножеств элементов в циклах, которые обычно невозможно безопасно векторизовать.
Инструкция | Имя | Описание |
---|---|---|
VPCONFLICTD , VPCONFLICTQ | Обнаружение конфликтов в векторе упакованных значений двойных или четверных слов. | Сравнивает каждый элемент в первом источнике со всеми элементами на том же или более раннем месте во втором источнике и формирует битовый вектор результатов. |
VPLZCNTD , VPLZCNTQ | Подсчитать количество начальных нулевых битов для упакованных значений двойного или четверного слова. | Векторизованная инструкция LZCNT . |
VPBROADCASTMB2Q , VPBROADCASTMW2D | Маска широковещательной передачи в векторный регистр. | Либо 8-битная маска для вектора четверного слова, либо 16-битная маска для вектора двойного слова. |
Экспоненциальные и обратные инструкции AVX-512 содержат более точные приблизительные обратные инструкции, чем те, что в основе AVX-512; относительная ошибка не более 2. Они также содержат две новые экспоненциальные функции с относительной ошибкой не более 2.
Инструкция | Описание |
---|---|
VEXP2PD , VEXP2PS | Вычисление приблизительной экспоненты 2 ^ x упакованных значений с плавающей запятой одинарной или двойной точности |
VRCP28PD , VRCP28PS | Вычисление приблизительных обратных величин упакованных значений с плавающей запятой одинарной или двойной точности |
VRCP28SD , VRCP28SS | Вычислить приблизительное обратное значение скалярного значения с плавающей запятой одинарной или двойной точности |
VRSQRT28PD , VRSQRT28PS | Вычислить приблизительное обратное значение квадратных корней упакованных одинарной или двойной точности значения с плавающей запятой |
VRSQRT28SD , VRSQRT28SS | Вычислить приблизительную обратную величину квадратного корня из скалярного значения с плавающей запятой одиночной или двойной точности |
Инструкции предварительной выборки AVX-512 содержат новые операции предварительной выборки для новых функций разброса и сбора, представленных в AVX2 и AVX-512. T0
предварительная выборка означает предварительную выборку в кэш уровня 1, а T1
означает предварительную выборку в кэш уровня 2.
Инструкция | Описание |
---|---|
VGATHERPF0DPS , VGATHERPF0QPS , VGATHERPF0DPD , VGATHERPF0QPD | Использование индексов префикса двойного слова / слова со знаком разреженные байтовые ячейки памяти, содержащие данные с одинарной / двойной точностью, с использованием opmask k1 и подсказки T0. |
VGATHERPF1DPS , VGATHERPF1QPS , VGATHERPF1DPD , VGATHERPF1QPD | Используя индексы точности dword / qword со знаком, предварительная выборка ячеек памяти с разреженным / двойным байтом используя opmask k1 и подсказку T1. |
VSCATTERPF0DPS , VSCATTERPF0QPS , VSCATTERPF0DPD , VSCATTERPF0QPD | Используя индексы точности dword / qword со знаком, предварительная выборка ячеек памяти с разреженными байтами, содержащих одинарные / двойные байты используя маску записи k1 и подсказку T0 с намерением писать. |
VSCATTERPF1DPS , VSCATTERPF1QPS , VSCATTERPF1DPD , VSCATTERPF1QPD | Используя индексы dword / qword со знаком, предварительная выборка данных с разреженными байтами, содержащими одинарные / двойные байтовые ячейки памяти маска записи k1 и подсказка T1 о намерении писать. |
Инструкция | Набор расширений | Описание |
---|---|---|
V4FMADDPS , V4FMADDSS | 4FMAPS | Packed / scalar объединенное умножение с плавающей запятой одинарной точности (4 итерации) |
V4FNMADDPS , V4FNMADDSS | 4FMAPS | Упакованное / скалярное объединенное умножение с плавающей запятой одинарной точности, объединенное сложение и отрицание (4 итерации) |
VP4DPWSSD | 4VNNIW | Точечное произведение слов со знаком с накоплением двойных слов (4 итерации) |
VP4DPWSSDS | 4VNNIW | Точечное произведение слова со знаком с накоплением и насыщением двойных слов (4 итерации) |
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
и KUNPCKDQ
с помощью AVX-512BW.
Среди инструкций, добавленных AVX-512DQ, есть несколько инструкций SSE, AVX, которые не получили версии AVX-512 с AVX-512F, среди них все две входные побитовые инструкции и целочисленные инструкции извлечения / вставки.
Совершенно новые инструкции описаны ниже.
Введены три новые операции с плавающей запятой. Поскольку они не только новы для AVX-512, у них есть как упакованные / SIMD, так и скалярные версии.
Инструкции VFPCLASS
проверяют, является ли значение с плавающей запятой одним из восьми специальных значений с плавающей запятой, какое из восьми значений будет запускать бит в регистре выходной маски. поле. Инструкции VRANGE
выполняют минимальные или максимальные операции в зависимости от значения непосредственного поля, которое также может контролировать, выполняется ли операция абсолютным или нет, и отдельно, как обрабатывается знак. Инструкции VREDUCE
работают с одним источником и вычитают из него целую часть исходного значения плюс количество битов, указанных в непосредственном поле его дроби.
Команда | Набор расширений | Описание |
---|---|---|
VFPCLASSPS , VFPCLASSPD | DQ | Типы тестирования упакованных плавающих чисел одинарной и двойной точности балльные значения. |
VFPCLASSSS , VFPCLASSSD | DQ | Типы проверки скалярных значений с плавающей запятой одинарной и двойной точности. |
VRANGEPS , VRANGEPD | DQ | Расчет ограничения диапазона для упакованных значений с плавающей запятой. |
VRANGESS , VRANGESD | DQ | Расчет ограничения диапазона для скалярных значений с плавающей запятой. |
VREDUCEPS , VREDUCEPD | DQ | Выполняет преобразование сокращения для упакованных значений с плавающей запятой. |
VREDUCESS , VREDUCESD | DQ | Выполняет преобразование сокращения для скалярных значений с плавающей запятой. |
Команда | Набор расширений | Описание |
---|---|---|
VPMOVM2D , VPMOVM2Q | DQ | Преобразование регистра маски в векторный регистр двойного или четверного слова. |
VPMOVM2B , VPMOVM2W | BW | Преобразование регистра маски в регистр вектора байта или слова. |
VPMOVD2M , VPMOVQ2M | DQ | Преобразование двух- или четырехсловного векторного регистра в регистр маски. |
VPMOVB2M , VPMOVW2M | BW | Преобразует регистр вектора байта или слова в регистр маски. |
VPMULLQ | DQ | Умноженное упакованное четверное слово сохраняет результат с низким значением. Версия VPMULLD, состоящая из четырех слов. |
Расширьте VPCOMPRESS и VPEXPAND вариантами байтов и слов. Инструкции по смене новые.
Инструкция | Описание |
---|---|
VPCOMPRESSB , VPCOMPRESSW | Сохранение разреженных упакованных целочисленных значений байтов / слов в плотную память / регистр |
VPEXPANDB , VPEXPANDW | Загрузка разреженных упакованных целочисленных значений байтов / слов из плотной памяти / регистра |
VPSHLD | Объединение и сдвиг упакованных данных влево логический |
VPSHLDV | Объединение и переменный сдвиг упакованных данных влево влево |
VPSHRD | Объединение и сдвиг упакованных данных вправо логическое |
VPSHRDV | Объединение и переменный сдвиг упакованных данных вправо логическое |
Команды векторной нейронной сети.
Инструкция | Описание |
---|---|
VPDPBUSD | Умножение и сложение байтов без знака и со знаком |
VPDPBUSDS | Умножение и сложение байтов без знака и со знаком с насыщением |
VPDPWSSD | Умножение и сложение целых слов со знаком |
VPDPWSSDS | Умножение и сложение целых слов с насыщением |
Инструкция | Набор расширений | Описание |
---|---|---|
VPMADD52LUQ | IFMA | Упакованное умножение 52-битных целых чисел без знака и сложение младших 52-битных произведений в аккумуляторы qword |
VPMADD52HUQ | IFMA | Упакованное умножение 52-битных целых чисел без знака и сложение старших 52-битные продукты для 64-битных аккумуляторов |
Инструкция | Набор расширений | Описание |
---|---|---|
VPOPCNTD , VPOPCNTQ | VPOPCNTDQ | Возвращает количество битов, установленных на 1 в двойном слове / четвертом слове |
VPOPCNTB , VPOPCNTW | BITALG | Возвращает количество битов, установленных на 1 в байтах / word |
VPSHUFBITQMB | BITALG | Перемешать биты из qu элементы adword, использующие байтовые индексы в маске |
Инструкция | Набор расширений | Описание |
---|---|---|
VP2INTERSECTD , VP2INTERSECTQ | VP2INTERSECT | Вычислить пересечение двойных / четверных слов с парой регистров маски |
EVEX-кодированные поле Галуа новые инструкции:
Инструкция | Описание |
---|---|
VGF2P8AFFINEINVQB | Аффинное преобразование поля Галуа, обратное |
VGF2P8AFFINEQB | Аффинное преобразование поля Галуа |
VGF2P8MULB | Поле Галуа, умноженное на байты |
Команда | Описание |
---|---|
VPCLMULQDQ | Квадраслово умножения без переноса |
Инструкции AES с кодировкой VEX и EVEX. Более широкие, чем 128-битные варианты инструкции, выполняют одну и ту же операцию с каждой 128-битной частью входных регистров. Версии VEX можно использовать без поддержки AVX-512.
Инструкция | Описание |
---|---|
VAESDEC | Выполнение одного раунда потока дешифрования AES |
VAESDECLAST | Выполнение последнего цикла потока дешифрования AES |
VAESENC | Выполнение одного цикл потока шифрования AES |
VAESENCLAST | Выполнить последний цикл потока шифрования AES |
инструкции ускорения AI, работающие в формате Bfloat16.
Инструкция | Описание |
---|---|
VCVTNE2PS2BF16 | Преобразование двух упакованных чисел одинарной точности в одно упакованное число Bfloat16 |
VCVTNEPS2BF16 | Преобразование одного упакованного числа одинарной точности в одно упакованное число Bfloat16 |
VDPBF16PS | Вычислить скалярное произведение двух пар Bfloat16 и собрать результат в одно упакованное число с одинарной точностью |
Устаревшее кодирование | Группа | Инструкции | AVX-512 расширения | ||
---|---|---|---|---|---|
SSE SSE2 MMX | AVX SSE3 SSE4.1 | AVX2 FMA | |||
Да | Да | Нет | VADD | VADDPD , VADDPS , VADDSD , VADDSS | F, VL |
VAND | VANDPD , VANDPS , VANDNPD , VANDNPS | VL, DQ | |||
VCMP | VCMPPD , VCMPPS , VCMPSD , VCMPSS | F | |||
VCOM | VCOMISD , VCOMISS | F | |||
VDIV | VDIVPD , VDIVPS , VDIVSD , V DIVSS | F, VL | |||
VCVT | VCVTDQ2PD , VCVTDQ2PS , VCVTPD2DQ , VCVTPD2PS ,
| FCVTTSS2SI | F 675>VMAXPD, VMAXPS , VMAXSD , VMAXSS | F, VL | |
VMIN | VMINPD , VMINPS , VMINSD , VMINSS | F | |||
VMOV | VMOVAPD , VMOVAPS , VMOVD , VMOVQ ,
| F, VL, BW | |||
VMUL | VMULPD , VMULPS , VMULSD , VMULSS | F, VL | |||
VOR | VORPD , VORPS | VL, DQ | |||
VSQRTP | VSQRTPD , VSQRTPS , VSQRTSD , VSQRTSS | F, VL | |||
VSUB | VSUBPD , VSUBPS , VSUBSD , VSUBSS | F, VL | |||
VUCOMI | VUCOMISD , VUCOMISS | F | |||
VUNPCK | VUNPCKHPD , VUNPCKHPS , VUNPCKLPD , VUNPCKLPS | F, VL | |||
VXOR | VXORPD , VXORPS | VL, DQ | |||
Нет | Да | Нет | VEXTRACTPS | VEXTRACTPS | F |
VINSERTPS | VINSERTPS | F | |||
VPALIGNR | VPALIGNR | VL, BW | |||
VPEXTR | VPEXTRB , VPEXTRW , VPEXTRD , VPEXTRQ | BW, DQ | |||
VPINSR | VPINSRB , VPINSRW , VPINSRD , VPINSRQ | BW, DQ | |||
Да | Да | Да | VPACK | VPACKSSWB , VPACKSSDW , VPACKUSDW , VPACKUSWB | VL, BW |
VPADD | VPADDB , VPADDW , VPADDD , VPADDQ ,
| F, VL, BW | |||
VPAND | VPANDD , VPANDQ , VPANDND , VPANDNQ | F, VL | |||
VPAVG | VPAVGB , VPAVGW | VL, BW | |||
VPCMPEQ | VPCMPEQB , VPCMPEQW , VPCMPEQD , VPCMPEQQ | F, VL, BW | |||
VPCMPGT | VPCMPGTB , VPCMPGTW , VPCMPGTD , VPCMPGTQ | F, VL, BW | |||
VPMAX | VPMAXSB , VPMAXSW , VPMAXSD , VPMAXSQ , VPMAXUB , VPMAXUW , VPMAXUD , VPMAXUQ | F, VL, BW | |||
VPMIN | VPMINSB , VPMINSW , VPMINSD , VPMINSQ , VPMINUB , VPMINUW , VPMINUD , VPMINUQ | F, VL, BW | |||
VPMOV | VPMOVSXBW , VPMOVSXBD , VPMOVSXBQ , VPMOVSXWD , VPMOVSXWQ , VP MOVSXDQ ,
| ||||
VPMUL | VPMULDQ , VPMULUDQ , VPMULHRSW , VPMULHUW , VPMULHW , VPMULLD , VPMULLQ , VPMULLW | F, VL, BW | |||
VPOR | VPORD , VPORQ | F, VL | |||
VPSUB | VPSUBB , VPSUBW , VPSUBD , VPSUBQ , VPSUBSB , VPSUBSW , VPSUBUSB , VPSUBUSW | F, VL, BW | |||
VPUNPCK | VPUNPCKHBW , VPUNPCKHWD , VPUNPCKHDQ , VPUNPCKHQDQ ,
| F, VL, BW | |||
VPXOR | VPXORD 150>VPXORQ | F, VL | |||
VPSADBW | VPSADBW | VL, BW | |||
VPSHUF | VPSHUFB , VPSHUFHW , VPSHUFLW , VPSHUFD ,
| F, VL, BW | |||
Нет | Да | Да | VEXTRACT | VEXTRACTF32X4 , VEXTRACTF64X2 , VEXTRACTF32X8 , VEXTRACTF64X4 ,
| F, VL, DQ |
VINSERT | VINSERTF32x4 , VINSERTF64X2 >VPABS | VPABSB , VPABSW , VPABSD , VPABSQ | F, VL, BW | ||
VPERM | VPERMD , VPERMILPD , VPERMILPS , VPERMPD , VPERMPS , VPERMQ | F, VL | |||
VPMADD | VPMADDUBSW VPMADDWD | VL, BW | |||
Нет | Нет | Да | VFMADD | VFMADD132PD , VFMADD213PD , VFMADD231PD ,
| F, VL |
VFMADDS>VFMADDS>VFMADDS>, VFMADDSUB213PD , VFMADDSUB231PD ,
| F, VLADD132D>VLADSUB231PS. , VFMSUBADD213PD , VFMSUBADD231PD ,
| F, VLMS <525832>VLMS <525832>VLMSUBADD231PS , VFMSUB213PD , VFMSUB231PD ,
| F, VL | ||
VFNMADD | VFNMADD132PD , <1AD12D>VF13PD, <1AD12D>VF13PD 150>VFNMADD231PD,
| ||||
VFNMSUB | VFNMSUB132PD , VFNMSUB213PD , VFNMSUB231PD ,
| F, VL <5HER25>VGATHER>VGATHER>, VGATHERDPD , VGATHERQPS , VGATHERQPD | F, VL | ||
VPGATHER | VPGATHERDD , VPGATHERDQ , VPGATHERQD , VPGATHERQQ | F, VL | |||
VPSRAV | VPSRAVW , VPSRAVD , VPSRAVQ | F, VL, BW |
Подмножество AVX-512 | F | CD | ER | PF | 4FMAPS | 4VNNIW | VPOPCNTDQ | VL | DQ | BW | IFMA | VBMI | VNNI | BF16 | VBMI2 | BITALG | VPCLMULQDQ | GFNI | VAES | VP2INTERSECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Процессоры Knights Landing (Xeon Phi x200) (2016) | Да | Да | Нет | |||||||||||||||||
Процессоры Knights Mill (Xeon Phi x205) (2017) | Да | Да | Нет | |||||||||||||||||
Процессоры Skylake-SP, Skylake-X (2017) | Нет | Нет | Нет | Да | Нет | |||||||||||||||
Процессоры Cannon Lake (2018) | Да | Нет | ||||||||||||||||||
Каскад Процессоры Lake (2019) | Нет | Да | Нет | |||||||||||||||||
Процессоры Cooper Lake (2020) | Да | Нет | ||||||||||||||||||
Процессоры Ice Lake (2019) | Да | Да | Нет | Да | Нет | |||||||||||||||
Процессоры Tiger Lake (2020) | Да |
QEMU поддерживает эмуляцию AVX-512 в своей TCG.
Советник Intel "Vectorization" (начиная с версии 2016 Update 3) поддерживает собственный анализ производительности AVX-512 и качества векторного кода для Intel Xeon Phi 2-го поколения ( под кодовым названием Knights Landing ) процессор. Наряду с традиционным профилем горячих точек, рекомендациями консультантов и «бесшовной» интеграцией диагностики векторизации Intel Compiler, анализ Advisor Survey также предоставляет метрики AVX-512 ISA и новые специфичные для AVX-512 «характеристики», например Разброс, сжатие / расширение, использование маски.
AVX-512 вызывает дросселирование частоты даже больше, чем его предшественники, вызывая штраф для смешанных рабочих нагрузок. Дополнительное понижение частоты запускается 512-битной шириной векторов, и использование 256-битной части AVX-512 (AVX-512VL) не запускает его. В результате gcc и clang по умолчанию предпочитают использовать 256-битные векторы.