インテル® Fortran コンパイラー 16.0 ユーザー・リファレンス・ガイド

OpenMP* サポートをアプリケーションに追加する

OpenMP* サポートをアプリケーションに追加するには、次の操作を行います。

  1. 適切な OpenMP* 宣言子をソースコードに追加します。

  2. [Q]openmp オプションを使用してアプリケーションをコンパイルします。

  3. 大規模なローカル配列や一時配列を持つアプリケーションの場合、実行時に利用可能なスタック領域を増やす必要があります。また、KMP_STACKSIZE 環境変数や対応するライブラリー・ルーチンを設定して、個々のスレッドに割り当てられるスタックを増やします。

マルチスレッド・コードの実行を制御するその他の環境変数を設定できます。

OpenMP* 宣言子構文

OpenMP* サポートをアプリケーションに追加するには、最初に適切な OpenMP* 宣言子をソースコードに追加します。

OpenMP* 宣言子は、特定の形式と構文を使用します。「OpenMP* のインテル拡張ルーチン」では、インテル® Fortran コンパイラーに追加された OpenMP* の拡張機能について説明されています。

次の構文は、ソースで宣言子を使用する例を示します。

<prefix> <directive> [<clause>[[,]<clause>...]]

説明:

[Q]openmp オプションを省略した場合、宣言子はコメントとして解釈されます。

並列領域を定義している OpenMP* 構造の構文形式は、次のいずれかです。

!$OMP <directive>
  <structured block of code> 
!$OMP END <directive> 
                  # OR 
!$OMP <directive>
  <structured block of code> 
                  # OR 
!$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

アプリケーションのコンパイル

[Q]openmp オプションを指定すると、並列化機能はソースの OpenMP* 宣言子に基づいてマルチスレッド・コードを生成します。このコードはシングル・プロセッサー・システム、マルチプロセッサー・システム、マルチコア・プロセッサー・システムで並列実行が可能です。

[Q]openmp オプションは、-O0 (Linux* および OS X*) または /Od (Windows*) と、最適化レベルの O1O2O3 で動作します。

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

次のようなコマンドを使用してアプリケーションをコンパイルします。

オペレーティング・システム

構文の例

Linux*

ifort -openmp source_file

OS X*

ifort -openmp source_file

Windows*

ifort /Qopenmp source_file

次のようなコマンドを使用して、上記の例をコンパイルすると仮定します。c オプションは、実行ファイルを生成しないでコードをコンパイルするようにコンパイラーに指示します。

オペレーティング・システム

拡張構文の例

Linux*

ifort -openmp -c parallel.f90

OS X*

ifort -openmp -c parallel.f90

Windows*

ifort /Qopenmp /c parallel.f90

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

parallel.f90(20) : (列 6) リマーク: OpenMP 定義ループが並列化されました。

OpenMP 環境の設定

マルチスレッド・コードを起動する前に、OpenMP* 環境変数 OMP_NUM_THREADS で使用するスレッドの数を設定できます。

関連情報