コードプロファイラーはどのように機能しますか? 質問する

コードプロファイラーはどのように機能しますか? 質問する

大学のプロジェクトに取り組んでいたとき、先輩学生が作成したプロジェクト内部のプロファイラーを使用しました。これは非常に基本的な機能でしたが、コードの 2 つのポイント間の時間を減算して統計情報を提供するというタスクがあったため、十分な機能でした。

さて、プロフェッショナル プロファイラーはどのように動作するのでしょうか? チェックポイントなどを挿入するためにコードを前処理しますか? デバッグ データを含むバイナリ コードを読み取り、関数が呼び出される場所を捕捉しますか?

ありがとう。

ベストアンサー1

さまざまな方法で動作するさまざまなプロファイラーが存在します。

一般的に使用されるプロファイラは、実行中のプログラムを定期的に検査して、現在実行されているアセンブリ命令(プログラムカウンタ)と現在の関数を呼び出しているルーチン(コールスタック)を確認します。この種のサンプリングプロファイラーは標準バイナリで動作しますが、プログラム内のアドレスを指定してコード行を解析するためのデバッグ シンボルがある場合に、より便利です。

定期的にサンプリングするだけでなく、プロセッサ パフォーマンス カウンターを使用して、キャッシュ ミスなどのイベントが一定数発生した後にサンプリングすることもできます。これにより、メモリ アクセスが原因でプログラムのどの部分が遅くなっているかを確認するのに役立ちます。

他のプロファイラでは、プログラムを再コンパイルして命令を挿入します(計装) を使用して、連続する一連の命令 (基本ブロック) が実行される頻度をカウントしたり、基本ブロックが実行される順序を記録したり、特定の場所の変数の内容を記録したりすることもできます。

インストルメンテーション アプローチでは、必要な精度とデータをすべて提供できますが、プログラムの速度が低下し、パフォーマンス特性が変わります。対照的に、サンプリング ベースのアプローチでは、プログラムの実行に必要な時間の長さと取得するプロファイル データの精度に応じてパフォーマンスへの影響を調整できます。

おすすめ記事