linux - 如何在编译时禁用 glibc 中的 AVX512 和/或 AVX2?
问题描述
最近我升级到 glibc 2.27,它显然支持新的 CPU 扩展,如 AVX2 和 AVX512。字符串函数(memcpy、memcmp 等)现在正在使用这些指令。不幸的是,AVX2 及更高版本导致英特尔 CPU 降低时钟,这基于我正在处理的应用程序的基准测试,导致性能下降。是否有任何编译切换到 glibc,我可以永久禁用选定的 CPU 功能,以便将其限制为像普通的 AVX 或 SSE4.2?
解决方案
由于您指出的原因,当前 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/
希望您可以使用这些来确定各个说明。
推荐阅读
- tcp - 进程和 TCPSocket 在水晶中没有正确关闭
- pandas - 如何将ndarray转换为pandas DataFrame
- r - 使用 ibmdbR 包在 R 对象中追加和更新 DB2 表行
- sql-server - SQL Express - 我可以对现有表进行分区以解决 10GB 文件大小限制吗?
- wpf - 将对象绑定到组合框和文本框
- c - memcpy:GCC 或实现优化?
- javascript - 使用 JavaScript 创建文件并在单击按钮时下载
- unit-testing - 使用 github.com/jarcoal/httpmock 验证请求正文
- angular - Angular 7中ng-cloak(angularjs)的替代方法是布尔变量而不是对象
- python - 有没有办法在给定点找到多边形?