在 OSX 下使用 AVX512 内部函数时出现数百万个错误,但只有在构建 32 位应用程序时,64 位才可以。是否支持?我通过 x86intrin.h 和 immintrin.h 包含它。zmmintrin.h 显然根本不存在...
1 回答
0
我可以在 Godbolt ( https://godbolt.org/z/d-mnAy ) 上使用 clang6.0(主线,不是 Apple 的版本)复制它,但不是 clang7.0。
这可能是一个错误,但英特尔将_mm512_maskz_set1_epi64
其列为 的内在函数vpbroadcastq zmm {k}, r64
,这显然仅在 64 位模式下可用。
当然这很愚蠢,并且vpbroadcastq
在 32 位模式下仍然可以使用内存或 xmm 源。最近在 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 位模式定义自己的。
于 2018-10-17T17:30:28.993 回答