Подтвердить что ты не робот

Рассеяние внутри AVX

Я не могу найти их в Intel Intrinsic Guide v2.7. Знаете ли вы, поддерживают ли их наборы инструкций AVX или AVX2?

4b9b3361

Ответ 1

  • В исходном наборе инструкций AVX нет инструкций по разбросу или сбору.

  • AVX2 добавляет команды сбора, но не разбрасывает.

  • AVX512F включает как команды разброса, так и команды сбора.

  • AVX512PF дополнительно предоставляет варианты предварительной выборки команд сбора и рассеяния.

  • AVX512CD содержит инструкции по обнаружению конфликтов в адресах разброса.

  • Intel MIC (он же Xeon Phi, Knights Corner) включает команды сбора и разброса, но это отдельный сопроцессор, и он не может запускать нормальный код x86-64.

Ответ 2

Как показал другой ответ, реализовать разброс пока невозможно даже на AVX2. Однако руководство по оптимизации Intel предоставляет нам ручную версию операции рассеяния. На странице 11-17 руководства по оптимизации Intel версии 2013. В основном, что они делают, они читают индекс каждый раз и хранят его в реестре общего назначения, скажем, rax, а затем меняют правильный номер, который вы хотите на регистр xmm, используя такие вещи, как vpalignr. Затем мы сохраняем результат в ячейке памяти с помощью vmovss --- перемещаем скалярный сингл в память. Я предполагаю, что это будет низкой эффективности, но я думаю, что это единственный способ реализовать разброс данных по архитектуре процессора X86 на данный момент. На Xeon Phi все красиво, они обеспечивают встроенную поддержку операций рассеяния, и первый op, конечно же, является местом памяти. Поэтому я считаю, что если ваш код включает в себя много сборов и разброса, переход на Xeon Phi будет хорошим выбором. Пожалуйста, ответьте, чтобы сообщить мне, если что-то не так в моем ответе.

Удачи!

xiangpisaiMM