禁用所有 AVX512 扩展

Disabling all AVX512 extensions

我需要禁用 gcc 编译代码中的所有 AVX512 扩展。原因是 Valgrind 在 AVX512 指令上卡住了。有没有办法用一个标志来做到这一点?

我知道如何单独禁用每个扩展(-mno-avx512f-mno-avx512pf 等),但这很麻烦,因为不同的 gcc 版本支持这些扩展的不同子集。

我使用 CMake。如果有一种方法可以使用 CMake 机器自动生成标志,这对我也有用。

gcc -mno-avx512f 也意味着没有 other AVX512 扩展。 AVX512F 是 "foundation",禁用它说明GCC 机器不解码 EVEX 前缀。

同样,-mno-avx 禁用 AVX2、FMA3 等,因为它们都是基于 AVX 构建的。 (由于 GCC 的工作方式,-mavx512f -mno-avx 甚至可能也会禁用 AVX512F。)


例如gcc -march=icelake-client -mno-avx512f 将拒绝 AVX512DQ 或 AVX512VL 指令等的内在函数,以及在自动矢量化时不使用它们。