OpenMP* 宣言子と節の概要

ここでは、インテル® コンパイラーでサポートされている OpenMP 宣言子と節の概要を説明します。OpenMP API の詳細については、OpenMP Web サイト (http://www.openmp.org/) の OpenMP Application Program Interface バージョン 2.5 仕様を参照してください。

OpenMP 宣言子

宣言子

説明

PARALLEL
END PARALLEL

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

TASK
END TASK

タスク領域を定義します。

DO
END DO

関連付けられたループの反復がチーム内のスレッド間で分割される、反復的なワークシェアリングの構造を識別します。

SECTIONS
END SECTIONS

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

SECTION

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

SINGLE
END SINGLE

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

PARALLEL DO
END PARALLEL DO

1 つの DO 宣言子を含む PARALLEL 領域のショートカット。

Note icon

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

チームのマスタースレッドでのみ実行される構造ブロックを指定します。

CRITICAL[name]
END CRITICAL[name]

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

TASKWAIT

現在のタスクが開始してから生成された子タスクの完了まで待機するように指定します。

BARRIER

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

ATOMIC

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

FLUSH [(list)]

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

ORDERED
END ORDERED

囲まれた構造ブロックを、シーケンシャル・ループ内で反復が実行される順序で実行します。

THREADPRIVATE (list)

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

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 は、PRIVATESHARED、または NONE のいずれかです。

REDUCTION ({operator|intrinsic}:list)

演算子 operator または組み込み関数プロシージャー名 intrinsic を使用して、list にある変数のリダクションを実行します。operator は、+*.AND..OR..EQV..NEQV. のいずれかです。intrinsic は、MAXMINIANDIOR または IEOR のいずれかです。

ORDERED
END ORDERED

DO または SECTIONS 構造とともに使用され、コード部分を順次実行します。ORDERED 構造が DO 構造の動的範囲に含まれる場合、ordered 節は DO 宣言子になければなりません。

IF (expression)

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

式は、スカラー論理式でなければなりません。

NUM_THREADS (expression)

並列領域の expression により指定されるスレッド数を要求します。式は、スカラー整数式でなければなりません。

SCHEDULE (type[,chunk])

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

COLLAPSE (n)

コラプス用に OpenMP ループ構造に関連付けるループの数を指定します。

COPYIN (list)

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

   
   

UNTIED

再開されたタスクは、中断前にそのタスクを実行していたスレッドと同じスレッドによって実行される必要がないことを示します。

宣言子と節の対応表

「データスコープ属性節の概要」を参照してください。

宣言子

使用する節

PARALLEL
END PARALLEL

  • IF

  • NUM_THREADS

  • DEFAULT

  • PRIVATE

  • FIRSTPRIVATE

  • SHARED

  • COPYIN

  • REDUCTION

DO
END DO

  • SCHEDULE

  • PRIVATE

  • FIRSTPRIVATE

  • LASTPRIVATE

  • REDUCTION

  • ORDERED

  • NOWAIT

  • COLLAPSE

SECTIONS
END SECTIONS

  • PRIVATE

  • FIRSTPRIVATE

  • LASTPRIVATE

  • REDUCTION

  • NOWAIT

SECTION

なし

SINGLE
END SINGLE

  • PRIVATE

  • FIRSTPRIVATE

  • COPYPRIVATE

  • NOTWAIT

PARALLEL DO
END PARALLEL DO

  • IF

  • NUM_THREADS

  • SCHEDULE

  • DEFAULT

  • PRIVATE

  • FIRSTPRIVATE

  • LASTPRIVATE

  • SHARED

  • COPYIN

  • REDUCTION

  • ORDERED

  • COLLAPSE

PARALLEL SECTIONS
END PARALLEL SECTIONS

  • IF

  • NUM_THREADS

  • DEFAULT

  • PRIVATE

  • FIRSTPRIVATE

  • LASTPRIVATE

  • SHARED

  • COPYIN

  • REDUCTION

その他

なし