質問

私は、主に計装とサンプリングのプロファイラー間の研究を行っています。私は次の情報を思いつきました:

  • サンプリング:プログラムの実行を停止し、PCを取り、したがってプログラムは
  • 計装:プログラムを知るためにいくつかのポインターを増やすように、プログラムにオーバーヘッドコードを追加する

上記の情報が間違っている場合は正しいです。

この後、私は実行時に見ていましたが、一部の人は、計装がサンプリングよりも時間がかかると言いました!これは正しいです?

はいの場合、なぜそうなの?サンプリングでは、コンテキストの価格を支払う必要があります。プロセス間を切り替えますが、後者では同じプログラムで費用がかかりません

私は何かが足りませんか?

乾杯! =)

役に立ちましたか?

解決

サンプリングプロファイラーによって生成された割り込みは、通常、非常に短いサンプリング間隔がない限り、総実行時間に違反しない時間を追加します(例:1 ms)。

機器のプロファイリングを使用すると、インストルメンテーションライブラリへの呼び出しが関数の実行時間と比較して重要である可能性があるため、何度も呼び出される小さな葉の機能など、大きなオーバーヘッドがあります。

他のヒント

それはあなたがどのように慣習的になりたいかによって異なります。

gprof あなたが言及したことの両方をします。 それに関するいくつかのコメントがあります。

プロファイリングは測定に関するものであると言う考え方があります。何を測定しますか?まあ、何でも - 測定するだけです。これに加えて、あなたが取得したいことは、何が起こっているのかの「全体像」であるという考えがあります。この学校は、主に「遅い関数」を見つけようとしていることを目指しています。

別の学校は、あなたが本当にデバッグしていると言います。特定の種類のバグを正確に見つけたい - プログラムを間違っていないもの、むしろ彼らには時間がかかりすぎる。これらは大きなものではありません。それらは、必要以上の時間がかかる何かが起こっているコードの非常に正確なポイントです。正確にどれだけ重要ではありません。重要なのは、それが配置されているため、修正できることです。この観点では、オーバーヘッドのプロファイリングは無関係であり、測定の精度も同様です。測定とは、どれだけの時間が節約されたかを見ることです。

両方のキャンプに成功していると思うプロファイラーの1人は、 ズーム, 、それは壁2時間にコールスタックをサンプリングし、ライン/命令レベルでスタックの時間の割合を提示するためです。他のプロファイラーもこれを行いますが、ほとんどはそうではありません。

私は2番目の学校にいます これが例です あなたがそれで達成できることの。

これが問題のより簡単な議論です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top