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

Битовые инструкции манипуляции наборы ( BMI наборы ) являются расширениями x86 архитектуру набора инструкций для микропроцессоров от Intel и AMD . Целью этих наборов команд является повышение скорости обработки битов . Все инструкции в этих наборах являются не- SIMD и действуют только общее назначение регистров .

Intel опубликовала два набора: BMI (здесь обозначается как BMI1) и BMI2; они оба были представлены с микроархитектурой Haswell . Еще два набора были опубликованы AMD: ABM ( Advanced Bit Manipulation , который также является подмножеством SSE4a, реализованным Intel как часть SSE4.2 и BMI1) и TBM ( Trailing Bit Manipulation , расширение, представленное для процессоров на базе Piledriver как расширение BMI1, но снова упало в процессорах на базе Zen ). [1]

ABM (Advanced Bit Manipulation) [ править ]

ABM реализована AMD только как единый набор инструкций; все процессоры AMD поддерживают обе инструкции или ни одну из них. Intel считает POPCNTкак часть SSE4.2, так и LZCNTчасть BMI1. POPCNTимеет отдельный флаг CPUID ; однако Intel использует ABMфлаг AMD для обозначения LZCNTподдержки (поскольку LZCNTзавершает ABM). [2]

LZCNTсвязан с BSRинструкцией Bit Scan Reverse ( ), но устанавливает флаги ZF (если результат равен нулю) и CF (если источник равен нулю), а не устанавливает ZF (если источник равен нулю). Кроме того, он дает определенный результат (размер исходного операнда в битах), если исходный операнд равен нулю. Для ненулевого аргумента сумма LZCNTи BSRрезультаты равны разрядности аргумента минус 1 (например, если 32-битный аргумент равен 0x000f0000, LZCNT дает 12, а BSR дает 19).

Кодировка LZCNTтакова, что если ABM не поддерживается, BSRвместо этого выполняется инструкция. [3] : 227

BMI1 (набор инструкций по манипулированию битами 1) [ редактировать ]

Приведенные ниже инструкции разрешены BMIбитом в CPUID. Intel официально считает его LZCNTчастью BMI, но рекламирует LZCNTподдержку с помощью ABMфлага функции CPUID. [2] BMI1 доступен в процессорах AMD Jaguar , [4] Piledriver [5] и более новых, а также в процессорах Intel Haswell [6] и более новых.

TZCNTпочти идентична команде Bit Scan Forward ( BSF), но устанавливает флаги ZF (если результат равен нулю) и CF (если источник равен нулю), а не устанавливает ZF (если источник равен нулю). Для ненулевого аргумента результат TZCNTи BSFравен.

Как и в случае LZCNT, кодирование TZCNTтаково, что если BMI1 не поддерживается, BSFвместо этого выполняется инструкция. [3] : 352

BMI2 (набор инструкций по манипулированию битами 2) [ править ]

Intel представила BMI2 вместе с BMI1 в своей линейке процессоров Haswell. Только AMD произвела процессоры, поддерживающие BMI1 без BMI2; BMI2 поддерживается архитектурой AMD Excavator и новее. [9]

Параллельное внесение и извлечение битов [ править ]

PDEPИ PEXTинструкции новый обобщенный бит уровня компресс и расширить инструкции. Они принимают два входа; один - источник, а другой - селектор. Селектор - это битовая карта, выбирающая биты, которые должны быть упакованы или распакованы. PEXTкопирует выбранные биты из источника в смежные младшие биты места назначения; биты назначения более высокого порядка очищаются. PDEPделает обратное для выбранных битов: смежные младшие биты копируются в выбранные биты места назначения; другие биты назначения очищаются. Это можно использовать для извлечения любого битового поля ввода и даже выполнения большого количества перетасовок на уровне битов, которое раньше было бы дорогостоящим. Хотя то, что делают эти инструкции, аналогично инструкциям SIMD по сбору-разбросу на уровне битов ,PDEPа PEXTинструкции (как и остальные наборы инструкций BMI) работают с регистрами общего назначения. [10]

Инструкции доступны в 32-битной и 64-битной версиях. Пример использования произвольного источника и селектора в 32-битном режиме:

Процессоры AMD до Zen 3 [11], которые реализуют PDEP и PEXT, делают это в микрокоде с задержкой 18 циклов [12], а не одним циклом. В результате, если маска известна, часто бывает быстрее использовать другие инструкции AMD.

TBM (манипуляция конечными битами) [ править ]

TBM состоит из инструкций, дополняющих набор инструкций, запущенных BMI1; их взаимодополняющий характер означает, что их не обязательно использовать напрямую, но они могут быть сгенерированы оптимизирующим компилятором при поддержке. AMD представила TBM вместе с BMI1 в своей линейке процессоров Piledriver [5] ; более поздние процессоры AMD Jaguar и Zen не поддерживают TBM. [4] Ни один из процессоров Intel (по крайней мере, через Coffee Lake) не поддерживает TBM.

