0

我的程序中有一个对向量,我需要对其进行排序。比如:

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

我进行了一些测量,发现对于大小超过 16M 元素的向量,使用 Intel C++ 编译器编译时排序需要 3 秒,使用 GNU C++ 编译器编译时需要 25 秒。这对我来说似乎是一个极端的差异(使用 GNU 慢了 8 倍以上)。

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

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

提前感谢您的帮助,丹尼尔。

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

仅供参考,我没有在我的测量中指定任何优化标志(也许 -O2 是 Intel 和 GNU 的默认值?).

4

1 回答 1

1

添加标志 -Ofast 以打开 g++ 的几乎所有可能的优化标志。

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

于 2012-09-27T17:26:50.423 回答