インテル® C++ コンパイラー 14.0 ユーザー・リファレンス・ガイド
OpenMP* サポートをアプリケーションに追加するには、次の操作を行います。
適切な OpenMP* プラグマをソースコードに追加します。
[Q]openmp オプションを使用してアプリケーションをコンパイルします。
大規模なローカル配列や一時配列を持つアプリケーションの場合、実行時に利用可能なスタック領域を増やす必要があります。また、KMP_STACKSIZE 環境変数や対応するライブラリー・ルーチンを設定して、個々のスレッドに割り当てられるスタックを増やします。
マルチスレッド・コードの実行を制御するその他の環境変数を設定できます。
OpenMP* サポートをアプリケーションに追加するには、最初に OpenMP* ヘッダーを宣言し、適切な OpenMP* プラグマをソースコードに追加します。
OpenMP* ヘッダーを宣言するには、コードに次の文を追加します。
#include <omp.h>
OpenMP* プラグマは、特定の形式と構文を使用します。 「OpenMP* のインテル拡張ルーチン」では、インテル® コンパイラーに追加された OpenMP* の拡張機能について説明されています。
次の構文は、ソースでプラグマを使用する例を示します。
説明:
<prefix> - すべての OpenMP* プラグマに必須。 プリフィックスは #pragma omp です。
<pragma> - 有効な OpenMP* プラグマです。 プリフィックスの直後に必ず指定する必要があります。
[<clause>] - オプション。clause は順番に関係なく指定でき、制限されていない限り必要に応じて繰り返すことができます。
[<newline>] - プラグマ構文で必要なコンポーネント。 このプラグマに囲まれた構造ブロックを続行します。
[Q]openmp オプションを省略した場合、プラグマはコメントとして解釈されます。
次の例は、OpenMP* プラグマを使用してループを並列化する 1 つの方法を説明します。
[Q]openmp オプションを指定すると、パラレライザーはソースの OpenMP* プラグマに基づいてマルチスレッド・コードを生成します。 このコードはシングル・プロセッサー・システム、マルチプロセッサー・システム、マルチコア・プロセッサー・システムで並列実行が可能です。
[Q]openmp オプションは、-O0 (Linux* および OS X*) または /Od (Windows*) と、最適化レベルの -O1、-O2、-O3 (Linux* および OS X*) または /O1、/O2、/O3 (Windows*) で動作します。
OpenMP* オプションと -O0 (Linux* および OS X*) または /Od (Windows*) を指定すると、OpenMP* アプリケーションのデバッグに役立ちます。
次のようなコマンドを使用してアプリケーションをコンパイルします。
次のようなコマンドを使用して、上記の例をコンパイルすると仮定します。c オプションは、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。
オペレーティング・システム |
例 |
|---|---|
Linux* および OS X* |
icc -openmp -c parallel.cpp -openmp-report |
Windows* |
icl /Qopenmp /c parallel.cpp /Qopenmp-report |
コンパイラーは、次のようなメッセージを表示します。
parallel.cpp(20) : (列 3) リマーク: OpenMP 定義ループが並列化されました。
OpenMP 環境の設定
マルチスレッド・コードを起動する前に、OpenMP* 環境変数 OMP_NUM_THREADS で使用するスレッドの数を設定できます。