Рассеяние внутри AVX
Я не могу найти их в Intel Intrinsic Guide v2.7. Знаете ли вы, поддерживают ли их наборы инструкций AVX или AVX2?
Ответы
Ответ 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