コード内の目的の場所にフレーム API 呼び出しを挿入して、フレームごとのパフォーマンスを解析します。ここで、フレームとはフレームの開始点と終了点間の範囲です。インテル® VTune™ プロファイラーでは、通常のタスクデータと視覚的に区別するため、フレームは別トラックで表示されます。
フレーム API は再開状態で動作するプロセス単位の関数です。この関数はポーズ状態では動作しません。
フレーム解析では次のことができます。
フレームは、経過時間のオーバーラップしない領域を表します。フレームは本来グローバルであるため、特定のスレッドに関連付けられません。ITT API は、コードフレームの解析と解析データを提供します。
使用するプリミティブ |
説明 |
||||||
---|---|---|---|---|---|---|---|
__itt_domain *ITTAPI__itt_domain_create ( const char *name) |
ドメイン名には、com.my_company.my_application などの URI 命名スタイルを推奨します。ドメインのセットは、アプリケーションの実行中は静的であると想定しているため、ドメインを破棄するメカニズムはありません。 ドメインを作成したスレッドに関係なく、プロセス内のスレッドはすべてのドメインにアクセスできます。この呼び出しはスレッドセーフです。
|
||||||
void __itt_frame_begin_v3(const __itt_domain *domain, __itt_id *id); |
フレームインスタンスの始まりを定義します。ここで、__itt_frame_begin_v3 呼び出しは、__itt_frame_end_v3 呼び出しがない場合と同様に無視されます。 同じ ID で連続して __itt_frame_begin_v3 を飛び出すと、その ID で __itt_frame_end_v3 を呼び出すまで無視されます。
|
||||||
void __itt_frame_end_v3(const __itt_domain *domain, __itt_id *id); |
フレームインスタンスの終わりを定義します。ここで、__itt_frame_end_v3 呼び出しは、__itt_frame_begin_v3 呼び出しとペアにする必要があります。ID を指定した最初の __itt_frame_end_v3 呼び出しでフレームは終了します。同じ ID による連続した呼び出しは、一致する __itt_frame_begin_v3 呼び出しがない場合と同様に無視されます。
|
ハードウェア・イベントベース・サンプリング収集ベースの解析タイプでは、64 個の異なるフレームドメインに制限されています。
次の例は、フレーム API を使用して、指定したコード領域の経過時間を取得します。
#include "ittnotify.h"
__itt_domain* pD = __itt_domain_create( L"My Domain" );
pD->flags = 1; /* enable domain */
for (int i = 0; i < getItemCount(); ++i)
{
__itt_frame_begin_v3(pD, NULL);
do_foo();
__itt_frame_end_v3(pD, NULL);
}
…
__itt_frame_begin_v3(pD, NULL);
do_foo_1();
__itt_frame_end_v3(pD, NULL);
…
__itt_frame_begin_v3(pD, NULL);
do_foo_2();
__itt_frame_end_v3(pD, NULL);