2012-09-27 59 views
0

我在我的程序中有一对向量,我需要对它进行排序。一些为:与英特尔相比,排序向量对时GNU C++编译器性能不佳英特尔

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

我执行一些测量,结果发现,为的大小的东西在元件16M向量,当与GNU C++编译器编译时与英特尔C++编译器25秒编译分拣需要3秒。这对我来说似乎是一个极端的差异(使用GNU的速度比使用GNU慢8倍以上)。

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

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

感谢您的帮助, 丹尼尔。

编辑:优化标志-O3解决了这个问题,GNU C++现在需要3到4秒。感谢提示,对我感到羞耻我没有想到它自己:(所以,我希望这篇文章有助于别人有一天:)。

只是为了信息,我没有我的测量内指定任何的优化参数(也许是-O2默认都为英特尔和GNU?)

+1

用'-O3'编译? – Anycorn

+1

您可以发布整个测试程序,以便我们可以尝试复制您的结果,然后分析它们。加快速度的第一步是弄清为什么需要这么长时间。 (我会亲自使用'callgrind') –

+0

@Anyconr:谢谢,它帮助了解编辑问题的详细信息:) –

回答

1

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

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

+1

我会提示-O2或-O3。 -Ofast打开的一些优化不适用于所有程序。 –

+0

感谢,-O3帮助,请参阅编辑的问题的详细信息。 –