如何在编译时在 glibc 中禁用 AVX512 and/or AVX2?

How to disable AVX512 and/or AVX2 in glibc at compile time?

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

出于您指出的原因,当前 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/

希望您可以使用这些来查明各个指令。