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