我需要在gcc编译的代码中禁用所有AVX512扩展。原因是Valgrind阻塞了AVX512指令。有没有办法用一个标志做到这一点?
我知道如何分别禁用每个扩展名(-mno-avx512f
,-mno-avx512pf
等),但这很麻烦,因为不同的gcc版本支持这些扩展名的不同子集。
我使用CMake。如果有一种方法可以使用CMake机械来自动执行标记,这对我也将起作用。
[ 类似地,gcc -mno-avx512f
也暗含没有other AVX512扩展名。-mno-avx
禁用AVX2,FMA3等,因为它们都是基于AVX构建的。 (由于GCC的工作方式,-mavx512f -mno-avx
甚至可能还会禁用AVX512F。)
例如gcc -march=icelake-client -mno-avx512f
将拒绝AVX512DQ或AVX512VL指令等的内部函数,以及在自动向量化时不使用它们的内部函数。