与GCC 5相比,使用GCC 9编译的STL priority_queue的性能较低

ekqde3dh  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(235)

对于我的项目,我从GCC 5切换到GCC 9,发现性能变差了。我做了一些调查,并提出了一个简单的源代码,重现了这种行为。
我在同一台机器上使用不同的GCC版本(g++-5和g++-9)编译代码

#include <queue>

int main()
{
        std::priority_queue<int> q;
        for (int j = 0; j < 2000; j ++) {
                for (int i = 0; i < 20000; i ++) {
                        q.emplace(i);
                }
                for (int i = 0; i < 20000; i ++) {
                        q.pop();
                }
        }
        return 0;
}

当我使用GCC 5编译它时,我得到以下计时:

# g++-5 -std=c++14 -O3 main.cpp
# time ./a.out

real    0m1.580s
user    0m1.578s
sys     0m0.001s

用GCC 9做同样的事情,我得到:

# g++-9 -std=c++14 -O3 main.cpp
# time ./a.out

real    0m2.292s
user    0m2.288s
sys     0m0.003s

如您所见,GCC 9给出的结果较慢。
我不确定问题是否出在STL priority_queue本身,我尝试了Boost priority_queue,得到了同样的结果。
有没有人知道为什么GCC 9的性能比GCC 5慢?也许我应该使用一些编译器标志?提前谢谢!

9lowa7mx

9lowa7mx1#

这并不是一个答案,但由于我有一些g工具链可用,我做了一些测试运行,看看我是否可以看到一些有趣的关于这个感知到的退化。
最大的放缓似乎在6.2和7.2之间。也许这个表格可以触发某人回忆可能的原因。
自从我开始使用gcc 4以来,我一直使用C
11,所以除了第一种情况之外,我在所有情况下都使用g++ -std=c++11 -O3 main.cpp
| g版本|真实的|使用者|系统|
| - -|- -|- -|- -|
| 4.5.0(-标准=c
0x)| 0m1.711s | 0m1.701s | 0m0.004s |
| 四、八、五| 0m1.673s | 0m1.667s | 0m0.002s |
| 第5.1.0节| 0m1.586s | 0m1.578s | 0m0.002s |
| 第6.2.0节| 0m1.775s | 0m1.766s | 0m0.003s |
| 7.2.0版| 0m2.192s | 0m2.176s | 0m0.003s |
| 第8.2.0节| 0m2.192s | 0m2.186s | 0m0.000s |
| 第9.3.0节| 0m2.122s | 0m2.114s | 0m0.001s |
| 第10.2.0节| 0m2.308s | 0m2.299s | 0m0.002s |
| 第11.3.0节| 0m2.293s | 0m2.285s | 0m0.002s |
| 第12.1.0节| 0m2.306s | 0m2.299s | 0m0.001s |

相关问题