OpenMP* の使用

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

プラットフォーム

説明

Linux および Mac OS

icc -openmp input_file

Windows

icl /Qopenmp input_file

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

OpenMP オプション

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

openmp オプションは -O0 (Linux および Mac OS) と /Od (Windows)、および -O1-O2-O3 の任意の最適化レベルのどちらとも併用できます。(Linux および Mac OS) または /O1/O2 および /O3 (Windows)。

OpenMP オプションと -O0 (Linux および Mac OS) または /Od (Windows) を指定すると、OpenMP アプリケーションのデバッグに役立ちます。

Itanium(R) ベース・システム: このオプションを指定することは、-opt-mem-bandwith1 (Linux および Mac OS) または /Qopt-mem-bandwidth1 (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 および Mac OS) または /c (Windows) は、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。

プラットフォーム

説明

Linux および Mac OS

icc -openmp -c parallel.cpp

Windows

icl /Qopenmp /c parallel.cpp

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

parallel.c(20) : (col. 3) remark: OpenMP 定義ループが並列化されました。