Jump to content

Набор инструкций для манипуляций с битами x86

(Перенаправлено с ИМТ2 )

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

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

ABM (расширенное управление битами)

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

AMD была первой, кто представил инструкции, которые теперь образуют Intel BMI1, как часть своего набора инструкций ABM ( Advanced Bit Manipulation ), а затем добавил поддержку новых инструкций Intel BMI2. Сегодня AMD рекламирует доступность этих функций через процессорные флаги Intel BMI1 и BMI2 и инструктирует программистов использовать их соответствующим образом. [2]

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

Кодирование Инструкция Описание [4]
F3 0F B8 /r POPCNT Численность населения
F3 0F BD /r LZCNT Ведущие нули считаются

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

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

BMI1 (Набор инструкций битового управления 1)

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

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

Кодирование Инструкция Описание [3] Эквивалентное выражение C [8] [9] [10]
VEX.LZ.0F38 F2 /r ANDN Логично и нет ~x & y
VEX.LZ.0F38 F7 /r BEXTR Извлечение битового поля (с регистром) (src >> start) & ((1 << len) - 1)
VEX.LZ.0F38 F3 /3 BLSI Извлечь младший изолированный бит x & -x
VEX.LZ.0F38 F3 /2 BLSMSK Получить маску до самого низкого установленного бита x ^ (x - 1)
VEX.LZ.0F38 F3 /1 BLSR Сбросить младший установленный бит x & (x - 1)
F3 0F BC /r TZCNT Подсчитайте количество конечных нулевых битов
31 + (!x)
  - (((x & -x) & 0x0000FFFF) ? 16 : 0)
  - (((x & -x) & 0x00FF00FF) ? 8 : 0)
  - (((x & -x) & 0x0F0F0F0F) ? 4 : 0)
  - (((x & -x) & 0x33333333) ? 2 : 0)
  - (((x & -x) & 0x55555555) ? 1 : 0)

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

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

BMI2 (Набор инструкций битового управления 2)

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

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

Кодирование Инструкция Описание
VEX.LZ.0F38 F5 /r BZHI Нулевые старшие биты, начиная с указанной позиции бита [src & (1 << inx)-1];
VEX.LZ.F2.0F38 F6 /r MULX Беззнаковое умножение, не затрагивающее флаги и произвольные регистры назначения.
VEX.LZ.F2.0F38 F5 /r PDEP Параллельный депозит битов
VEX.LZ.F3.0F38 F5 /r PEXT Извлечение параллельных битов
VEX.LZ.F2.0F3A F0 /r ib RORX Логический поворот вправо, не затрагивая флаги
VEX.LZ.F3.0F38 F7 /r SARX Сдвинуть арифметику вправо, не затрагивая флаги
VEX.LZ.F2.0F38 F7 /r SHRX Логический сдвиг вправо, не затрагивая флаги
VEX.LZ.66.0F38 F7 /r SHLX Логический сдвиг влево, не затрагивая флаги

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

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

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

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

Инструкция Маска выбора Источник Место назначения
PEXT 0xff00fff0 0x12345678 0x00012567
PDEP 0xff00fff0 0x00012567 0x12005670

Процессоры AMD до Zen 3 [13] реализующие PDEP и PEXT, делают это в микрокоде с задержкой 18 тактов. [14] вместо (Дзен 3) 3 цикла. [15] В результате на этих процессорах зачастую быстрее использовать другие инструкции. [16]

TBM (манипуляция завершающими битами)

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

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

Кодирование Инструкция Описание [4] Эквивалентное выражение C [17] [9]
XOP.LZ.0A 10 /r id BEXTR Извлечение битового поля (с немедленным) (src >> start) & ((1 << len) - 1)
XOP.LZ.09 01 /1 BLCFILL Заполнить с самого низкого чистого бита x & (x + 1)
XOP.LZ.09 02 /6 BLCI Изолировать самый низкий чистый бит x | ~(x + 1)
XOP.LZ.09 01 /5 BLCIC Изолировать младший чистый бит и дополнить ~x & (x + 1)
XOP.LZ.09 02 /1 BLCMSK Маска из младшего чистого бита x ^ (x + 1)
XOP.LZ.09 01 /3 BLCS Установить младший бит очистки x | (x + 1)
XOP.LZ.09 01 /2 BLSFILL Заполнить с наименьшего установленного бита x | (x - 1)
XOP.LZ.09 01 /6 BLSIC Изолировать младший установленный бит и дополнить ~x | (x - 1)
XOP.LZ.09 01 /7 T1MSKC Обратная маска из замыкающих ~x | (x + 1)
XOP.LZ.09 01 /4 TZMSK Маска от конечных нулей ~x & (x - 1)

