3

私たちは g++ バージョン 3.2.3 と 4.2.4 を見てきました。4.2.4 では、一部のコード ベースのパフォーマンスが大幅に向上しています。

gcc buzilla データベースを検索して、劇的に改善された可能性のあるバグに関するヒントを見つけようとしましたが、候補として際立った個々のバグは見つかりませんでした。

改善は、ゆっくりと影響を与えた多くの小さな変更の結果ですか? それとも、違いをもたらした可能性のある上位 5 つの改善セットがありましたか?

背景として、私たちのコード ベースは、STL コンテナーとアルゴリズム、および「inline」キーワードなどの C++ 機能をうまく利用しています。

4

3 に答える 3

3

私の経験では、パフォーマンスが基本的にピークに達したのは 3.4 でした。私のプロジェクトでは、4.2 は実際には 3.4 よりも遅く、4.3 は 3.4 のパフォーマンスにほぼ匹敵する最初のものです。4.4 は 3.4 よりわずかに高速です。

古いバージョンの gcc がコード内で信じられないほど遅い処理を行っている特定のいくつかのケースを見つけました.3.4 から 4.3 への 128 クロックから 21 クロックへの特定の関数がありましたが、それは明らかに特殊なケースでした (不要な命令をいくつか追加するだけでパフォーマンスが大幅に低下する短いループでした)。

私が個人的に 3.4 を使用しているのは、コンパイルがはるかに高速で、テストがはるかに高速だからです。また、コードを誤ってコンパイルするという厄介な習慣があるように見えるため、最新バージョンを避けるようにしています。たとえば、最近の gcc バージョンで --march core2 を使用すると、プログラムでセグメンテーション違反が発生します。

全体として、違いが大きくなることはめったにありません。3 ~ 5% は、パフォーマンスの変化に関して私が見た絶対最大のものです。

ここで、これは C であることに注意してください。C++ では状況が異なる場合があります。

于 2008-09-23T08:45:40.143 に答える
2

オプティマイザーはgcc4シリーズで完全に作り直されたと思います。たとえば、ベクトル化については、次のページを参照してください。

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

参考までに、私はかつて動的配列、静的配列、std::vectorを使用してc[i]= a [i] + b [i]のベンチマークを実行しましたが、最速(w / gcc)はstd::vectorでした。 4.1)。パフォーマンスに30%の違い。

于 2008-09-23T08:57:20.287 に答える
1

ストリームは3.3で非常に遅く、3.4ではるかに速くなりました。(gccメーリングリストのメッセージ)他のことも改善されたに違いない。

于 2008-09-23T08:52:44.353 に答える