Для целей тестирования я пишу короткие фрагменты сборки для Intels Xeon Phi с встроенным ассемблером icc. Теперь я хотел использовать маскированные векторные инструкции, но я не могу их подавать на встроенный ассемблер.Вредоносные векторные инструкции
Для кода:
vmovapd -64(%%r14, %%r10), %%zmm0{%%k1}
Я получаю сообщение об ошибке
/tmp/icpc5115IWas_.s: Assembler messages:
/tmp/icpc5115IWas_.s:563: Error: junk `%k1' after register
Я пробовал много различных комбинаций, но ничего не получалось. Компилятор - это intel64/13.1up03 под Linux, синтаксис GAS.
Редактировать: Код выше фактически работает с не расширенным ассемблером. Так что это:
__asm__("vmovapd -64(%r14, %r10), %zmm0{%k1} ")
работы, это не делает:
__asm__("vmovapd -64(%[src], %%r10), %%zmm0{%%k1} "
:
: [src]"r"(src)
:)
Я Quess это что-то делать с необходимостью использовать двойную% перед именами регистров в расширенном режиме. Но нет, один% для k не работает.
VMASKMOVPD предназначен только для AVX, а не для KNI. Они не включили его, потому что есть универсальная функция маскировки векторной полосы. – user116429
Я не понимаю, что вы имеете в виду. vmovapd и vmaskmovpd являются инструкциями AVX512. Я не знаю, что такое KNI в этом контексте - единственное использование Intel этого TLA, с которым я знаком, - это интерфейс NIC для ядра. – pburka
KNI - это Knights Corner Новые инструкции, набор векторных команд Xeon Phi. AVX512 довольно похож, и оба набора инструкций, вероятно, сходятся в будущем. – user116429