Поддерживающие процессоры [ править ]

  • Intel
    • Процессоры Intel Nehalem и новее (например, Sandy Bridge , Ivy Bridge ) (поддерживается POPCNT)
    • Процессоры Intel Silvermont (с поддержкой POPCNT)
    • Процессоры Intel Haswell и новее (такие как Skylake , Broadwell ) (поддерживаются ABM, BMI1 и BMI2) [6]
  • AMD
    • Процессоры на базе K10 (поддерживается ABM)
    • "Кошачьи" маломощные процессоры
      • Процессоры на базе Bobcat (поддерживается ABM) [14]
      • Процессоры на базе Jaguar и новее (поддерживаются ABM и BMI1) [4]
      • Процессоры на базе Puma и новее (поддерживаются ABM и BMI1) [4]
    • Переработчики "тяжелого оборудования"
      • Процессоры на базе Bulldozer (с поддержкой ABM)
      • Процессоры на основе Piledriver (поддерживаются ABM, BMI1 и TBM) [1]
      • Процессоры на базе Steamroller (поддерживаются ABM, BMI1 и TBM)
      • Процессоры на базе экскаваторов и более новые (поддерживаются ABM, BMI1, BMI2 и TBM; микрокодированные PEXT и PDEP) [9]
    • Zen основе , Zen + основанное , и процессоры (АВМ, Bmi1 и BMI2 поддерживается; microcoded Pext и PDEP)
    • Процессоры Zen 3 и новее (поддерживаются ABM, BMI1 и BMI2; полная аппаратная реализация)

Обратите внимание, что поддержка расширения инструкций означает, что процессор способен выполнять поддерживаемые инструкции в целях совместимости программного обеспечения. При этом процессор может работать некорректно. Например, процессоры Excavator и Zen 2 реализуют инструкции PEXT и PDEP с использованием микрокода, в результате чего инструкции выполняются значительно медленнее, чем такое же поведение, воссозданное с использованием других инструкций. [15] (Программный метод под названием «zp7» на самом деле быстрее на этих машинах.) [16] Для достижения оптимальной производительности рекомендуется, чтобы разработчики компилятора использовали отдельные инструкции в расширениях на основе профилей производительности для конкретной архитектуры, а не при наличии расширения.

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

  • Расширенные векторные расширения (AVX)
  • Набор инструкций AES
  • Набор инструкций CLMUL
  • F16C
  • Набор инструкций FMA
  • Intel ADX
  • Набор инструкций XOP
  • Коды операций Intel BCD (также используются для расширенных методов обработки битов)

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

  1. ^ a b «Инструкции по новому« Бульдозеру »и« Пиледриверу » (PDF) . Проверено 3 января 2014 .
  2. ^ a b c «Справочник по программированию расширенных векторных расширений Intel» (PDF) . intel.com . Intel . Июнь 2011 . Проверено 3 января 2014 .
  3. ^ a b c d "Руководство программиста по архитектуре AMD64, том 3: Общие и системные инструкции" (PDF) . Версия 3.32. AMD . Март 2021 года. Архивировано (PDF) из оригинала 8 апреля 2021 года . Проверено 8 апреля 2021 .
  4. ^ a b c d «Семейство 16h AMD A-Series Data Sheet» (PDF) . amd.com . AMD . Октябрь 2013 . Проверено 2 января 2014 .
  5. ^ a b Холлингсворт, Брент. "Новые" Бульдозеры "и" Пиледриверы "инструкции" (pdf) . Advanced Micro Devices, Inc . Проверено 11 декабря 2014 .
  6. ^ а б Локтюхин Макс. «Как определить поддержку новых инструкций в семействе процессоров Intel® Core ™ 4-го поколения» . www.intel.com . Intel . Проверено 11 декабря 2014 .
  7. ^ "bmiintrin.h из GCC 4.8" . Проверено 17 марта 2014 .
  8. ^ https://github.com/abseil/abseil-cpp/blob/ce4bc927755fdf0ed03d679d9c7fa041175bb3cb/absl/base/internal/bits.h#L188
  9. ^ a b «Ядро экскаватора AMD может значительно повысить производительность» . X-bit labs. 18 октября, 2013. Архивировано из оригинального 23 октября 2013 года . Проверено 24 ноября 2013 года .
  10. ^ Yedidya Hilewitz; Руби Б. Ли (август 2009 г.). «Новая основа для переключателей в универсальных процессорах для существующих и расширенных операций с битами» (PDF) . palms.princeton.edu . Транзакции IEEE на компьютерах. С. 1035–1048 . Проверено 10 февраля 2014 .
  11. ^ https://en.wikichip.org/wiki/amd/microarchitectures/zen_3#Key_changes_from_Zen_2
  12. ^ https://www.agner.org/optimize/instruction_tables.pdf
  13. ^ "tbmintrin.h из GCC 4.8" . Проверено 17 марта 2014 .
  14. ^ «Руководство разработчика BIOS и ядра для семейства AMD 14h» (PDF) . Проверено 3 января 2014 .
  15. ^ «Отчет о развитии дельфинов: декабрь 2019 г. и январь 2020 г.» . Эмулятор дельфинов . Проверено 7 февраля 2020 .
  16. Вегнер, Зак (4 ноября 2020 г.). "zwegner / zp7" .

Дальнейшее чтение [ править ]

  • Уоррен-младший, Генри С. (2013). Восторг хакера (2-е изд.). Эддисон Уэсли - ISBN Pearson Education, Inc.  978-0-321-84268-8.

Внешние ссылки [ править ]

  • Руководство Intel по внутренним функциям