Управляйте операциями Intel MIC SIMD вручную с помощью встроенных функций или инструкций

Я хочу вручную управлять своим кодом 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 ™, но все еще не знаю, как его написать.)

Большое спасибо.

2

Решение

Похоже, что вы цель 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 вариант.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]