Jump to content

Набор инструкций XOP

XOP операции ( расширенные [1] 1 Набор инструкций , анонсированный компанией AMD мая 2009 года, представляет собой расширение 128-битных инструкций ядра SSE в наборе инструкций x86 и AMD64 для ядра процессора Bulldozer , который был выпущен 12 октября 2011 года. [2] Однако AMD удалила поддержку XOP из Zen (микроархитектуры) . [3]

Набор инструкций XOP содержит несколько различных типов векторных инструкций, поскольку изначально он задумывался как серьезное обновление SSE . Большинство инструкций являются целочисленными, но они также содержат инструкции по перестановке с плавающей запятой и извлечению дробей с плавающей запятой. См. указатель списка типов инструкций.

XOP — это переработанное подмножество того, что изначально задумывалось как SSE5 . Он был изменен, чтобы быть похожим, но не пересекающимся с AVX , части, которые перекрывались с AVX, были удалены или перенесены в отдельные стандарты, такие как FMA4 векторов с плавающей запятой ( умножение-накопление ) и CVT16 ( преобразование с плавающей запятой половинной точности , реализованное как F16C с помощью Интел ). [1]

Все инструкции SSE5, которые были эквивалентны или похожи на инструкции в наборах инструкций AVX и FMA4 , анонсированных Intel, были изменены для использования кодировки, предложенной Intel. Целочисленные инструкции, не имеющие эквивалентов в AVX, были классифицированы как расширение XOP. [1] Инструкции XOP имеют байт кода операции 8F ( шестнадцатеричный ), но в остальном схема кодирования почти идентична AVX с 3-байтовым префиксом VEX.

Комментаторы [4] сочли это свидетельством того, что Intel не позволила AMD использовать какую-либо часть большого пространства кодирования VEX. AMD была вынуждена использовать разные коды, чтобы избежать использования какой-либо комбинации кодов, которую Intel могла бы использовать в своем конвейере разработки для чего-то другого. Схема кодирования XOP максимально приближена к схеме VEX с технической точки зрения без риска совпадения кодов AMD с будущими кодами Intel. Этот вывод является спекулятивным, поскольку публичной информации о переговорах между двумя компаниями по этому вопросу нет.

Использование байта 8F требует, чтобы m-биты (см. схему кодирования VEX ) имели значение больше или равное 8, чтобы избежать перекрытия с существующими инструкциями. [Примечание 1] Байт C4, используемый в схеме VEX, не имеет такого ограничения. Это может помешать использованию m-битов для других целей в будущем в схеме XOP, но не в схеме VEX. Другая возможная проблема заключается в том, что биты pp имеют значение 00 в схеме XOP, тогда как в схеме VEX они имеют значение 01 для инструкций, не имеющих устаревшего эквивалента. Это может затруднить использование битов pp для других целей в будущем.

Аналогичная проблема совместимости — разница между наборами инструкций FMA3 и FMA4 . Первоначально Intel предложила FMA4 в версии 3 спецификации AVX/FMA, чтобы заменить FMA с 3 операндами, предложенный AMD в SSE5. После того как AMD приняла FMA4, Intel отменила поддержку FMA4 и вернулась к FMA3 в спецификации AVX/FMA версии 5 (см. историю FMA ). [1] [5] [6]

В марте 2015 года AMD прямо сообщила в описании патча для пакета GNU Binutils, что Zen , ее архитектура x86-64 третьего поколения в первой итерации (znver1 — Zen, версия 1), не будет поддерживать TBM, FMA4, XOP и LWP инструкции, разработанные специально для семейства микроархитектур «Бульдозер». [7] [8]

Инструкции целочисленного векторного умножения-накопления

[ редактировать ]

Это целочисленная версия набора инструкций FMA . Все эти инструкции с четырьмя операндами аналогичны FMA4 , и все они работают с целыми числами со знаком.

Инструкция Описание [9] Операция
VPMACSWW, VPMACSSWWУмножение-накопление (с насыщением) слово в слово 2х8 слов ( а0-а7 , b0-b7 ) + 8 слов ( c0-c7 ) → 8 слов ( р0-р7 )

г0 = а0 * b0 + с0 , r1 = a1 * b1 + c1 , ..

VPMACSWD, VPMACSSWDУмножение накопления (с насыщением) от младшего слова к двойному слову 2х8 слов ( а0-а7 , b0-b7 ) + 4 двойных слова ( c0-c3 ) → 4 двойных слова ( р0-р3 )

г0 = а0 * b0 + с0 , r1 = a2 * b2 + c1 , . [2]

VPMACSDD, VPMACSSDDУмножение и накопление (с насыщением) двойного слова в двойное слово 2х4 двойных слова ( а0-а3 , b0-b3 ) + 4 двойных слова ( c0-c3 ) → 4 двойных слова ( р0-р3 )

г0 = а0 * b0 + с0 , r1 = a1 * b1 + c1 , ..

VPMACSDQL, VPMACSSDQLУмножение накопления (с насыщением) низкого двойного слова в четверное слово 2х4 двойных слова ( а0-а3 , b0-b3 ) + 2 четверных слова ( c0-c1 ) → 2 четверных слова ( р0-р3 )

г0 = а0 * b0 + с0 , r1 = a2 * b2 + c1

VPMACSDQH, VPMACSSDQHУмножить накопление (с насыщением) высокого двойного слова в четверное слово 2х4 двойных слова ( а0-а3 , b0-b3 ) + 2 четверных слова ( c0-c1 ) → 2 четверных слова ( р0-р3 )

г0 = а1 * b1 + с0 , r1 = a3 * b3 + c1

VPMADCSWD, VPMADCSSWDУмножение, добавление накопления (с насыщением) слова в двойное слово 2х8 слов ( а0-а7 , b0-b7 ) + 4 двойных слова ( c0-c3 ) → 4 двойных слова ( р0-р3 )

r0 = a0 * b0 + a1 * b1 + c0 , r1 = а2 * b2 + а3*b3+c1 , ..

Целочисленное векторное горизонтальное сложение

[ редактировать ]

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

Инструкция Описание [9] Операция
VPHADDBW, VPHADDUBWГоризонтально добавить в слово два байта со знаком/без знака 16 байт ( а0-а15 ) → 8 слов ( р0-р7 )

г0 = а0+а1 , г1 = а2+а3 , г2 = а4+а5 , ...

VPHADDBD, VPHADDUBDПо горизонтали добавляет четыре байта со знаком/без знака в двойное слово. 16 байт ( a0-a15 ) → 4 двойных слова ( р0-р3 )

г0 = а0+а1+а2+а3 , r1 = a4+a5+a6+a7 , ...

VPHADDBQ, VPHADDUBQГоризонтальное добавление восьми байтов со знаком/без знака в четверное слово. 16 байт ( a0-a15 ) → 2 четверных слова ( р0-р1 )

r0 = a0+a1+a2+a3+a4+a5+a6+a7 , ...

VPHADDWD, VPHADDUWDПо горизонтали добавить два слова со знаком/без знака в двойное слово 8 слов ( a0-a7 ) → 4 doublewords ( р0-р3 )

г0 = а0+а1 , г1 = а2+а3 , г2 = а4+а5 , ...

VPHADDWQ, VPHADDUWQПо горизонтали добавить четыре слова со знаком/без знака в четверное слово 8 слов ( a0-a7 ) → 2 четверных слова ( р0-р1 )

г0 = а0+а1+а2+а3 , r1 = а4+а5+а6+а7

VPHADDDQ, VPHADDUDQПо горизонтали добавить два знаковых/беззнаковых двойных слова в четверное слово. 4 двойных слова ( a0-a3 ) → 2 четверных слова ( р0-р1 )

г0 = а0+а1 , г1 = а2+а3

VPHSUBBWГоризонтальное вычитание двух байтов со знаком в слово 16 байт ( а0-а1 5) → 8 слов ( р0-р7 )

г0 = а0-а1 , г1 = а2-а3 , г2 = а4-а5 , ...

VPHSUBWDГоризонтальное вычитание двух слов со знаком в двойное слово 8 слов ( a0-a7 ) → 4 doublewords ( р0-р3 )

г0 = а0-а1 , г1 = а2-а3 , г2 = а4-а5 , ...

VPHSUBDQГоризонтальное вычитание двух двойных слов со знаком в четверное слово 4 двойных слова ( a0-a3 ) → 2 четверных слова ( р0-р1 )

г0 = а0-а1 , г1 = а2-а3

Целочисленное векторное сравнение

[ редактировать ]

Все эти инструкции векторного сравнения принимают немедленный результат в качестве дополнительного аргумента. Непосредственный контроль определяет, какой тип сравнения выполняется. Для каждой инструкции возможно восемь сравнений. Векторы сравниваются, и все сравнения, которые оцениваются как true, устанавливают все соответствующие биты в пункте назначения в 1, а ложные сравнения устанавливают все те же биты в 0. Этот результат можно использовать непосредственно в инструкции VPCMOV для векторизованного условного перемещения .

Инструкция Описание [9]
VPCOMBСравнить векторные байты со знаком
VPCOMWСравните слова с векторным знаком
VPCOMDСравните векторные двойные слова со знаком
VPCOMQСравните векторные четверные слова со знаком
VPCOMUBСравните векторные беззнаковые байты
VPCOMUWСравните векторные слова без знака
VPCOMUDСравните векторные двойные слова без знака
VPCOMUQСравните векторные четверные слова без знака
Немедленный Сравнение
000 Меньше, чем
001 Меньше или равно
010 Больше, чем
011 Больше или равно
100 Равный
101 Не равно
110 ЛОЖЬ
111 Истинный

Векторный условный ход

[ редактировать ]

VPCMOV работает как побитовый вариант инструкций смешивания в SSE4 . Как и инструкция AVX VPBLENDVB, это инструкция с четырьмя операндами, тремя исходными операндами и пунктом назначения. Для каждого бита в третьем операнде (который действует как селектор) 1 выбирает тот же бит в первом источнике, а 0 выбирает тот же бит во втором источнике. При использовании вместе с приведенными выше инструкциями сравнения векторов XOP это может использоваться для реализации векторизованного троичного перемещения или, если второй входной сигнал совпадает с пунктом назначения, условного перемещения ( CMOV).

Инструкция Описание [9]
VPCMOVВекторный условный ход

Инструкции целочисленного векторного сдвига и поворота

[ редактировать ]

Инструкции сдвига здесь отличаются от инструкций в SSE2 тем, что они могут сдвигать каждую единицу на разную величину, используя векторный регистр, интерпретируемый как упакованные целые числа со знаком. Знак указывает направление смещения или поворота: положительные значения вызывают сдвиг влево, а отрицательный сдвиг вправо. [10] Intel указала другой несовместимый набор инструкций векторного сдвига переменных в AVX2. [11]

Инструкция Описание [9]
VPROTBУпакованные байты поворота
VPROTWУпакованные вращающиеся слова
VPROTDУпакованные двойные слова с ротацией
VPROTQУпакованные четверные слова поворота
VPSHABУпакованные байты арифметических операций сдвига
VPSHAWУпакованные арифметические слова сдвига
VPSHADДвойные слова арифметики упакованного сдвига
VPSHAQЧетверные арифметические слова упакованного сдвига
VPSHLBУпакованные логические байты сдвига
VPSHLWЛогические слова с упакованным сдвигом
VPSHLDЛогические двойные слова с упакованным сдвигом
VPSHLQЛогические четверные слова упакованного сдвига

Векторная перестановка

[ редактировать ]

VPPERM — это одна инструкция, которая объединяет инструкции SSSE3 PALIGNR и PSHUFB и дополняет обе. Некоторые сравнивают это с Altivec инструкцией VPERM. [12] В качестве входных данных используются три регистра: первые два — исходные, а третий — селекторный. Каждый байт в селекторе выбирает один из байтов в одном из двух входных регистров для вывода. Селектор также может применять эффекты к выбранным байтам, например, устанавливать его в 0, менять порядок битов и повторять наиболее значимый бит. Кроме того, все эффекты или вход можно инвертировать.

The VPERMIL2PD и VPERMIL2PS инструкции представляют собой две исходные версии VPERMILPD и VPERMILPS инструкции в AVX, что означает типа VPPERM они могут выбрать вывод из любого поля двух входов.

Инструкция Описание [9]
VPPERMУпакованный байт перестановки
VPERMIL2PDПерестановка двух источников с плавающей запятой двойной точности
VPERMIL2PSПерестановка двух источников одинарной точности с плавающей запятой

Извлечение дробей с плавающей запятой

[ редактировать ]

Эти инструкции извлекают дробную часть числа с плавающей запятой, то есть ту часть, которая будет потеряна при преобразовании в целое число.

Инструкция Описание [9]
VFRCZPDИзвлечь упакованную дробь с плавающей запятой двойной точности
VFRCZPSИзвлечение упакованных фракций с плавающей запятой одинарной точности
VFRCZSDИзвлечение скалярной дроби двойной точности с плавающей запятой
VFRCZSSИзвлечение скалярной дроби с плавающей запятой одинарной точности

Процессоры с XOP

[ редактировать ]

См. также

[ редактировать ]

Примечания

[ редактировать ]
  1. ^ Значение байта 0x8F — это существующий код операции для инструкции POP. Эта инструкция использует байт ModR/M, который следует за кодом операции, но не использует поле «reg» (регистр), которое представляет собой биты 3–5. Некоторые коды операций, которые не используют мультиплексные инструкции «reg», используя эти биты для обозначения восьми различных инструкций (среди прочих 0x80-0x83 и 0xD0-0xDF); 0x8F нет. Это означает, что для стандартной инструкции POP биты 3–5 всегда должны быть равны нулю. Поскольку m-биты представляют собой биты 0–4, требование значения 8 или выше устанавливает бит 3 байта после 0x8F.
  1. ^ Перейти обратно: а б с д Дэйв Кристи (07 мая 2009 г.), Поддерживая баланс , Блоги разработчиков AMD, заархивировано из оригинала 4 ноября 2013 г. , получено 4 ноября 2013 г.
  2. ^ Перейти обратно: а б Руководство программиста по архитектуре AMD64, том 6: 128-битные и 256-битные инструкции XOP, FMA4 и CVT16 (PDF) , AMD , 1 мая 2009 г.
  3. ^ Майкл Ларабель (3 марта 2017 г.). «Влияние настройки компилятора GCC Zen на производительность AMD Ryzen» . Фороникс . Но поскольку Zen представляет собой дизайн с чистого листа, в процессорах Bulldozer есть некоторые расширения набора команд, которых нет в Zen/znver1. К числу отсутствующих больше относятся FMA4 и XOP.
  4. ^ Агнер Фог (5 декабря 2009 г.), Остановите войну наборов команд
  5. ^ Справочник по программированию Intel AVX (PDF) , март 2008 г. , получено 17 января 2012 г.
  6. ^ Справочник по программированию Intel Advanced Vector Extensions , январь 2009 г., заархивировано из оригинала 29 февраля 2012 г. , получено 17 января 2012 г.
  7. ^ Ганеш Гопаласубраманиан (10 марта 2015 г.). «[ИСПРАВЛЕНИЕ] добавить процессор znver1» . [электронная почта защищена] (список рассылки).
  8. ^ Амит Павар (7 августа 2015 г.). «[ИСПРАВЛЕНИЕ] Удалить CpuFMA4 из флагов ЦП Znver1» . [электронная почта защищена] (список рассылки).
  9. ^ Перейти обратно: а б с д и ж г «Руководство программиста по архитектуре AMD64, том 4: инструкции для 128-битных и 256-битных носителей» (PDF) . АМД . Проверено 13 января 2014 г.
  10. ^ «Новые инструкции для «Бульдозера» и «Сваебойщика»» (PDF) . АМД . Проверено 13 января 2014 г.
  11. ^ «Справочник по программированию расширений набора команд архитектуры Intel» . Интел . Архивировано из оригинала (PDF) 1 февраля 2014 года . Проверено 29 января 2014 г.
  12. ^ «Оптимизация бульдозера x264» . Проверено 13 января 2014 г.
  13. ^ Дэйв Кристи (07 мая 2009 г.), Поддерживая баланс , Блоги разработчиков AMD, заархивировано из оригинала 9 ноября 2013 г. , получено 17 января 2012 г.
  14. ^ Новые инструкции для «Бульдозера» и «Сваедрайвера» (PDF) , AMD, октябрь 2012 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 032234057173066d1c839afd79a97db3__1697172480
URL1:https://arc.ask3.ru/arc/aa/03/b3/032234057173066d1c839afd79a97db3.html
Заголовок, (Title) документа по адресу, URL1:
XOP instruction set - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)