Объединение некоторых комментариев в ответ:
Помимо производительности, они имеют идентичное поведение (я думаю, даже с аргументом в пользу памяти: одинаковое отсутствие требований к выравниванию для всех инструкций AVX).
От Nehalem до Broadwell (V)PXOR
может работать на любом из 3 портов выполнения ALU, p0 / p1 / p5. (V)XORPS/D
может работать только на p5.
Некоторые процессоры имеют задержку обхода между целочисленными доменами и доменами FP. В документации по микроархитектуре Agner Fog говорится, что на SnB / IvB задержка обхода иногда равна нулю. например при использовании неправильного типа перемешивания или логической операции. В Haswell его примеры показывают, что orps
не имеет дополнительной задержки при использовании с результатом целочисленной инструкции, но что por
имеет дополнительный 1 такт задержки при использовании с результатом addps
.
В Skylake логические значения FP могут работать на любом порту, но задержка обхода зависит от того, на каком порте они запускались. (См. Таблицу в руководстве Intel по оптимизации). Порт 5 не имеет задержки обхода между математическими операциями FP, но порт 0 или порт 1 имеет. Поскольку блоки FMA находятся на портах 0 и 1, на этапе выдачи uop обычно назначаются логические значения port5 в тяжелом коде FP, потому что он может видеть, что много uop поставлено в очередь для p0 / p1, но p5 менее занят. (Как именно запланированы мопы x86?).
Я бы рекомендовал не беспокоиться об этом. Настройтесь на Haswell и Skylake. Или просто всегда используйте VPXOR для целочисленных данных и VXORPS для данных FP, и Skylake подойдет (но Haswell может нет).
На AMD Bulldozer / Piledriver / Steamroller нет версии логической операции FP для FP. (см. стр. 182 руководства по микроархитектуре Agner Fog.) Имеется задержка для пересылки данных между исполнительными модулями (1 цикл для ivec- ›fp или fp-› ivec, 10 циклов для int- ›ivec (eax
-› xmm0
), 8 циклов для ivec- ›int. (8,10 на bulldozer. 4, 5 на steamroller для movd / pinsrw / pextrw)) В любом случае, вы не можете избежать задержки обхода на AMD, используя соответствующее логическое значение insn. XORPS
для кодирования требуется на один байт меньше, чем PXOR
или XORPD
(версия, отличная от VEX. Все версии VEX занимают 4 байта.)
В любом случае задержки обхода - это просто дополнительная задержка, а не снижение пропускной способности. Если эти операции не являются частью самой длинной цепочки депов во внутреннем цикле или если вы можете чередовать две итерации параллельно (так что у вас есть несколько цепочек зависимостей, идущих одновременно для выполнения вне очереди), тогда PXOR
может быть путь идти.
На процессорах Intel до Skylake упакованные целочисленные инструкции всегда могут выполняться на большем количестве портов, чем их аналоги с плавающей запятой, поэтому предпочитайте целочисленные операции.
person
Peter Cordes
schedule
08.06.2015
vxorpd
- это AVX, тогда какvpxor
- это AVX2 (конечно, это не влияет на производительность, а только на совместимость). - person Paul R   schedule 15.11.2014