【问题标题】:How to disable AVX512 and/or AVX2 in glibc at compile time?如何在编译时禁用 glibc 中的 AVX512 和/或 AVX2?
【发布时间】:2019-12-09 10:25:46
【问题描述】:

最近我升级到 glibc 2.27,它显然支持新的 CPU 扩展,如 AVX2 和 AVX512。字符串函数(memcpy、memcmp 等)现在正在使用这些指令。不幸的是,AVX2 及更高版本导致英特尔 CPU 降低时钟,这基于我正在处理的应用程序的基准测试,导致性能下降。是否有任何编译切换到 glibc,我可以永久禁用选定的 CPU 功能,以便将其限制为像普通的 AVX 或 SSE4.2?

【问题讨论】:

  • 参见 ld 手册中的 LD_HWCAP_MASK 和 glibc 手册中的 Hardware Capability Tunables。不过,我在使用它们时运气不佳。在测试期间,我的更改似乎被忽略了。测试是几年前的事了。

标签: linux simd glibc avx


【解决方案1】:

由于您指出的原因,当前 glibc 中的字符串函数应该只使用不需要 turbo 许可证的廉价 AVX 指令。如果您知道任何遗留的有问题的指令,please file a bug。

根据一个老错误,需要注意的perf 事件是:

  • cpu/event=0x28,umask=0x18,name=core_power_lvl1_turbo_license/
  • cpu/event=0x28,umask=0x20,name=core_power_lvl2_turbo_license/
  • cpu/event=0x28,umask=0x40,name=core_power_throttle/

希望您可以使用这些来确定各个说明。

【讨论】:

  • 是的,实际上我使用的是 glibc2.25,它使用的是“昂贵”的 AVX。升级到 2.26 的时候问题就消失了。所以升级 lib 为我解决了问题。
猜你喜欢
  • 2017-09-22
  • 1970-01-01
  • 2020-10-07
  • 2019-03-15
  • 2019-04-22
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2016-07-04
相关资源
最近更新 更多