インテル®コンパイラー OpenMP*入門 デュアルコア・マルチコア対応アプリケーション開発@ <<  12  >> ここでは、自動並列化に関するレポートを出力させているので、どのループで並列化されたかが出力されています。 最初に示したように、自動並列化解析とは、コンパイラーによる並列実行可能なタスクの認識とそのタスク内での データの利用に関する解析です。コンパイラーは、プログラム内のループの構造をチェックし、その並列実行の 可能 性をチェックします。そのループを複数のタスクに分割できると判断した後で、並列処理が可能であるかどうかはそ れらのループ内でのデータの依存性の判断になります。例えば、次のような例では、各ループの実行は、その前の ループの反復計算の結果を必要としますので、依存性があることになります。従って、このようなループの自動並列 化はできません。コンパイラーは、依存性解析を行った結果をメッセージとしても出力しますので、そのメッセージな どを参考に並列化のためのプログラム変更などの検討ができます。 $ cat -n sample.c      1  #define N 1000      2  main ()      3  { int i;   double a[N], b[N], c[N];      4    for (i=1;i<= N; i++){      5            a[i] = a[i-1] + b[i] * c[i];      6    }      7  } $ icc -parallel -par-report3 -par-threshold0 sample.c    procedure: main    serial loop: line 5       flow data dependence from line 5 to line 5      flow data dependence from stmt 2 to stmt 2, due to "a" コンパイラーが生成するコードは、ハイレベルのマルチスレッド・ライブラリーを参照します。このマルチスレッド・ラ イブラリーは、この後で説明する OpenMP* でも共通に利用されます。これによって、自動並列化と OpenMP* の混在 が 可能となり、またオペレーティング・システムに関係なく、自動並列化の適用が 可能になります。