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 に答える