このステップでは、結果を解析してレポートの推奨内容を実装するかどうかを決定します。
レポートは、ソースコード scalar_dep.cpp の次のループについて述べたものです。
for (i=0; i<n; i++) {
if (A[i] > 0) {b=A[i]; A[i] = 1 / A[i]; }
if (A[i] > 1) {A[i] += b;}
}
レポートの推奨内容は次のとおりです。
/Qparallel オプションを使用して自動並列化を向上する。
変数 b を無条件で割り当てて、コンパイラーがループをベクトル化できるようにする。
/Qparallel オプションを追加して再度解析を実行し、結果を確認します。
[ソリューション エクスプローラー] で、GAP-c プロジェクトを右クリックして、[プロパティ] を選択します。 プロジェクトの [プロパティ ページ] ダイアログボックスが表示されます。
[構成プロパティ] > [C/C++]> [Optimization (最適化)] > [Intel Specific (インテル固有)] > [Parallelization (並列化)] ドロップダウン・リストで、[Enable Parallelization (/Qparallel) (並列化を有効にする (/Qparallel))] を選択し、[OK] ボタンをクリックします。
[ソリューション エクスプローラー] で、[Source Files (ソースファイル)] フォルダーを開き、scalar_dep.cpp を右クリックします。
[Intel Composer XE 2013 (インテル® Composer XE 2013)] > [Guided Auto Parallelism (ガイド付き自動並列化)] > [Run Analysis on file "scalar_dep.cpp" (ファイル "scalar_dep.cpp" の解析の実行)] を選択します。
[Analysis with Multi-file optimization (複数ファイル最適化の解析)] ダイアログボックスが表示されます。 [Run Analysis (解析の実行)] をクリックします。
メッセージボックスで、 ボタンをクリックします。
コンパイラーの出力結果を確認します。
scalar_dep.cpp(79) リマーク #30521: 変数 "b" に、ループ本体の最初 (行 79) で値を 代入します。これにより、ループが並列化されます。 [確認] プログラムにおいてループ の各反復で変数 "b" の読み込みを行う場合、変数はその反復以前に定義されていなけれ ばなりません。 scalar_dep.cpp(79) リマーク #30525: (PAR) "#pragma loop count min(256)" 文をルー プ (行 79) の直前に挿入して、このループを並列化します。[確認] ループの反復回数が 256 以上であることを確認してください。
最初のリマークは、変数 b が条件付きで割り当てられるため、コンパイラーがループを並列化できないことを示しています。 2 つ目のリマークは、コンパイラーがループを並列化するには、ループの反復回数が少なくとも指定した数以上でなければならないことを示しています。
次のステップでは、レポートの推奨内容を実装します。