Jump to content

Инструкция по перестановке

Инструкции перестановки (и перемешивания), являющиеся частью манипуляций с битами , а также векторной обработки , копируют неизмененное содержимое из исходного массива в целевой массив, где индексы задаются вторым исходным массивом. [1] Размер (разрядность) исходных элементов не ограничен, но остается таким же, как размер назначения.

Существует два важных варианта перестановки, известные как сбор и рассеяние соответственно. Вариант сбора следующий:

for i = 0 to length-1
    dest[i] = src[indices[i]]

где вариант разброса:

for i = 0 to length-1
    dest[indices[i]] = src[i]

на основе памяти Обратите внимание, что в отличие от метода сбора-разброса все три dest, src, и indices являются регистрами (или частями регистров в случае перестановки на уровне битов), а не ячейками памяти.

Вариант разброса можно рассматривать как «рассеивающий» исходные элементы по (в) пункту назначения, где вариант «сбора» собирает данные из индексированных исходных элементов.

Учитывая, что индексы могут повторяться в обоих вариантах, результирующий результат не является строгой математической перестановкой , поскольку в выходных данных могут встречаться дубликаты.

Особый случай перестановки также используется в « перестановке » графического процессора (опять же, не в строгом смысле перестановки), которая выполняет оперативное переупорядочение данных субвектора, чтобы выровнять или дублировать элементы с соответствующей полосой SIMD .

Появление инструкций перестановки

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

Инструкции по перестановке встречаются как в скалярных процессорах, так и в механизмах векторной обработки , а также в графических процессорах . В векторных наборах команд они обычно называются операциями «Register Gather/Scatter», например, в RISC-V . векторах [2] и возьмите векторы в качестве входных данных как для исходных элементов, так и для исходного массива, и выведите еще один вектор.

В наборах скалярных команд скалярные регистры разбиваются на более мелкие секции (распакованные, в стиле SIMD ), где фрагменты затем используются в качестве источников массива. (Небольшие, частичные) результаты затем объединяются (упаковываются) обратно в скалярный регистр в качестве результата.

Некоторые ISA, особенно для криптографических приложений, даже имеют операции перестановки на уровне битов , такие как bdep (bit deposit) in RISC-V bitmanip; [3] в Power ISA он известен как bpermd и был включен в течение нескольких десятилетий и до сих пор входит в спецификацию Power ISA v.3.0 B. [4]

Также в некоторых невекторных ISA из-за того, что иногда в одном входном регистре источника недостаточно места для полного указания исходного массива перестановки (особенно если операция включает в себя перестановку на уровне битов), будут включать инструкции частичного переупорядочения. Примеры включают в себя VSHUFF32x4 от AVX-512 .

Операции перестановки в различных формах на удивление распространены и встречаются в AltiVec , Power ISA , PowerPC G4 , AVX-512 , SVE2 , [5] векторные процессоры и графические процессоры . Они настолько важны, что LLVM добавила shufflevector[6] встроенный и GCC добавили __builtin_shuffle внутренний. [7] Внутренняя функция GCC соответствует функциональности встроенной функции Shuffle OpenCL . [8] Обратите внимание, что все это математически не является перестановками, поскольку в выходных данных могут встречаться дубликаты.

См. также

[ редактировать ]
  1. ^ Руководство для разработчика программного обеспечения для архитектур Intel® 64 и IA-32, объединенные тома: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D и 4 (PDF) . Интел. Июнь 2021. с. 5-356 Том. 2С.
  2. ^ «Векторное расширение RISC-V «V» – 16.4. Инструкции по сбору векторного регистра» . GitHub — riscv/riscv-v-spec . Проверено 10 июля 2021 г.
  3. ^ "riscv/riscv-bitmanip" . Гитхаб . Проверено 10 июля 2021 г.
  4. ^ «Power ISA версии 3.0 B» . Power.org. 27 марта 2017 г. Проверено 11 августа 2019 г.
  5. ^ ARM HPC, сводка расширений SVE2, стр. 32
  6. ^ «Документация LLVM 13: shufflevector» . Справочное руководство по языку LLVM . Проверено 10 июля 2021 г.
  7. ^ «Векторные расширения (с использованием коллекции компиляторов GNU (GCC))» . GCC, Коллекция компиляторов GNU — Проект GNU — Фонд свободного программного обеспечения (FSF) . Проверено 10 июля 2021 г.
  8. ^ «Спецификация OpenCL: shuffle, shuffle2» . Хронос Групп Инк . Проверено 10 июля 2021 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 930b5b0d98b5769555e18011339ff176__1658319000
URL1:https://arc.ask3.ru/arc/aa/93/76/930b5b0d98b5769555e18011339ff176.html
Заголовок, (Title) документа по адресу, URL1:
Permute instruction - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)