首页 > 解决方案 > 如何在编译时禁用 glibc 中的 AVX512 和/或 AVX2?

问题描述

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

标签: linuxsimdglibcavx

解决方案


由于您指出的原因,当前 glibc 中的字符串函数应仅使用不需要 turbo 许可证的廉价 AVX 指令。如果您知道留下任何有问题的说明,请提交错误

根据一个旧错误,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/

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


推荐阅读