並列化レポート

-par-report (Linux* および Mac OS* X) または /Qpar-report (Windows*) オプションは、自動パラレライザーの診断レベル 0、1、2、または 3 を制御します。値に 3 を指定して、詳細な診断レポートを生成します。

次のようなコマンドを入力して、診断レポートを実行します。

オペレーティング・システム

コマンド

Linux および Mac OS X

icpc -c -parallel -par-report 3 sample.cpp

Windows

icl /c /Qparallel /Qpar-report:3 sample.cpp

-c (Linux および Mac OS X) または /c (Windows) は、実行ファイルを生成しないでサンプルコードをコンパイルするようにコンパイラーに指示します。

Note icon

Linux および Mac OS X: オプションとフェーズの間のスペースはオプションです。

Windows: オプションとフェーズの間のコロンはオプションです。

例えば、次のコード例についての完全な診断レポートが必要であるとします。

void no_par(void)

{

  int i;

  int a[1000];

  for (i=1; i<1000; i++) {

    a[i] = (i * 2) % i * 1 + sqrt(i);

    a[i] = a[i-1] + i;

  }

}

次の例は、コンパイラーが上記のコード例に対して生成した診断レポートを示しています。たいていの場合、行の隣にリストされているコメントは説明です。

レポート出力例

procedure: no_par

sample.c(13):(3) remark #15048: ループが自動並列化されました

sample.c(13):(3) remark #15050: ループは並列化されませんでした。: 並列依存関係が存在しています。

sample.c(19):(5) remark #15051: 並列依存関係: FLOW の依存関係が a 行 19 と a 行 19 の間に証明されました。

対応方法

-par-threshold{n} (Linux および Mac OS X) または /Qpar-threshold[:n] (Windows) オプションは、並列ループ実行の有効性に基づいて、ループの自動並列化のしきい値を設定します。n の値は 0 から 100 までを設定できます。計算量にかかわらずループを自動並列化するには、-par-threshold0 (Linux および Mac OS X) または /Qpar-threshold:0 (Windows) を使用します。

推定される関数呼び出しへの副作用を回避するには、-ipo[value] (Linux および Mac OS X) または /Qipo (Windows) を使用します。