Linux 如何在编译时禁用glibc中的AVX512和/或AVX2?
最近我升级到了Glibc2.27,它显然支持新的CPU扩展,如AVX2和AVX512。字符串函数(memcpy、memcmp等)现在正在使用这些指令。不幸的是,AVX2和更高版本导致Intel CPU减少了时钟,这是基于我正在开发的应用程序基准测试的,导致了性能下降。是否有任何到glibc的编译切换,我可以永久禁用选定的CPU功能,这样它将被限制为与普通AVX或SSE4.2类似的功能?出于您指出的原因,当前glibc中的字符串函数应仅使用不需要turbo许可证的廉价AVX指令。如果您知道剩下的任何有问题的说明 根据一个老bug,需要注意的Linux 如何在编译时禁用glibc中的AVX512和/或AVX2?,linux,simd,glibc,avx,Linux,Simd,Glibc,Avx,最近我升级到了Glibc2.27,它显然支持新的CPU扩展,如AVX2和AVX512。字符串函数(memcpy、memcmp等)现在正在使用这些指令。不幸的是,AVX2和更高版本导致Intel CPU减少了时钟,这是基于我正在开发的应用程序基准测试的,导致了性能下降。是否有任何到glibc的编译切换,我可以永久禁用选定的CPU功能,这样它将被限制为与普通AVX或SSE4.2类似的功能?出于您指出的原因,当前glibc中的字符串函数应仅使用不需要turbo许可证的廉价AVX指令。如果您知道剩下的任
perf
事件有:
cpu/event=0x28,umask=0x18,name=core\u power\u lvl1\u turbo\u license/
cpu/event=0x28,umask=0x20,name=core\u power\u lvl2\u turbo\u license/
cpu/event=0x28,umask=0x40,name=core\u power\u throttle/
希望您可以使用这些工具精确定位各个说明。请参阅ld手册和glibc手册。不过,我使用它们的运气不太好。在测试过程中,我的更改似乎被忽略了。测试是几年前的事了。是的,实际上我使用的是glibc2.25,它使用的是“昂贵的”AVX。当升级到2.26时,问题消失了。所以升级lib为我解决了这个问题。