我有一个使用静态库的C/C++项目。该库是为“skylake”架构而构建的。该项目是一个数据处理模块,即它执行许多算术运算,内存复制,搜索,比较等。
CPU是Xeon Gold 6130T,它支持AVX512。我尝试同时使用-march=skylake-march=skylake-avx512编译我的项目,然后与该库链接。
在使用-march=skylake-avx512的情况下,与使用-march=skylake构建的项目相比,该项目的性能显着降低(平均降低30%)。
如何解释呢?可能是什么原因?
信息:

  • Linux 3.10
  • gcc 9.2
  • 英特尔至强金牌6130T
  • 最佳答案


    在无法轻易矢量化零星AVX指令的代码中,您可以在CPU的前后位置降低CPU的频率,但不会带来任何好处。在这种情况下,您可能希望完全关闭AVX指令。
    参见Advanced Vector Extensions, Downclocking:

    另外,请参阅

  • On the dangers of Intel's frequency scaling
  • Gathering Intel on Intel AVX-512 Transitions
  • How to Fix Intel?
  • 07-24 13:19