【问题标题】:Disabling all AVX512 extensions禁用所有 AVX512 扩展
【发布时间】: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


【解决方案1】:

gcc -mno-avx512f 也暗示没有其他 AVX512 扩展。 AVX512F 是“基础”,禁用它会告诉 GCC 机器不解码 EVEX 前缀。 p>

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


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

【讨论】:

  • 嗯,您似乎是对的,但这是否记录在某处?
  • @n.'pronouns'm.:我检查了gcc.gnu.org/onlinedocs/gcc/x86-Options.html,但似乎没有提及。至少在我的回答中记录在这里;我赞成您的问题,因为它似乎不是您可以轻松/根本无法在其他地方查找的问题。
猜你喜欢
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2023-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多