6

CPU プロファイリングにGoogle の perftools ( http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html ) を使用しています。これは、CPU 時間を大幅に削減するのに役立つ素晴らしいツールです。私のアプリケーションの改善。

残念ながら、コードがまだ少し遅いという点に到達しました。g++ の -O3 最適化レベルを使用してコンパイルすると、特定の関数が遅いということしかわかりませんが、どの側面が遅いかはわかりません。

-O3 フラグを削除すると、プログラムの最適化されていない部分がこの関数を追い越してしまい、遅い関数の実際の部分があまり明確になりません。-O3 フラグをそのままにしておくと、関数の遅い部分がインライン化され、関数のどの部分が遅いかを判断できなくなります。

助言がありますか?ご協力いただきありがとうございます!

4

3 に答える 3

6

このような場合、私は常に「昔ながらの」方法を使用してきました。

現在の時間 (または cputime) を測定するステートメントをさまざまな時点で測定したいルーチンに挿入します。次に、それらの違いを印刷するかログに記録するだけで、コードの各セクションにかかった時間がわかります。そこから、ほとんどの場合何を食べているかを見つけ出し、問題の内容とその修正方法がわかるまで、そのセクション内できめ細かいタイミングを取ることができます.

関数呼び出しのオーバーヘッドが問題にならない場合は、インライン化を強制的にオフにすることもできます-fno-inline-small-functions -fno-inline-functions -fno-inline-functions-called-once -fno-inline(これらのスイッチがどのように相互作用するかは正確にはわかりませんが、独立していると思います)。次に、通常のプロファイラーを使用してコール グラフ プロファイルを確認し、どの関数呼び出しにどのくらいの時間がかかっているかを確認できます。

于 2009-04-08T17:16:21.900 に答える
1

私は何十年もかけてパフォーマンスのチューニングを行ってきました。

人々はツールを愛していますが、私はこの方法に誓います。

于 2009-04-10T18:35:01.043 に答える