在OSX下使用AVX512内部函数时,我会收到数百万个错误,但只有在构建32位应用程序时,64位就可以了。是否受支持?我通过x86intrin.h和immintrin.h包含它。zmmintrin.h显然根本不存在...
我可以在 Godbolt (https://godbolt.org/z/d-mnAy( 上使用 clang6.0(主线,而不是 Apple 的版本(重现它,但不能用 clang7.0 重现它。
这可能是一个错误,但英特尔将_mm512_maskz_set1_epi64
列为vpbroadcastq zmm {k}, r64
的固有功能,这显然仅在64位模式下可用。
当然,这是愚蠢的,带有内存或xmm源的vpbroadcastq
在32位模式下仍然可用。 在 32 位模式下支持它的最新 clang 版本将此代码编译为矢量常量的非广播负载,即使在 64 位模式下也是如此:
#include <immintrin.h>
__m512i foo() {
return _mm512_maskz_set1_epi64(0xf0, 123);
}
但是 clang5.0 及更早版本在 64 位模式下像这样编译它:
foo: # @foo
mov al, -16
kmovd k1, eax
mov eax, 123
vpbroadcastq zmm0 {k1} {z}, rax
ret
clang 5.0 -m32 给出了一个内部编译器错误。
我没有Mac来尝试实际的Xcode,但很明显,一些clang/LLVM版本将_mm512_maskz_set1_epi64
和_mm512_set1_epi64
视为仅64位模式。 您可以使用标头使用的相同内置函数为 32 位模式定义自己的模式。