与英特尔相比,GNU C++编译器在对向量进行排序时性能较差

Poor performance of GNU C++ compiler while sorting vector of pairs, compared with Intel

本文关键字:向量 排序 性能 英特尔 GNU 编译器 C++      更新时间:2023-10-16

我的程序中有一个成对的向量,我需要对它进行排序

std::vector<std::pair<int, uintmax_t> > temp;
...
std::sort(temp.begin(), temp.end());

我进行了一些测量,发现对于大小超过16M元素的向量,使用英特尔C++编译器编译时排序需要3秒,使用GNU C++编译器编译则需要25秒。这对我来说似乎是一个极端的区别(使用GNU的速度慢了8倍多)。

你知道如何用GNU C++使这个程序更快吗?

我的配置是Intel 12.1.5和GNU 4.7.1。不幸的是,我在用于运行程序的计算机上没有超级用户权限。

感谢您的帮助,丹尼尔。

编辑:优化标志-O3解决了这个问题,GNU C++现在需要3到4秒。谢谢你的提示,我很遗憾我自己还没有弄清楚:(。所以,我希望这篇文章有一天能帮助其他人:)。

仅供参考,我没有在我的测量中指定任何优化标志

(也许-O2是英特尔和GNU的默认值?)

Add flags-Ofast可以打开g++几乎所有可能的优化标志

是的,-O2/-O3就足够解决这个问题了。有关要优化的g++标志的更多信息,请参阅此处https://stackoverflow.com/a/3005673/1095974.