検出されたすべてのループでインテル® Advisor を使用してターゲット・アプリケーションを実行すると、ターゲット・アプリケーションの実行時間が大幅に増加する場合があります。パースペクティブで選択した精度レベルと解析に応じて、アプリケーションの実行時間には異なるオーバーヘッドが追加されます。以下に例を示します。
ランタイム・オーバーヘッド/解析 |
サーベイ |
特性化 |
依存関係 |
MAP |
|---|---|---|---|---|
インテル® Advisor を使用した場合と、使用しない場合のアプリケーションの実行時間の比較 |
1.1x 増加 |
2 - 55x 増加 |
5 - 100x 増加 |
5 - 20x 増加 |
次の手法を使用して、初期化フェーズなど、ターゲット・アプリケーションの重要ではない部分をスキップし、注目する部分のみを解析します。
収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、依存関係。
一部の解析タイプでは、スレッド化パースペクティブのワークフローで使用されるアノテーション構造が認識されます。
次の場合に使用します。
ターゲット・アプリケーションの修正/再コンパイルは問題ではない場合。
ターゲット・アプリケーションの注目しない部分を解析する必要がない場合。
ターゲット・アプリケーションの注目される部分には大きなワークロードが含まれている場合 (ポーズ/再開 API 呼び出しの頻度はおよそ 1 Hz であり、操作は解析実行のすべてのプロセスのデータ収集をポーズおよび再開し、対応する収集状態を GUI に通知します)。
収集を一時停止するには、コードに次のアノテーションを追加します。
C++:ANNOTATE_DISABLE_COLLECTION_PUSH
Fortran:call annotate_disable_collection_push()
C#:Annotate.DisableCollectionPush();
収集を再開するには、コードに次のアノテーションを追加します。
C++:ANNOTATE_DISABLE_COLLECTION_POP
Fortran:call annotate_disable_collection_push()
C#:Annotate.DisableCollectionPop();
詳細は、収集のポーズと収集の再開アノテーションご覧ください。
インストルメントとトレース・テクノロジー (ITT) API を使用すると、データ収集がクラッシュします。
適用される解析: サーベイ、トリップカウント & FLOP 収集または有効にした特性化。
次の場合に使用します。
ターゲット・アプリケーションの修正/再コンパイルは問題ではない場合。
ターゲット・アプリケーションの注目しない部分を解析する必要がない場合。
ターゲット・アプリケーションの注目される部分には大きなワークロードが含まれている場合 (ポーズ/再開 API 呼び出しの頻度はおよそ 1 Hz であり、操作は解析実行のすべてのプロセスのデータ収集をポーズおよび再開し、対応する収集状態を GUI に通知します)。
要件:
インストルメントするすべてのソースに次の文を追加します。
C/C++: ittnotify.h
Fortran:USE ITTNOTIFY
ittnotify ヘッダーファイルには、ITT API ルーチンの定義と、アプリケーションから API を適切に起動するロジックを提供するマクロ定義が含まれています。
ITT API は、トレースが無効化されるとオーバーヘッドはほぼゼロになるように設計されています。オーバーヘッドを完全にゼロにするには、ittnotify ヘッダーファイルをインクルードする前に、コンパイラーのコマンドラインやソースファイルで、プロジェクトに INTEL_NO_ITTNOTIFY_API マクロを定義することで、アプリケーションからすべての ITT API 呼び出しをコンパイルできます。
ITT API ヘッダーファイルとライブラリーに到達するようにビルドシステムを設定します。<install-dir> はインテル® Advisor のインストール・ディレクトリーです。
適切なエントリーを INCLUDE パスに追加します。
C++: <install-dir>/sdk/include
Fortran: <install-dir>/sdk/include/lib32 または <install-dir>/sdk/include/lib64
Microsoft Visual Studio* IDE: [プロジェクト] > [プロパティ] > [C/C++ | Fortran] > [全般] > [追加のインクルード ディレクトリ]。
LIBRARIES パスに <install-dir>/sdk/lib32 または <install-dir>/sdk/lib64 を追加します。
Visual Studio* IDE: [プロジェクト] > [プロパティ] > [C/C++ | Fortran] > [全般] > [追加ライブラリーインクルード ディレクトリ]。
ターゲット・アプリケーションを静的ライブラリー libittnotify.a (Linux*) または libittnotify.lib (Windows*) とリンクするため、コンパイラー・オプションに-littnotifyを指定します。トレースが有効である場合、この静的ライブラリーは ITT API 実装をロードし、ITT API インストルメント・データをインテル® インテル® Advisor に転送します。トレースが無効にされていると、静的ライブラリーは ITT API 呼び出しを無視するため、インストルメントのオーバーヘッドはほぼゼロになります。
Visual Studio* IDE: [プロジェクト] > [プロパティ] > [リンカー] > [入力] > [追加の依存ファイル]
ターゲット・アプリケーションの注目しない部分の前に __itt_pause (C/C++) または CALL ITT_PAUSE() (Fortran) を挿入し、ターゲット・アプリケーションの重要な部分の前には __itt_resume (C/C++) または CALL ITT_RESUME (Fortran) を挿入します。
例 1: 次のコード例と標準の実行制御は、コードの最初と中ほどで解析データを 2 度収集します。
#include <ittnotify.h>
int main(int argc, char* argv[]) {
// ワークを記述
__itt_pause();
// 注目しないワークをここに記述
__itt_resume();
// ワークを記述
__itt_pause();
// 注目しないワークをここに記述
return 0;
}例 2: 次のコード例と標準の実行制御は、コードの中ほどで 1 度だけ解析データを収集します。
#include <ittnotify.h>
int main(int argc, char* argv[]) {
__itt_pause();
// 注目しないワークをここに記述
__itt_resume();
// ワークを記述
__itt_pause();
// 注目しないワークをここに記述
return 0;
}例 3: 次のコード例と標準の実行制御は、コードの最後で 1 度だけ解析データを収集します。
#include <ittnotify.h> int main(int argc, char* argv[]) {
__itt_pause();
// 注目しないワークをここに記述
__itt_resume();
// ワークを記述
return 0;
}例 4: 次のコード例と
ポーズして開始制御は、コードの最後で 1 度だけ解析データを収集します。
#include <ittnotify.h>
int main(int argc, char* argv[]) {
// 注目しないワークをここに記述
__itt_resume();
// ワークを記述
return 0;
}前提条件を整えて再コンパイルした後に、次のいずれかを行います。
注: 次のコマンドでは、コマンドを実行する前にmyApplicationをアプリケーションの実行可能ファイルのパスと名前に置き換えてください。アプリケーションが引数を必要とする場合、実行可能ファイル名の後にそれらを指定します。
[Analysis Workflow (解析ワークフロー)] ペインの標準コントロール、または
[Start Paused (ポーズして開始)] コントロールをクリックして解析を実行します。
必要とする解析を実行するには、CLI アクションオプション --start-paused の有無にかかわらず advisor CLI アクション --collect を 使用します。以下に例を示します。
advisor --collect=survey --project-dir=./advi_results -- ./myApplication起動されたアプリケーションに ITT API をアタッチするには (すでに起動されているアプリケーションで API データを収集する)、環境変数を使用してターゲット・アプリケーションが ittnotify_collector ライブラリーを使用するようにします。
Windows* :
set INTEL_LIBITTNOTIFY32=<install_dir>\bin32\runtime\ittnotify_collector.dll
set INTEL_LIBITTNOTIFY64=<install_dir>\bin64\runtime\ittnotify_collector.dll
Linux* :
export INTEL_LIBITTNOTIFY32=<install_dir>/lib32/runtime/libittnotify_collector.so
export INTEL_LIBITTNOTIFY64=<install_dir>/lib64/runtime/libittnotify_collector.so
引用符なしでライブラリーへのフルパスを指定します。
設定が完了したら、適切な環境でインストルメントされたアプリケーションを起動します。インテル® Advisor を起動する前にアプリケーションが開始されても、インテル® Advisor は API データを収集します。
https://github.com/intel/ittapi から ITT API のドキュメントを入手できます。
収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化。
ターゲット・アプリケーションの初期フェーズ (初期化など) の解析を望まないが、レディーモードで解析を行う場合に使用します。
注: 次のコマンドでは、コマンドを実行する前にmyApplicationをアプリケーションの実行可能ファイルのパスと名前に置き換えてください。アプリケーションが引数を必要とする場合、実行可能ファイル名の後にそれらを指定します。
実装するには次のいずれかを行います。
[解析ワークフロー] ペインで
関連するコントロールをクリックして解析を実行します。
対象の解析を実行する際に、advisor CLI アクションオプション --start-paused を使用します。以下に例を示します。
advisor --collect=survey --start-paused --project-dir=./advi_results -- ./myApplicationさまざまな方法で収集を再開できます。最も一般的なものは__itt_resume です。
収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化。
次の場合に使用します。
ターゲット・アプリケーションを修正/再コンパイルしたくない場合。
ターゲット・アプリケーションの初期化を解析する必要がない場合。
対象部分の時間間隔は把握していますが、ターゲット・アプリケーションの注目する領域の始まりをピンポイントで特定することは重要ではありません。
ターゲット・アプリケーションの注目する領域は、少数のループで構成されています。
注: 次のコマンドでは、コマンドを実行する前にmyApplicationをアプリケーションの実行可能ファイルのパスと名前に置き換えてください。アプリケーションが引数を必要とする場合、実行可能ファイル名の後にそれらを指定します。
実装するには次のいずれかを行います。
[Project Properties (プロジェクトのプロパティー)] > [Analysis Target (解析ターゲット)] > [[Name] Analysis (<解析名> 解析)] > [Advanced (高度)] > [Automatically resume collection after (sec) (指定時間後に収集を自動レジューム (秒))] チェックボックスを有効にして値を設定します。ここで、[Name (解析名)] は [サーベイ] または [トリップカウント & FLOP] です。
[Analysis Workflow (解析ワークフロー)] ペインで標準の実行コントロールをクリックして、目的の解析を実行します。(収集は自動的にポーズ状態で開始されます。)
対象の解析を実行する際に、advisor CLI アクションオプション --resume-after=<integer> を使用します。以下に例を示します。
advisor --collect=survey --resume-after=30 --project-dir=./advi_results -- ./myApplicationGUI フィールドには秒を表す値を、整数引数にはミリ秒を指定します。
収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターン。
これは、収集をポーズしてアプリケーションを開始の裏返しです。次の場合に使用します。
ターゲット・アプリケーションを修正/再コンパイルしたくない場合。
ターゲット・アプリケーションの最後を解析する必要がない場合。
対象部分の時間間隔は把握していますが、ターゲット・アプリケーションの注目する領域の最後をピンポイントで特定することは重要ではありません。
ターゲット・アプリケーションの注目する領域は、少数のループで構成されています。
[Project Properties (プロジェクトのプロパティー)] > [Analysis Target (解析ターゲット)] > [[Name] Analysis (<解析名> 解析)] > [Advanced (高度)] > [Automatically stop collection after (sec) (指定時間後に収集を自動停止 (秒))] チェックボックスを有効にして値を設定します。ここで、[Name (解析名)] は [サーベイ] または [トリップカウント & FLOP] です。
[Analysis Workflow (解析ワークフロー)] ペインで標準の実行コントロールをクリックして、目的の解析を実行します。
GUI フィールドと整数引数の両方で秒を表す値を指定します。
収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターン。
次の場合に使用します。
ターゲット・アプリケーションを修正/再コンパイルしたくない場合。
ターゲット・アプリケーションの最後を解析する必要がない場合。
ターゲット・アプリケーションの出力を基に、注目する領域の時間間隔を特定できます。
ターゲット・アプリケーションの注目する領域は、少数のループで構成されています。
実装するには次のいずれかを行います。
[解析ワークフロー] ペインで
関連するコントロールをクリックして解析を実行します。
依存関係またはメモリー・アクセス・パターン解析を実行している場合、[Site Coverage (サイトカバレッジ)] バーを使用して、マークされたすべてのループが少なくとも 1 度解析されるタイミングを判断します。 
対象の解析を実行する際に、advisor CLI アクション --command=stop を使用します。以下に例を示します。
advisor --command=stop --result-dir=./myAdvisorResult収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化。
次の場合に使用します。
ターゲット・アプリケーションの出力を基に、注目する領域の時間間隔を特定できます。
ポーズまたは再開の必要性は不定で自発的です。
実装するには、次のいずれかを行い解析データの収集をポーズします (ターゲット・アプリケーションは続行しますが、解析データの収集を停止します)。
[解析ワークフロー] ペインで
関連するコントロールをクリックして解析を実行します。
対象の解析を実行する際に、advisor CLI アクション --command=pause を使用します。以下に例を示します。
advisor --command=pause --result-dir=./myAdvisorResult次のいずれかを実行して解析データの収集を再開します。
[解析ワークフロー] ペインで
関連するコントロールをクリックします。
目的の解析を実行するには、Advisor CLI アクション--command=resume を使用します。以下に例を示します。
advisor --command=resume --result-dir=./myAdvisorResult収集のオーバーヘッドを最小化します。
適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化 (コールスタック無し)。
この手法は、既に実行中のプロセスにアタッチできることを除いて、収集が一時停止された状態でターゲット・アプリケーションを起動するのと似ています。これは、次のような場合に有益です。
プロセスは永久に実行されるサービスです。
起動の仕組みは複雑です。例えば、起動収集コマンドを組み込むため変更の必要があるスクリプトなどです。
GUI:
[Project Properties (プロジェクトのプロパティー)] > [Analysis Target (解析ターゲット)] > [Name] Analysis (<解析名> 解析) > [Launch Application (アプリケーションを起動)] ドロップダウン・リスト で [Attach to Process (プロセスにアタッチ)] を選択します。ここで、[Name (解析名)] は、[サーベイ] または [トリップカウント & FLOP] です。
[Inherit settings from Survey Hotspots Analysis Type (サーベイ・ホットスポット解析タイプから設定を引き継ぐ)] チェックボックスを無効にします。
Process name (プロセス名) または PID オプションを選択してプロセスを識別します。
必要に応じてその他の情報を入力し、[Project Properties (プロジェクトのプロパティー)] ダイアログボックスを閉じます。
[Analysis Workflow (解析ワークフロー)] ペインで標準の実行コントロールをクリックして、目的の解析を実行します。
CLI : 必要な解析を実行する際にプロセスにアタッチするには、Advisor CLI アクションオプション --target-pid=<unsigned integer> または --target-process=<string> を使用します。以下に例を示します。
advisor --collect=survey --project-dir=./advi_results --result-dir=./myAdvisorResult --target-process=myProcessプロセスの解析データの収集を停止するには、次のいずれかを行います (プロセスの実行は続行しますが、解析データの収集を停止します)。
[解析ワークフロー] ペインで
関連するコントロールをクリックします。
Advisor CLI アクション --command=detach を使用します。以下に例を示します。
advisor --command=detach --result-dir=./myAdvisorResultトリップカウント & FLOPを有効にした特性化解析を実行する場合、コールスタックが無効であることを (デフォルト設定) 確認してください。
Advisor CLI アクション --command=stop を使用すると、プロセスが強制終了されます (これにより、解析データの収集も停止されます)。