OpenMP* ディレクティブと節の概要

このトピックでは、OpenMP* ディレクティブと節の概要を説明します。詳細は、「OpenMP Fortran バージョン 2.0 仕様」を参照してください。

OpenMP ディレクティブ

ディレクティブ

説明

PARALLEL
END PARALLEL

並列実行領域を定義します。

DO
END DO

関連付けられたループの反復が並列実行される領域を指定する、反復的なワークシェアリングの構造を識別します。

SECTIONS
END SECTIONS

チーム内のスレッド間で分割される一連の構造ブロックを指定する、非反復的なワークシェアリングの構造を識別します。

SECTION

囲まれた SECTION 構造の部分として、関連する構造ブロックを並列実行するように指定します。

SINGLE
END SINGLE

対応する構造化ブロックがチーム内の 1 つのスレッドだけで実行されるように指定する構造を識別します。

PARALLEL DO
END PARALLEL DO

1 つの DO ディレクティブを含む並列領域のショートカット。


OpenMP ディレクティブ PARALLEL DO または DO の直後には、DO 文 (ANSI Fortran 規格の R818 に定義された do-stmt) を続けなければなりません。PARALLEL DO または DO ディレクティブと DO 文の間に、他の文または OpenMP ディレクティブがあると、インテル® Fortran コンパイラは構文エラーを生成します。

PARALLEL SECTIONS
END PARALLEL SECTIONS

1 つの SECTIONS 構造を含む並列領域を指定するショートカット形式。

MASTER
END MASTER

チームの MASTER スレッドのみで実行する構造ブロックを指定する構成体を示します。

CRITICAL[lock]
END CRITICAL[lock]

関連する構造ブロックの実行を一度に 1 スレッドだけに制限する構成体を示します。関連する構造ブロックの実行を一度に 1 スレッドだけに制限する構造を示します。各スレッドは、他のスレッドが同じ lock 引数でクリティカル構造を実行しなくなるまで、クリティカル構造の最初で待機します。

BARRIER

チーム内のすべてのスレッドを同期化します。各スレッドは、チーム内の他のすべてのスレッドがこのポイントに到達するまで待機します。

ATOMIC

特定のメモリ・ロケーションをアトミックに更新し、同時に複数のスレッドによる書き込みの危険性を回避するようにします。

FLUSH [(list)]

"クロススレッド" シーケンス・ポイントを指定します。このポイントでは、チーム内のすべてのスレッドから見たメモリ内の特定のオブジェクトの状態の整合性が保たれるように、プログラム上で保証する必要があります。オプションの list 引数は、フラッシュする変数をカンマ区切りでリストします。

ORDERED
END ORDERED

ORDERED ディレクティブに続く構造ブロックを、シーケンシャル・ループ内で反復が実行される順序で実行します。

THREADPRIVATE (list)

名前付きの COMMON ブロックまたは変数をスレッドに対してプライベートにします。list 引数は、COMMON ブロックまたは変数をカンマ区切りでリストします。

OpenMP の節

説明

PRIVATE (list)

list の変数がチーム内の各スレッドに対して PRIVATE になるように宣言します。

FIRSTPRIVATE  (list)

PRIVATE と同じですが、list の各変数のコピーは、 並列処理構造の前に存在するオリジナルの変数の値を使用して初期化されます。

LASTPRIVATE (list)

PRIVATE と同じですが、list のオリジナルの変数は、DO 構造ルー プまたは最後の SECTION 構造における最後の繰返しで、対応する PRIVATE 変数に割り当てられた値に更新されます。

COPYPRIVATE  (list)

単一構造の最後で、チーム内メンバから他のメンバに値をブロードキャストするために、list の PRIVATE 変数を使用するか、または共有オブジェクト へのポインタを使用します。

NOWAIT

実行終了までワークシェアリング構造の最後でスレッドを待機させる必要がないことを指示します。スレッドは、実行する作業がなくなるとすぐに、 ワークシェアリング構造の最後から先に進むことができます。

SHARED (list)

チーム内のすべてのスレッド間で list 内の変数を共有します。

DEFAULT (mode)

他の節により明示的に指定されていない変数のデフォルト・データスコープ属性を決定します。mode は、PRIVATE、SHARED、または NONE のいずれかです。

REDUCTION ({operator|intrinsic}:list)

演算子 operator または組込み関数プロシージャ名 intrinsic を使用して、 list にある変数のリダクションを実行します。operator は、+*.and..or..eqv..neqv. のいずれかです。intrinsic は、MAX、MIN、IAND、IOR または IEOR のいずれかです。

ORDERED
END ORDERED

DO または SECTIONS 構造と共に使用され、コード部分を順次実行します。ORDERED 構造が DO 構造の動的範囲に含まれる場合、ORDERED 節は DO ディレクティブになければなりません。

IF  (scalar_logical_expression)

囲まれた並列領域は、scalar_logical_expression.TRUE. と評価された場合にのみ並列で実行されます。そうでない場合、並列領域は順次実行されます。

NUM_THREADS (scalar_integer_expression)

並列領域の scalar_integer_expression により指定されるスレッド数を要求します。

SCHEDULE (type[,chunk])

DO 構造の繰返しをチームのスレッド間でどのように分割するかを指定します。type 引数の値は、STATIC、DYNAMIC、GUIDED、または RUNTIME です。オプションの chunk 引数は、正のスカラ整数式でなければなりません。

COPYIN (list)

並列領域の最初で、マスタスレッドのデータ値を、THREADPRIVATE 共通ブロックのコピー、または list で指定された変数に複写するように指定します。

ディレクティブと節の対応表

ディレクティブ

使用する節

PARALLEL
END PARALLEL

COPYIN、DEFAULT、PRIVATE、FIRSTPRIVATE、REDUCTION、SHARED

DO
END DO

PRIVATE、FIRSTPRIVATE、LASTPRIVATE、REDUCTION、SCHEDULE

SECTIONS
END SECTIONS

PRIVATE、FIRSTPRIVATE、LASTPRIVATE、REDUCTION

SECTION

PRIVATE、FIRSTPRIVATE、LASTPRIVATE、REDUCTION

SINGLE
END SINGLE

PRIVATE、FIRSTPRIVATE

PARALLEL DO
END PARALLEL DO

COPYIN、DEFAULT、 PRIVATE、FIRSTPRIVATE、LASTPRIVATE、REDUCTION、SHARED、SCHEDULE

PARALLEL SECTIONS
END PARALLEL SECTIONS

COPYIN、DEFAULT、 PRIVATE、FIRSTPRIVATE、LASTPRIVATE、REDUCTION、SHARED

MASTER
END MASTER

なし

CRITICAL[lock]
END CRITICAL[lock]

なし

BARRIER

なし

ATOMIC

なし

FLUSH [(list)]

なし

ORDERED
END ORDERED

なし

THREADPRIVATE (list)

なし