< 目次

解析のオーバーヘッドを最小化する手法

問題

インテル® Advisor を使用してターゲット・アプリケーションを実行すると、ターゲット・アプリケーションの実行時間が大幅に増加する場合があります。パースペクティブで選択した精度レベルと解析に応じて、アプリケーションの実行時間には異なるオーバーヘッドが追加されます。以下に例を示します。

ランタイム・オーバーヘッド/解析

サーベイ

特性化

依存関係

MAP

インテル® Advisor を使用した場合と、使用しない場合のアプリケーションの実行時間の比較

1.1x 増加

2 - 55x 増加

5 - 100x 増加

5 - 20x 増加

ソリューション

次の手法は、収集範囲を制限せずオーバーヘッドを最小限に抑えるのに役立ちます。

キャッシュ・シミュレーションを無効化

収集のオーバーヘッドを最小化します。

適用される解析:

キャッシュのモデル化情報が重要でない場合、次の手法を導入してください。

次の表のプロパティー/オプションのデフォルト設定は無効になっています。

[Analysis Workflow (解析のワークフロー)] ペインで、[Characterization (特性化)] 解析の [Characterization (特性化)] > [Enable CPU cache simulation (CPU キャッシュのシミュレーションを有効にする)] をオフにします。

[Project Properties (プロジェクトのプロパティー)] から :

パス: [Project Properties (プロジェクトのプロパティー)] > [Analysis Target (解析ターゲット)...]

CLI アクションのオプション

説明

[Memory Access Patterns Analysis (メモリー・アクセス・パターン解析)] > [Advanced (高度)] > [Enable Memory-Level Roofline with cache simulation (CPU キャッシュのシミュレーションを有効にする)] チェックボックスをオフにします。

--no-enable-cache-simulation

キャッシュミス、キャッシュミスとキャッシュライン利用率、またはキャッシュミスとループのフットプリントをモデル化しないでください 。

[トリップカウント & FLOP 解析] > [高度] > [CPU キャッシュ・シミュレーションを有効にする] チェックボックスをオフにします。

--no-enable-cache-simulation

以下を行ってはなりません。

  • 各ループでロードされたストア済みバイト数など、データに対する複数レベルのキャッシュをモデル化すること 。

  • 特定のキャッシュ階層構成のシミュレーションを行うこと。

レポートデータの制限

適用される解析: メモリー・アクセス・パターン。

オプションのデータが必要ない場合、これらの手法を導入してください。

次の表のプロパティー/オプションのデフォルト設定は有効になっています。

[Project Properties (プロジェクトのプロパティー)] > [Analysis Target (解析ターゲット)] > [Memory Access Patterns Analysis (メモリー・アクセス・パターン解析)] > [Advanced (高度)]

CLI アクションのオプション

説明

[Report stack variables (スタック変数をレポート)] チェックボックスをオフにします。

--no-record-stack-frame

メモリー・アクセス・ストライドが検出されたスタック変数をレポートしません。

[ヒープに割り当てられた変数をレポート] チェックボックスをオフにします。

--no-record-stack-frame

メモリー・アクセス・ストライドが検出されたヒープ割り当て変数をレポートしません。

データセットを最小化

収集のオーバーヘッドを最小化します。

適用される解析: すべて、特に依存関係、メモリー・アクセス・パターン。

解析を実行するとき、インテル® Advisor はデータセットに対してターゲットを実行します。データセットのサイズとワークロードは、ターゲット・アプリケーションの実行時間と解析速度に直接影響します。

例えば、1000x1000 ピクセルのイメージのほうが、100x100 ピクセルのイメージよりも処理が長くなります。その理由として、大きなイメージはループで 1...1000 の反復空間が必要ですが、小さなイメージは 1...100 で済みます。完全に同じコードパスを両方のケースで実行すると、その違いはコードパスの繰り返し回数だけです。

ターゲットの実行から冗長な処理を省くことで、完全性を損なうことなく、解析時間を制御できます。

大きな繰り返し型のデータセットの代わりに、ターゲット・アプリケーションの制御フローパスを広く実行しながら、ループ内で実行される命令数を最小限に抑えるような、小さく典型的なデータセットを選択してください。

目的: 各タスク内の計算の繰り返しをコードカバレッジに必要な最小限に抑え、できるだけ短い実行時間でできるだけ多くのパスを実行することを目標とします。

10 秒以下で実行できるデータセットが理想的です。すべてのコードが確実にチェックされるように、追加のデータセットを作成しても良いでしょう。

一時的にインライン展開を無効化

ファイナライズのオーバーヘッドを最小化します。

適用される解析: サーベイ、トリップカウント & FLOP 収集を有効にした特性化。

収集した解析データを別のマシンで表示する際に使用します。別のマシンの GUI で結果が開かれるか、結果からレポートが生成されると、ファイナライズは自動的に実行されます。

以下のコマンドでは、コマンドを実行する前に myApplication をアプリケーションの実行可能形式へのパスと名前に置き換える必要があります。アプリケーションが引数を必要とする場合、実行可能ファイル名のにそれらを指定します。

実装するには、解析の実行前中に次のいずれかを行います。

次の GUI で結果を開くと、結果は自動的に再ファイナライズされます。

CLI から解析を実行する際に結果を再ファイナライズするには、--report アクションで refinalize-survey オプションを指定します。例:

advisor --report=survey --search-dir src:=./src bin:=./bin --refinalize-survey --project-dir=./advi_results -- ./myApplication

関連情報