5

タイトルが示すように、2 つのコマンドとそれらが生成する結果の違いを知りたいです。

これを読むと、gprof には追加のフラグが必要であることがわかります (-g、gdb にも同じことが必要ですか?) が、プロファイラー間の違いについての答えは得られません。

4

2 に答える 2

6

gprofprof「セルフタイム」だけを与えるために特別に発明されました。「セルフタイム」は、各ルーチンでプログラムカウンターが見つかった合計時間の割合を示します。コール スタックの下部にあるサイクルを削減することで、考慮する必要がある "ボトルネック" の種類だけを解決できれば、それで問題ありません。

サブルーチンの呼び出し回数を減らすことで解決する「ボトルネック」についてはどうでしょうか。それgprofは、発信者に自分の時間を「チャージバック」することによって、あなたが見つけるのを助けるはずだったものです. ルーチンの「包含時間」は、その「自己時間」と、それが呼び出すルーチンから発生するもので構成されます。これが何をするかの簡単な例ですgprof

ここに画像の説明を入力

A は B を 10 回呼び出し、B は C を 10 回呼び出し、C は CPU 集中型のループを 10 サンプル時間実行します。プログラム カウンターは実質的にすべての時間を C で費やしているため、サンプルが A または B に到達しないことに注意してください。 gprof呼び出しをカウントし、誰が呼び出しを行ったかを追跡し、計算を行い、時間を上方に伝播します。

このプログラムを高速化する方法は、A が B を呼び出す回数を減らすか、B が C を呼び出す回数を減らすか、またはその両方を行うことです。 profそのような情報は提供できませんでした。推測する必要があります。

gprofの使用を考えている場合は、その問題に注意してください。たとえば、行レベルの情報が提供されない、I/O が見えない、再帰によって混乱する、サンプル レートなどの問題を見つけるのに役立つ特定の事柄を誤解させてしまうなどです。コール グラフ、呼び出し回数など。ほとんどの人は問題発見ツールだと思っていますが、作成者はそれが測定ツールであり、問​​題発見ツールではないと主張していることに注意してください。

于 2013-07-12T12:33:44.257 に答える