Я хочу вручную управлять своим кодом SIMD-операциями на MIC и написать внутреннюю информацию ниже
_k_mask = _mm512_int2mask(0x7ff); // 0000 0111 1111 1111
_tempux2_512 = _mm512_mask_loadunpacklo_ps(_tempux2_512,_k_mask, &u_x[POSITION_INDEX_X(k,j,i-5)]);
_tempux2_512 = _mm512_mask_loadunpackhi_ps(_tempux2_512,_k_mask, &u_x[POSITION_INDEX_X(k,j,i-5)]+16);
И компилятор icpc выдает эти сообщения об ошибках.
test.cpp:574: undefined reference to `_mm512_mask_extloadunpacklo_ps'
test.cpp:575: undefined reference to `_mm512_mask_extloadunpackhi_ps'
Будет нормально скомпилировать, если я использую _mm512_mask_load_ps, но моя память не может быть выровнена на 64 байта, поэтому использование _mm512_mask_load_ps вызовет ошибку во время выполнения.
Затем я попытался написать встроенный блок asm вручную, как это
MOV rax,0x7ff
KMOV k1,rax
VMOVAPS zmm1 {k1}, [data_512_1]
VMOVAPS zmm2 {k1}, [data_512_2]
VMULPS zmm3 {k1}, zmm2 zmm1
VMOVAPS [data_512_3] {k1}, zmm3
И компилятор icpc снова показывает ошибку
test_simd.cpp(30): (col. 10) error: Unknown opcode KMOV in asm instruction .
test_simd.cpp(33): (col. 10) error: Syntax error ZMM1 in asm instruction vmulps.
Я новичок в ассемблере. Буду очень признателен, если кто-нибудь скажет мне, почему icpc не нашел ссылку и как ее исправить, или порекомендует мне некоторые материалы. (Я прочитал Справочное руководство по архитектуре набора команд Intel® Xeon Phi ™, но все еще не знаю, как его написать.)
Большое спасибо.
Похоже, что вы цель AVX-512
набор инструкций, который будет реализован в будущих настольных процессорах и сопроцессорах Xeon Phi. Текущее поколение Xeon Phi использует другой набор команд, обычно называемый KNCNI
или же K1OM
, который похож, но несовместим с AVX-512
(особенно, AVX-512
поддерживает смещенные инструкции по загрузке и KNCNI
предлагаем использовать для этой же цели пару инструкций load-unpack-lo + load-unpack-hi). Скомпилировать для KNCNI
ты должен использовать -mmic
вариант для Intel Compiler (думать об этом как об альтернативе -m64
опция, которая делает цель компилятором x86-64
ISA: полученный код не будет работать на обычных процессорах x86-64 и наоборот). насколько мне известно AVX-512
набор еще не поддерживается в общедоступных выпусках Intel Compiler, но, скорее всего, будет использовать новый -x
вариант.
Других решений пока нет …