禁用所有 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 指令等的内在函数,以及在自动矢量化时不使用它们。
我需要禁用 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 指令等的内在函数,以及在自动矢量化时不使用它们。