我有一个使用静态库的C/C++项目。该库是为“skylake”架构而构建的。该项目是一个数据处理模块,即它执行许多算术运算,内存复制,搜索,比较等。
CPU是Xeon Gold 6130T,它支持AVX512。我尝试同时使用-march=skylake
和-march=skylake-avx512
编译我的项目,然后与该库链接。
在使用-march=skylake-avx512
的情况下,与使用-march=skylake
构建的项目相比,该项目的性能显着降低(平均降低30%)。
如何解释呢?可能是什么原因?
信息:
最佳答案
在无法轻易矢量化零星AVX指令的代码中,您可以在CPU的前后位置降低CPU的频率,但不会带来任何好处。在这种情况下,您可能希望完全关闭AVX指令。
参见Advanced Vector Extensions, Downclocking:
另外,请参阅