解析のオーバーヘッドを最小化するループのマーク

問題

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

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

サーベイ

特性化

依存関係

MAP

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

1.1x 増加

2 - 55x 増加

5 - 100x 増加

5 - 20x 増加

ソリューション

次の手法を使用して、注目しないループをスキップしたり、注目するループのみを解析したりできます。

ID でループを選択

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

適用される解析: トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターン解析。

次の場合に使用します。

: 次のコマンドでは、コマンドを実行する前に myApplication をアプリケーションの実行可能ファイルのパスと名前に置き換えてください。アプリケーションが引数を必要とする場合、実行可能ファイル名のにそれらを指定します。

要件:

  1. サーベイ解析を実行します。

  2. Advisor CLI 環境:注目するループのループ ID を特定します。

    advisor --report=survey --project-dir=./advi_results -- ./myApplication

    レポートの最初のカラムはループ ID です。

ヒント

インテル® Advisor のレポートは広範囲となる傾向があります。次のいずれかの方法で読み取り可能なレポートを生成します。

  • 行表示の折り返しを回避するため、コンソールの表示幅を適切に調整してください。

  • レポートの最初のいくつかのカラムのみに注目する場合、適切なコマンドを使用してレポートをパイプしてください。

前提条件を整えた後に、次のいずれかを行います。

CLI 環境では異なる方法でループを選択します。

  • Advisor CLI アクションのオプション --mark-up-list=<string> と --select=<string> は、-collect アクションで使用されると GUI チェックボックスの有効化をシミュレートするだけです。 これらは、--collectコマンドの実行中のみ効果があります。

  • Advisor CLI アクション --mark-up-loops で使用されるのと同じオプションが、GUI チェックボックスで有効になります。これらは、-mark-up-loops コマンドが実行された後も選択されたままとなり、トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターンなどすべての解析に適用されます。

ソースファイル/行番号でループを選択

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

適用される解析: トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターン解析。

次の場合に使用します。

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

要件:

  1. サーベイ解析を実行します。

  2. Advisor CLI 環境:必要であれば、注目するループのソースファイルと行番号を特定します。

    advisor --report=survey --project-dir=./advi_results -- ./myApplication

前提条件を整えた後に、次のいずれかを行います。

  • GUI 環境での ID を使用したループの選択と、ソースファイル行によるループの選択には基本的に違いはありません。違いは、Advisor CLI 環境:

    • Advisor CLI アクションのオプション --mark-up-list=<string> は、GUI チェックボックスの有効化をシミュレートするだけです。 これらは、--collect コマンドの実行中のみ効果があります。

    • Advisor CLI アクション--mark-up-loops およびアクションオプション--select=<string> は、実際には GUI チェックボックスを有効にします。そのため --mark-up-loops コマンドが実行された後も選択されたままとなり、トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターンなどの解析に適用されます。

  • または、--mark-up-loopsCLI アクションを使用してループをマークする場合、Advisor CLI アクションオプション --append=<string> と --remove=<string> を使用して、その後に実行される解析向けにソースファイル/行番号を追加および削除できます。

基準でループを選択

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

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

事前定義された収集を使用して、インテル® Advisor を実行する場合や自動スクリプトを使用する場合など、手動入力ではなく基準で選択されたループに対して詳細な解析を行う場合に使用します。

Advisor CLI 環境で実装するには、コマンドラインからコマンドを 1 行ずつ実行するか、スクリプトを作成してコマンドを自動的に実行します。--select (推奨) または、--loops オプションを使用し、基準を指定してループを選択します。

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

例えば、依存関係の問題が存在すると想定されるループ/関数内のループ伝搬依存を解析するには、次のいずれかを使用します。

マークアップ・アルゴリズムによるループの選択

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

適用される解析: トリップカウント & FLOP 収集を有効にした特性化、依存関係、メモリー・アクセス・パターン解析。

これは、オフロードのモデル化パースペクティブにのみ適用されます。

使用するプログラミング・モデルや推測されるオフロードの収益性に基づいて、事前定義されたマークアップ・アルゴリズムによって選択されたループを詳しく解析する場合、--select=r:markup=<algorithm> を使用します。

CPU で実行されるアプリケーションを解析する場合、gpu_generic アルゴリズムを使用します。このアルゴリズムは、より多くのデータを収集し、安全にオフロードできることを確認するため、追加の解析のため収益性の高いループ/関数をすべて選択します。

すでにオフロードされているコード領域を解析し、特定のプログラミング・モデルを使用する場合、次のアルゴリズムのいずれかを使用します。

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

例えば、オフロードのモデル化を実行し、収益性の高いコード領域を詳しく解析するには、次のようにします。

現在、マークアップに相当する GUI はありません。デフォルトでは gpu_generic が使用されます。

関連情報