-1

2つのもののパフォーマンスをテストするルーチンを作成する場合、どの最適化フラグを使用する必要がありますか?-O0、-O2、または-g?

4

3 に答える 3

1

各設定を使用して、コードのパフォーマンスをテストする必要があります。理想的には、数値-O0、-O1、-O2、-O3が大きいほど、最適化が多い/優れているため、パフォーマンスが向上することを意味しますが、常にそうであるとは限りません。

同様に、コードの記述方法によっては、言語またはコンパイラー、あるいはその両方から予期していなかった方法でコードの一部が削除される場合があります。したがって、コードのパフォーマンスをテストする必要があるだけでなく、コードから生成されたプログラムを実際にテストして、コードが思ったとおりに動作することを確認する必要があります。

そのコンパイラでコンパイルできるコードに最高のパフォーマンスを提供する最適化設定は1つではありません。特定のシステムで設定とコンパイラをテストして、そのシステムでコードが実際に高速に実行されることを確認する必要があります。パフォーマンスが多くのトラップやその他のエラーを生成する問題で満たされていることをテストする方法は、結果を簡単に誤解する可能性があります。したがって、パフォーマンスのテスト方法には注意する必要があります。

gccの人々は通常、-O3を使用するのは危険であり、-O2が最高のパフォーマンス/安全であると言います。そして、ほとんどの場合、-O2は、多くのバグを洗い流すのに十分に使用されます。-O2は常に最速のコードを生成するわけではありませんが、通常は-O0および-O1よりも高速なコードを生成します。デバッガーを使用すると、最適化が無効になるか、すべて一緒に削除される可能性があるため、デバッガーベースのビルドまたはデバッガーを使用してパフォーマンスをテストしないでください。ユーザーがシステムを使用するのと同じようにシステムでテストします。ユーザーがプログラムの実行時にデバッガーを使用する場合は、その方法でテストします。それ以外の場合は、実行しないでください。

于 2012-04-30T06:04:01.490 に答える
0

GCC では-O0、コンパイラ コードの最適化がまったく無効になります。-gデバッグ情報を実行可能ファイルに追加して、デバッガーを使用できるようにします。

速度の最適化を有効にする場合は、フラグ-O1またはを使用します-O2。詳細については、を参照man gcc(1)してください。

コードのパフォーマンスを測定したい場合は、valgrind や gprof などのプロファイラーを使用してください。

于 2012-04-27T09:51:55.823 に答える
0

実際、パフォーマンスを気にするなら、間違いなく を使用する必要があります-O3。潜在的な最適化を提供するのはなぜですか?

はい、 と の間には小さいながらも測定可能な違いが-O2あり-O3ます。

-gは最適化フラグではありませんが、最適化を妨げる可能性があるため、代表的なベンチマークでは無効にする必要があります。

于 2012-04-27T10:04:51.227 に答える