OpenMP*、宣言子形式、および診断でのコンパイル

OpenMP* モードでインテル(R) コンパイラーを起動するには、次のように -openmp オプション (Linux*) または /Qopenmp オプション (Windows*) を指定して、コンパイラーを起動します。

プラットフォーム

説明

Linux

icpc -openmp input_file

Windows

icl /Qopenmp input_file

マルチスレッド・コードを起動する前に、OpenMP 環境変数 OMP_NUM_THREADS で使用するスレッドの数を設定できます。詳細は、「OpenMP* の環境変数」のセクションを参照してください。「インテル拡張ルーチン/関数」では、インテル・コンパイラーの仕様に追加された OpenMP 拡張機能について説明します。

OpenMP オプション

-openmp オプション (Linux) または /Qopenmp オプション (Windows) は、パラレライザーが OpenMP 宣言子に基づいてマルチスレッド・コードを生成できるようにします。このコードは、単一プロセッサー・システム、マルチプロセッサー・システム、およびデュアルコア・プロセッサー・システムで並列実行が可能です。

-openmp オプション (Linux) または /Qopenmp オプション (Windows) は、-O0 (Linux) と /Od (Windows)、あるいは -O1-O2-O3 (Linux) または /O1/O2/O3 (Windows) の最適化レベルで動作します。OpenMP オプションと -O0 (Linux) または /Od (Windows) を指定すると、OpenMP アプリケーションのデバッグに役立ちます。

Itanium(R) ベース・システム: このオプションを指定することは、-opt-mem-bandwith1 (Linux) または /Qopt-mem-bandwidth1 (Windows) を意味します。

openmp オプションを使用すると、コマンドラインで他のオプションを指定しない限り、-auto オプション (Linux) または /Qauto オプション (Windows) が設定されます (すべての変数を、ローカル静的記憶域ではなく、スタックに割り当てます)。

OpenMP プラグマの形式と構文

OpenMP プラグマは、特定の形式と構文を使用します。次の構文および例では、ソースでプラグマを使用する方法を説明します。

構文

#pragma omp directive-name [clause, ...] newline

各アイテムの意味は次のとおりです。

次の例では、OpenMP プラグマを使用して並列領域内のループを並列化する 1 つの方法を説明します。

int i;

void simple_omp(int *a){

  #pragma omp parallel for

  for (i=0; i<1024; i++)

    a[i] = i*2;

}

次のようなコマンドを使用して、上記の例をコンパイルすると仮定します。-c (Linux) または /c (Windows) は、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。

プラットフォーム

説明

Linux

icpc -openmp -c parallel.c

Windows

icl /Qopenmp /c parallel.c

コンパイラーは、次のようなメッセージを表示します。

parallel.c(20) : (col. 3) remark: OpenMP DEFINED LOOP WAS PARALLELIZED.

OpenMP 診断レポート

-openmp-report オプション (Linux) または /Qopenmp-report オプション (Windows) は、OpenMP パラレライザーの診断レベル 012 を次のように制御します。

Windows

Linux

説明

/Qopenmp-report0

-openmp-report0

診断情報を表示しません。

/Qopenmp-report1

-openmp-report1

正常に並列化されたループ、領域、およびセクションを示す診断を表示します。

/Qopenmp-report2

-openmp-report2

1 に加えて、正常に処理された MASTERSINGLECRITICALORDEREDATOMIC 宣言子などの構造を示す診断を指定するのと同じです。

上記のオプションの動作に関する詳細は、「コンパイラー・オプション」で次のトピックを参照してください。