ベクトル化とコードの調査パースペクティブを使用すると、アプリケーション内でベクトル並列処理から最大のメリットを得られるループと関数を識別し、ベクトル化されていない、またはベクトル化が不十分な時間のかかる関数/ループを見つけ、ベクトル化によって達成されるパフォーマンスの向上の見積もりを計算できます。
このページでは、vec_samples アプリケーションをプロファイルし、ベクトル化ホットスポットを特定してコードのパフォーマンスを向上させる方法について説明します。自身のアプリケーションを使用して、以下の手順に従うこともできます。

次の操作を行います。
このドキュメントでは、ツールがデフォルトの場所にインストールされていることを前提としています。ツールを別の場所にインストールした場合は、以下のコマンドのデフォルトパスを必ず置き換えてください。
Linux*
環境変数を設定したターミナルから:
make baselineこのコマンドは、-O2 -g コンパイラー・オプションを使用してアプリケーションをビルドします。アプリケーションのビルドの詳細については、ターゲット・アプリケーションのビルドを参照してください。
make baselineアプリケーションが正常にビルドされたことを示す次のような出力が表示されます。
ROW:47 COL: 47 Execution time is 6.020 seconds GigaFlops = 0.733887 Sum of result = 254364.540283
Windows*
環境変数を設定したコマンドプロンプトから:
build.bat baselineスクリプトは、/O2 /Qstd=c99 /fp:fast /Isrc /Zi /Qopenmp コンパイラー・オプションを使用してアプリケーションをビルドします。アプリケーションのビルドの詳細については、ターゲット・アプリケーションのビルドを参照してください。
vec_samples.exeアプリケーションが正常にビルドされたことを示す次のような出力が表示されます。
ROW:47 COL: 47 Execution time is 6.020 seconds GigaFlops = 0.733887 Sum of result = 254364.540283
グラフィカル・ユーザー・インターフェイス (GUI) からベクトル化とコードの調査を実行
advisor-gui[Project Properties (プロジェクトのプロパティー)] ダイアログボックスで、Trip Counts and FLOP Analysis (トリップカウントと FLOP 解析)、Dependencies Analysis (依存関係解析)、およびMemory Access Patterns Analysis (メモリー・アクセス・パターン解析) の各タイプで [Inherit settings from Survey Hotspots Analysis Type (調査ホットスポット分析タイプから設定を継承する)] チェックボックスが選択されていることを確認します。
ボタンをクリックしてパースペクティブを実行します。この精度レベルでは、インテル® Advisor は Survey (サーベイ) 分析を実行し、アプリケーションのパフォーマンス・メトリックを収集して、ベクトル化が不十分なホットスポットやベクトル化されていないホットスポットを特定します。
コマンドライン・インターフェイス (CLI) からベクトル化とコードの調査を実行
Linux* では
環境変数を設定したコマンドプロンプトから:
advisor --collect=survey --project-dir=./results -- ./vec_samplesadvisor --report=survey --project-dir=./resultsレポートのサマリーは、ターミナルまたはコマンドプロンプトに出力されます。このレポートのコピーは ./vec_samples/e000/hs000/advisor-survey.txt に保存されます。
解析が完了すると、ベクトル化とコード調査の結果を含む vec_samples プロジェクトが自動的に作成されます。結果は、インテル® Advisor GUI で表示できます。
Windows* では
環境変数を設定したコマンドプロンプトから:
advisor --collect=survey --project-dir=./results -- vec_samples.exeadvisor --report=survey --project-dir=./resultsコマンドはターミナルまたはコマンドプロンプトに出力されます。このレポートのコピーは ./vec_samples/e000/hs000/advisor-survey.txt に保存されます。
解析が完了すると、ベクトル化とコード調査の結果を含む vec_samples プロジェクトが自動的に作成されます。結果は、インテル® Advisor GUI で表示できます。
結果を調査します
GUI を使用してデータの収集が完了するとインテル® Advisor は結果を自動的に開きます。
CLI を使用してデータを収集したら、次のコマンドを使用して GUI で結果を開きます。
advisor-gui ./results結果が自動的に開かない場合は、[Show Result (結果を表示)] をクリックします。
GUI でベクトル化とコードの調査の結果を開くと、インテル® Advisor は最初に [Summary (サマリー)] タブを表示します。このウィンドウは、アプリケーションの実行、パフォーマンスのヒント、アプリケーションのベクトル化の問題に関する主要な情報を含むダッシュボードです。

[Summary (サマリー)] ウィンドウでは、次の点に注意してください。
[Survey & Roofline (サーベイとルーフライン)] タブに切り替えると、アプリケーション内の各ループ/関数のパフォーマンスを解析できます。

