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 オプション (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 プラグマは、特定の形式と構文を使用します。次の構文および例では、ソースでプラグマを使用する方法を説明します。
構文 |
---|
#pragma omp directive-name [clause, ...] newline |
各アイテムの意味は次のとおりです。
#pragma omp - すべての OpenMP 宣言子に必須。
directive-name - 有効な OpenMP 宣言子。pragma の後および節の前に出力する必要があります。
clause - オプション。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 定義ループが並列化されました。