【发布时间】:2020-07-04 00:28:39
【问题描述】:
我需要禁用 gcc 编译代码中的所有 AVX512 扩展。原因是 Valgrind 在 AVX512 指令上窒息。有没有办法用一个标志来做到这一点?
我知道如何单独禁用每个扩展(-mno-avx512f、-mno-avx512pf 等),但这很麻烦,因为不同的 gcc 版本支持这些扩展的不同子集。
我使用 CMake。如果有办法使用 CMake 机器自动化标记,这对我也有用。
【问题讨论】:
-
默认没有启用,你用
-march=native可能吗? -
@MarcGlisse 是的,我正在使用
-march=native。 -
@MarcGlisse:在任何地方都正式记录了
-march=native -mno-avx512f保证也会禁用 AVX512VL、AVX512DQ 等吗?正如 OP 指出的那样,我的答案在当前的 GCC 中是正确的,但 gcc.gnu.org/onlinedocs/gcc/x86-Options.html 不能保证。 -
在我看来,与其先启用 avx512 (march=native) 然后禁用它,不如先不启用它(march=skylake 也许?)。如果你想要一些关于 mno-avx512f 的保证,你需要在 gcc-land 中询问,我对那部分不是很熟悉。
-
@PeterCordes 是的,这就是我的最终结果。坦率地说,我更喜欢 avx512 和 valgrind 支持的所有其他东西,但可以梦想......
标签: gcc avx instruction-set avx512