コントロールをクリックすると、[Why No Vectorization? (ベクトル化されない理由)] ペインに [how-can-I-fix-this-issue? (この問題をどのように修正できますか)] 情報が表示されます。ベースライン結果の読み取り専用スナップショットを作成する
読み取り専用の結果スナップショットを作成し、他の結果と共有したり比較することができます。それには以下を行います。
アイコンをクリックします。パフォーマンスの改善を確認するには、保存された結果のスナップショットを開き、メトリックを snapshot_baseline スナップショットのメトリックと比較します。
2 つのポインターが同じメモリー位置を指す場合、2 つのポインターはエイリアスされています。エイリアス化される可能性のあるポインターを使用してメモリーに保存すると、一部の最適化が妨げられる可能性があります。例えば、ループ反復間に依存関係があると、ベクトル化の安全性が損なわれることがあります。状況によっては、コンパイラーはループがベクトル化されたバージョンとベクトル化されないバージョンの両方を生成し、実行時にエイリアシングをテストして適切なコードパスを選択できるようにします。ポインターがエイリアス化されていないことを、コンパイラーに通知すると、ランタイムチェックを回避して、単一のベクトル化されたコードパスを生成できます。
Multiply.c では、コンパイラーは、関数 matvec(FTYPE a[][COLWIDTH], FTYPE b[], FTYPE x[]) 内のポイント b が a または x のいずれかにエイリアスされているかどうかを判断するランタイムチェックを生成します。Multiply.c が NOALIAS マクロを使用してコンパイルされる場合、引数 b の restrict 修飾子は、ポインターが他のポインターとエイリアスせず、配列 b が a または x と重複しないことをコンパイラーに通知できます。
NOALIAS マクロによってパフォーマンスが向上するか確認するには、次の手順を実行します。
Linux* では
同じターミナルウィンドウから:
make noaliasこのコマンドは、次のコンパイラー・オプションを使用してアプリケーションをビルドします。
-O2 -g -D NOALIAS
Windows* の場合、同じターミナルウィンドウから:
build.bat noaliasこのスクリプトは、次のコンパイラー・オプションを使用してアプリケーションをビルドします。
/O2 /Qstd=c99 /fp:fast /Isrc /Zi /Qopenmp /DNOALIAS
結果を表示
GUI を使用してデータの収集が完了するとインテル® Advisor は結果を自動的に開きます。
CLI を使用してデータを収集したら、次のコマンドを使用して GUI で結果を開きます。
advisor-gui ./vec_samples結果が自動的に開かない場合は、[Show Result (結果を表示)] をクリックします。
[Summary (サマリー)] ウィンドウで変更を確認します。

アプリケーションのパフォーマンスの変化を評価するには、[Survey & Roofline (サーベイとルーフライン)] タブを開きます。レポートでは、次の点に注意してください。
Multiply.c:69 の matvec の効率は低く (25%)、バーは灰色になっています。これは、達成されたベクトル化効率が元のスカラーループの効率よりも低いことを意味します。 Efficiency (効率) カラムのバーにマウスを移動すると、推定される効率の説明が表示されます。
アイコンをクリックします。両方のループに剰余ループが存在することに注意してください。[Trips Counts (トリップカウント)] カラムセットの
アイコンをクリックして展開します。剰余ループが存在するのは、剰余ループのトリップカウント値が VL (ベクトル長) 値の倍数ではないためです。
読み取り専用のスナップショットを作成します
アイコンをクリックして、snapshot_noalias の結果を保存します。
コンパイルされるホスト・プロセッサーで使用可能なさまざまな命令セット用のコードを生成すると、パフォーマンスが向上する可能性があります。
QxHost (Windows*) および xHost (Linux*) オプションは、コンパイルされるホスト・プロセッサーで使用可能な最高の命令セットを生成するようにコンパイラーに指示します。
QxHost および xHost オプションによってパフォーマンスが向上するか確認するには、次の手順を実行します。
Linux* では
同じターミナルウィンドウから、アプリケーションをビルドします。
make xhostこのコマンドは、次のコンパイラー・オプションを使用してアプリケーションをビルドします。
-g -D NOALIAS -xHost
Windows* では
同じコマンドプロンプトから:
build.bat xhostこのスクリプトは、次のコンパイラー・オプションを使用してアプリケーションをビルドします。
/O2 /Qstd=c99 /fp:fast /Isrc /Zi /Qopenmp /DNOALIAS /QxHost
GUI または CLI からベクトル化とコードの調査パースペクティブを実行
GUI からベクトル化とコードの調査を実行
advisor-gui .\vec_samplesこの精度レベルでは、インテル® Advisor はサーベイおよび特性評価 (トリップカウント) データを収集します。
CLI からベクトル化とコードの調査を実行
Linux* では
同じターミナルウィンドウから:
advisor --collect=survey --project-dir=./results -- ./vec_samplesadvisor --collect=tripcounts --project-dir=./results -- ./vec_samples解析が完了すると、ベクトル化とコード調査の結果を含む vec_samples プロジェクトが自動的に作成されます。結果は、インテル® Advisor GUI で表示できます。
Windows* では
同じコマンドプロンプトから:
advisor --collect=survey --project-dir=./results -- vec_samples.exeadvisor --collect=tripcounts --project-dir=./results -- vec_samples.exe解析が完了すると、ベクトル化とコード調査の結果を含む vec_samples プロジェクトが自動的に作成されます。結果は、インテル® Advisor GUI で表示できます。
結果を表示
GUI を使用してデータの収集が完了するとインテル® Advisor は結果を自動的に開きます。
CLI を使用してデータを収集したら、次のコマンドを使用して GUI で結果を開きます。
advisor-gui ./results結果が自動的に開かない場合は、[Show Result (結果を表示)] をクリックします。
[Summary (サマリー)] の変更を確認し、[Survey Report (サーベイレポート)] を開いてアプリケーションのパフォーマンスの変化を評価します。レポートでは、次の点に注意してください。
[Elapsed time (経過時間)] はおそらく改善されます。
上部ペインの [Vector ISA] カラムと [VL] カラムの値が変更されます。
読み取り専用のスナップショットを作成します
アイコンをクリックして、snapshot_xhost の結果を保存します。