我想手动管理我的代码在 MIC 上的 SIMD 操作,并在下面编写内部函数
_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没有找到参考以及如何修复它,或者可以向我推荐一些材料,我将非常感激。(我已阅读英特尔® 至强融核™ 协处理器指令集架构参考手册,但仍不知道如何编写。)
非常感谢。