2

時間が費やされている場所をプロファイリングするためのツールを探しています。oprofile を見てきましたが、本当に必要なものが得られません。

私は、特に CALLGRIND_START_INSTRUMENTATION および CALLGRIND_STOP_INSTRUMENTATION マクロを使用して、callgrind を見ていました。valgrind が一般的に行うように、ツールによってアプリの速度が低下することは望ましくありません。しかし、Valgrind はすべてを 1 つのスレッドにシリアライズしているように見えるため、実際には機能しません。

たとえば、fn A が fn C を呼び出す fb B を呼び出し、B と A に戻る場合、どこでどのくらいの時間が費やされたかを知りたいと考えています。私は使用しているいくつかのミューテックス ツールを持っていますが、適切な時間ツールは、正確にどこに時間が費やされているかを確認するのに非常に役立ち、それらのパスに集中することができます。自分で何かを追加する以外に、このタスクに使用できるツールはありますか? そのC ++アプリところで。valgrind は、カーネルがシングル スレッドであるため使用できません。また、私のアプリは待機に多くの時間を費やしているため、単純な CPU プロファイラーは実際にはあまり役に立ちません..

4

1 に答える 1

0

この投稿のポイント 3 をご覧ください。

どこで時間を費やしたかではなく、なぜ.

「時間がかかりすぎる」メソッドを探していると仮定することと、(スタック サンプルを要約するのではなく、スタック サンプルを調査することによって) 時間ポイントの小さなサンプルで実際に達成しようとしているプログラムは何かを尋ねることとの間には、質的な違いがあります。

そのアプローチは、方法を測定することによって見つけることができるもの、およびそれ以上のものを見つけるでしょう. 繰り返し適用すると、高速化に大きな影響を与える可能性があります。

マルチスレッドの状況では、アイドル状態ではないスレッドを特定し、それらに適用できます。

于 2012-04-13T17:27:53.307 に答える