Поддержка процессоров

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

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

См. также

[ редактировать ]
  1. ^ Перейти обратно: а б «Новые инструкции для «Бульдозера» и «Сваебойщика» (PDF) . Проверено 3 января 2014 г.
  2. ^ Перейти обратно: а б «Руководство программиста по архитектуре AMD64, том 3: универсальные и системные инструкции» (PDF) . Проверено 20 июля 2022 г.
  3. ^ Перейти обратно: а б с «Справочник по программированию Intel Advanced Vector Extensions» (PDF) . intel.com . Интел . Июнь 2011 года . Проверено 3 января 2014 г.
  4. ^ Перейти обратно: а б с д «Руководство программиста по архитектуре AMD64, том 3: универсальные и системные инструкции» (PDF) . Версия 3.32. АМД . Март 2021 г. Архивировано (PDF) из оригинала 8 апреля 2021 г. Проверено 8 апреля 2021 г.
  5. ^ Перейти обратно: а б с д «Техническое описание семейства AMD серии A на 16 часов» (PDF) . amd.com . АМД . Октябрь 2013 года . Проверено 2 января 2014 г.
  6. ^ Перейти обратно: а б Холлингсворт, Брент. «Новые инструкции «Бульдозер» и «Сваебойщик»» (PDF) . Advanced Micro Devices, Inc. Проверено 11 декабря 2014 г.
  7. ^ Перейти обратно: а б Локтюхин, Макс. «Как обнаружить поддержку новых инструкций в семействе процессоров Intel® Core™ 4-го поколения» . www.intel.com . Интел . Проверено 11 декабря 2014 г.
  8. ^ «bmiintrin.h из GCC 4.8» . Проверено 17 марта 2014 г.
  9. ^ Перейти обратно: а б «sandpile.org — архитектура x86 — биты» . Проверено 17 марта 2014 г.
  10. ^ «Абсель — общие библиотеки C++» . Гитхаб . 4 ноября 2021 г.
  11. ^ Перейти обратно: а б «Ядро AMD Excavator может привести к значительному увеличению производительности» . X-битные лаборатории. 18 октября 2013. Архивировано из оригинала 23 октября 2013 года . Проверено 24 ноября 2013 г.
  12. ^ Едидия Хилевиц; Руби Б. Ли (август 2009 г.). «Новая основа для сдвигов в процессорах общего назначения для существующих и расширенных битовых манипуляций» (PDF) . Palms.princeton.edu . Транзакции IEEE на компьютерах. стр. 1035–1048 . Проверено 10 февраля 2014 г.
  13. ^ «Дзен 3 — Микроархитектуры — AMD — WikiChip» .
  14. ^ «Таблицы инструкций» (PDF) . Проверено 9 сентября 2023 г.
  15. ^ «Руководство по оптимизации программного обеспечения для процессоров AMD семейства 19h» . Центр разработчиков AMD . Проверено 22 июля 2022 г.
  16. ^ «Сохранение частного Ryzen: функции замены PEXT/PDEP 32/64b для процессоров #AMD (BR/#Zen/Zen+/#Zen2) на основе zp7 @zwegner» . Твиттер . Проверено 21 февраля 2022 г.
  17. ^ «tbmintrin.h из GCC 4.8» . Проверено 17 марта 2014 г.
  18. ^ «Руководство разработчика BIOS и ядра для семейства AMD 14h» (PDF) . Проверено 3 января 2014 г.
  19. ^ «Глубокий обзор AMD Zen 3 Ryzen: протестированы 5950X, 5900X, 5800X и 5600X» . Проверено 26 декабря 2021 г.
  20. ^ «Отчет о ходе работы Dolphin: декабрь 2019 г. и январь 2020 г.» . Эмулятор Дельфина . 7 февраля 2020 г. Проверено 7 февраля 2020 г.
  21. ^ Вегнер, Зак (4 ноября 2020 г.). "цвегнер/zp7" . Гитхаб .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: a9319696a25e3421ba479ca1bf0ef16e__1719086400
URL1:https://arc.ask3.ru/arc/aa/a9/6e/a9319696a25e3421ba479ca1bf0ef16e.html
Заголовок, (Title) документа по адресу, URL1:
x86 Bit manipulation instruction set - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)