Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

История [ править ]

XOP - это переработанное подмножество того, что изначально задумывалось как SSE5 . Он был изменен, чтобы быть похожим, но не перекрывающимся с AVX , части, которые перекрывались с AVX, были удалены или перемещены в отдельные стандарты, такие как FMA4 (векторное умножение-накопление с плавающей запятой ) и CVT16 ( преобразование с плавающей запятой половинной точности, реализованное как F16C by Intel ). [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, чтобы избежать перекрытия с существующими инструкциями. Байт C4, используемый в схеме VEX, не имеет такого ограничения. Это может помешать использованию m-битов для других целей в будущем в схеме XOP, но не в схеме VEX. Другая возможная проблема заключается в том, что биты pp имеют значение 00 в схеме XOP, в то время как они имеют значение 01 в схеме VEX для инструкций, которые не имеют устаревшего эквивалента. Это может усложнить использование битов pp для других целей в будущем.

Похожая проблема совместимости заключается в различии наборов инструкций FMA3 и FMA4 . Первоначально Intel предложила FMA4 в спецификации AVX / FMA версии 3, чтобы заменить 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, разработанные специально для семейства микроархитектур Bulldozer. [7] [8]

Инструкции умножения-накопления целочисленных векторов [ править ]

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

Горизонтальное сложение целочисленных векторов [ править ]

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

Сравнение целочисленных векторов [ править ]

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

Условное перемещение вектора [ править ]

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

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

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

Перестановка векторов [ править ]

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

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

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

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

Процессоры с XOP [ править ]

  • AMD :
    • Переработчики "тяжелого оборудования"
      • Процессоры на базе бульдозеров , 4 квартал 2011 г. [13]
      • Процессоры на базе Piledriver , 4 квартал 2012 г. [14]
      • Процессоры на базе Steamroller , первый квартал 2014 г.
      • Экскаваторные процессоры (включая "v2"), 2015 г.

См. Также [ править ]

  • AVX
  • CVT16
  • FMA4
  • SSE5
  • x86

Ссылки [ править ]

  1. ^ a b c d Дэйв Кристи ( 7 мая 2009 г.) , Достижение баланса , блоги разработчиков AMD, заархивировано из оригинала 4 ноября 2013 г. , получено 4 ноября 2013 г.
  2. ^ a b Руководство программиста по архитектуре 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. ^ Agner Туман (5 декабря 2009), Stop набор команд войны
  5. ^ Справочник по программированию Intel AVX (PDF) , март 2008 г. , получено 17 января 2012 г.
  6. ^ Intel Advanced Vector Extensions Справочник по программированию , январь 2009 г., архивируются с оригинала на 29 февраля 2012 года , восстановлена 2012-01-17
  7. ^ Ganesh Gopalasubramanian (10 марта 2015). "[ПАТЧ] добавить процессор znver1" . [email protected] (список рассылки).
  8. Амит Павар (7 августа 2015 г.). «[ПАТЧ] Удалить CpuFMA4 из флагов ЦП Znver1» . [email protected] (список рассылки).
  9. ^ a b c d e f g "Руководство программиста архитектуры AMD64, Том 4: 128-битные и 256-битные инструкции для носителей" (PDF) . AMD . Проверено 13 января 2014 .
  10. ^ "Новые" Бульдозер "и" Инструкции по погрузчику " (PDF) . AMD . Проверено 13 января 2014 .
  11. ^ "Справочник по программированию расширений набора инструкций архитектуры Intel" . Intel . Архивировано из оригинального (PDF) 1 февраля 2014 года . Проверено 29 января 2014 .
  12. ^ "Оптимизация Buldozer x264" . Проверено 13 января 2014 .
  13. ^ Дэйв Кристи (2009-05-07) Достижение баланса , AMD Developer блоги, архивируются с оригинала на 2013-11-09 , извлекаться 2012-01-17
  14. Новые инструкции "Bulldozer" и "Piledriver" (PDF) , AMD, октябрь 2012 г.