2

小さなライブラリの使用法を既存の大きなソフトウェアに追加し、オーバーヘッドとそれが小さなライブラリの属性であることを分析したいと思います(rdtsc()やgettimeofdayの呼び出しだけでなくファインダーの詳細で)。rdtsc()のようなものを使用すると、ライブラリ関数の呼び出しに伴うレイテンシーの感覚を得ることができますが、ブランチが適切に予測されていないか、キャッシングが正しく機能していないかなどを確認できない限り、レイテンシーの帰属を行うことはできません。より大きなバイナリのコンテキスト内でライブラリ内のルーチンに出入りする特定のハードウェアイベントを確認することを想像して、PAPIを調べましたが、PAPIが機能するには特定のカーネルモジュールが必要なようです(Linux2.6。 18 && Intel Xeon 5570)...特にIntelプロセッサ向けのVtuneがありますが、そのようです。

目標にVtuneを使用する方法はありますか、それともカーネルにパッチを適用せずにそのようなカウンターにアクセスできる方法はありますか?

4

2 に答える 2

5

Matiasは正しいです-プロファイリングを一時停止して開始し(VTune-speakでは「一時停止を開始」)、プログラムでVTuneAPIの__itt_pause/ __itt_resume APIを使用して、データ収集を対象のコード領域に制限します。

プロジェクトのプロパティで「ターゲット期間タイプ」を「1分未満」に設定することもできます。これにより、サンプリングがよりきめ細かくなります(デフォルトの1KHz周波数ではなく10KHz)。または、収集するイベントのリストでサンプルアフター値を手動で調整します。後者は、誤って予測されたブランチなどの特定のプロファイルを作成する場合に便利です。

于 2012-08-03T07:02:27.067 に答える
3

記録を開始するためにvtuneにエントリポイントを定義することはできません。

ただし、できることは、記録せずにトレースを開始し、ライブラリにヒットすることが予想される場合は、トレースを開始して、呼び出しを記録させることです。呼び出し後、再度停止して、vtuneの上下のタブを使用してライブラリ呼び出しを検索できるようになりました。

これを使用すると、通話に関するすべての情報と、それぞれに費やされた時間を確認できるはずです。

呼び出しがアクティブな間だけトレースするようにしたい場合は、gdbでアプリケーションを起動し、調べたい関数にアクセスしたり離れたりするときにブレークポイントを挿入してから、プロファイラーを適切に起動および停止できます。

于 2012-08-01T00:41:04.420 に答える