アプリケーションで OpenMP* を使用するには、いくつかのステップがあります。OpenMP* を使用するには、次の操作が必要です。
OpenMP* 宣言子をアプリケーションのソースコードに追加します。
アプリケーションを -openmp (Linux* および Mac OS* X) オプションまたは /Qopenmp (Windows*) オプションでコンパイルします。
大規模なローカル配列や一時配列を持つアプリケーションの場合、実行時に利用可能なスタック領域を増やす必要があります。また、KMP_STACKSIZE 環境変数や対応するライブラリー・ルーチンを設定して、個々のスレッドに割り当てられるスタックを増やします。
マルチスレッド・コードの実行用にその他の環境変数を設定できます。
次のような文をコードに追加して、OpenMP* API ルーチン宣言をアプリケーションに追加します。
例 |
---|
use omp_lib |
OpenMP* 宣言子は、特定の形式と構文を使用します。「OpenMP* のインテル拡張ルーチン」では、インテル® コンパイラーに追加された OpenMP* の拡張機能について説明されています。
次の構文は、ソースで宣言子を使用する例を示します。
例 |
---|
<prefix> <directive> [<clause>[[,]<clause>...]] |
説明:
<prefix> - すべての OpenMP* 宣言子に必須。自由形式のソース入力の場合、プリフィックスは !$OMP のみです。固定形式のソース入力の場合、プリフィックスは !$OMP または C$OMP です。
<directive> - 有効な OpenMP* 宣言子。プリフィックスの直後に必ず指定する必要があります。例: !$OMP PARALLEL
[<clause>] - オプション。clause は順番に関係なく指定でき、制限されていない限り必要に応じて繰り返すことができます。
[<newline>] - 宣言子構文で必要なコンポーネント。この宣言子に囲まれた構造ブロックを続行します。
[,]: オプション。<clause> 間のカンマはオプションです。
-openmp (Linux* および Mac OS* X) オプションまたは /Qopenmp (Windows*) オプションを省略した場合は、宣言子はコメントとして解釈されます。
並列領域を定義している OpenMP* 構造の構文形式は、次のいずれかです。
例 |
---|
!$OMP <directive> <structured block of code> !$OMP END <directive> または !$OMP <directive> <structured block of code> または !$OMP <directive> |
次の例は、OpenMP* 宣言子を使用してループを並列化する 1 つの方法を説明します。
例 |
---|
subroutine simple_omp(a, N) use omp_lib integer :: N, a(N) !$OMP PARALLEL DO do i = 1, N a(i) = i*2 end do end subroutine simple_omp |
特定の状況で宣言子を使用するその他の例は、「OpenMP* の例」を参照してください。
-openmp オプション (Linux* および Mac OS* X) または /Qopenmp オプション (Windows*) により、パラレライザーはソースの OpenMP* 宣言子に基づいてマルチスレッド・コードを生成します。このコードはシングル・プロセッサー・システム、マルチ・プロセッサー・システム、マルチコア・プロセッサー・システムで並列実行が可能です。
openmp オプションは、-O0 (Linux* および Mac OS* X) と /Od (Windows*)、および -O1、-O2、-O3 (Linux* および Mac OS* X) または /O1、/O2、/O3 (Windows*) の任意の最適化レベルのどちらとも併用できます。
OpenMP* オプションと -O0 (Linux* および Mac OS* X) または /Od (Windows*) を指定すると、OpenMP* アプリケーションのデバッグに役立ちます。
次のようなコマンドを使用してアプリケーションをコンパイルします。
オペレーティング・システム |
説明 |
---|---|
Linux* および Mac OS* X |
ifort -openmp source_file |
Windows |
ifort /Qopenmp source_file |
次のようなコマンドを使用して、上記の例をコンパイルすると仮定します。-c (Linux* および Mac OS* X) または /c (Windows*) は、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。
オペレーティング・システム |
例 |
---|---|
Linux* および Mac OS* X |
ifort -openmp -c parallel.f90 |
Windows |
ifort /Qopenmp /c parallel.f90 |
コンパイラーは、次のようなメッセージを表示します。
parallel.f90(20) : (列 6) リマーク: OpenMP 定義ループが並列化されました。
OpenMP 環境の設定
マルチスレッド・コードを起動する前に、OpenMP* 環境変数 OMP_NUM_THREADS で使用するスレッドの数を設定できます。「OpenMP* 環境変数」を参照してください。
© 1996-2011 Intel Corporation. 無断での引用、転載を禁じます。