インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

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

ここでは、インテル® Fortran コンパイラーでサポートされている OpenMP* ディレクティブの概要を説明します。OpenMP* API の詳細については、OpenMP* Web サイトの OpenMP Application Program Interface Version Technical Report 4: Version 5.0 仕様を参照してください。

次のリストで、ほかでも同じ名前が使用されている OpenMP* ディレクティブにはディレクティブと明記しています。例えば、FLUSH はディレクティブ、文、サブルーチンを指します。

並列ディレクティブ

このディレクティブを使用してスレッドのチームを形成しスレッドを並列に実行します。

ディレクティブ

説明

PARALLEL ディレクティブ (OpenMP*)

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

タスキング・ディレクティブ

このディレクティブを使用して遅延実行を行います。

ディレクティブ

説明

TASK

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

TASKLOOP

1 つ以上の関連する DO ループの反復を OpenMP* タスクを使用して並列に実行するように指定します。反復は、構文によって作成されるタスクに分配され、実行がスケジュールされます。

ワークシェアリング・ディレクティブ

これらのディレクティブを使用してスレッドのチーム間のワークを共有します。

ディレクティブ

説明

DO ディレクティブ

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

SECTIONS

囲まれた SECTION ディレクティブがチームのスレッド間に分割されるコードのブロックを定義することを指定します。各セクションは、チーム内のスレッドにより 1 回だけ実行されます。

SINGLE

コードのスレッドが一度に 1 つのスレッドでのみ実行されることを指定します。

WORKSHARE

文または構造のブロックを実行する作業を個別のユニットに分割します。また、実行単位の作業をチームのスレッドに分配して、各作業単位が 1 回だけ実行されるようにします。

同期ディレクティブ

これらのディレクティブを使用してスレッド間を同期します。

ディレクティブ

説明

ATOMIC

特定のメモリー位置をアトミックに更新し、複数のスレッドが同時に読み取り/書き込みを行う危険性を回避します。

BARRIER

チーム内のすべてのスレッドを同期化します。各スレッドは、チーム内のほかのすべてのスレッドがバリアに到達するまで待機します。

CRITICAL Directive

コードのブロックへのアクセスを一度に 1 つのスレッドのみに制限します。

FLUSH Directive

チームのスレッドでメモリーの状態の整合性が保たれる同期ポイントを定義します。

MASTER

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

ORDERED

チームのスレッドがループの反復順に実行するスレッドのコードブロックを指定します。

TASKGROUP

現在のタスクの子タスクと派生タスクがすべて完了するまで待機するように指定します。

TASKWAIT

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

TASKYIELD

現在のタスクを中断し、別のタスクの実行を優先することを許可します。

データ環境ディレクティブ

このディレクティブを使用してグローバルなプライベート・データをスレッドに割り当てます。

ディレクティブ

説明

THREADPRIVATE

各スレッドにプライベート (ローカル) な名前付き共通ブロック (スレッド内ではグローバル) を指定します。

オフロードターゲットを制御するディレクティブ

これらのディレクティブを使用して 1 つ以上のオフロードターゲット上の実行を制御します。

ディレクティブ

説明

DECLARE TARGET

デバイス向けに作成、またはマップする名前付きルーチンと変数を指定します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

DISTRIBUTE

teams 構文により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。

TARGET Directive

デバイスデータ環境を作成してそのデバイスで構文を実行します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。

TARGET DATA

領域の範囲のデバイスデータ環境へ変数をマップします。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。

TARGET ENTER DATA

デバイスのデータ環境へ変数をマップします。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET EXIT DATAOpenMP

デバイスのデータ環境から変数をアンマップ (解放) します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET UPDATE

デバイスデータ環境のリスト項目と対応するオリジナルのリスト項目の整合性を保持します。
このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。

TEAMS

ターゲット領域内でスレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。

ベクトル化ディレクティブ

これらのディレクティブを使用してベクトル・ハードウェア上の実行を制御します。

ディレクティブ

説明

SIMD ディレクティブ (OpenMP*)

ループを SIMD (Single Instruction, Multiple Data) 命令を使用して同時に実行されるループにベクトル化します。

EARLY_EXIT 節は、インテル独自の OpenMP* 仕様の拡張です。

EARLY_EXIT

複数の終了ポイントを持つループのベクトル化を許可します。この節を指定すると、プログラムは次のように振る舞います。

  • ループの最後の途中終了文の前にある各操作は、SIMD チャンク内で途中終了がトリガーされなかったかのように実行されることがあります。

  • ループの最後の途中終了文の後、すべての操作はループの最後の反復が見つかったかのように実行されます。

  • LINEAR で指定された各リスト項目は、ループ終了時の最後の反復数に基づいて計算されます。

  • LINEAR の最後の値と条件付き LASTPRIVATE 節は、スカラー実行では保持されます。

  • REDUCTION の最後の値は、ループ終了時に最後の SIMD チャンクの最後の反復が実行されたかのように計算されます。

  • 共有メモリーの状態は、スカラー実行では保持されないことがあります。

  • 例外は許可されません。

DECLARE SIMD

SIMD プロシージャーを生成します。

キャンセル構文

ディレクティブ

説明

CANCEL

指定した構文の最内領域の取り消し要求を行います。このプラグマに到達したタスクは、取り消された構文の最後に進みます。

CANCELLATION POINT

暗黙的または明示的なタスクが、指定された節の最内領域で取り消し要求があったかどうかをチェックするポイントを定義します。

結合ディレクティブ

これらのディレクティブは、連続する複数のディレクティブのショートカットとして使用します。結合構造は、ある構造内に別の構造を入れ子するためのショートカット形式です。内部に別の構造を 1 つだけ含み、ほかの文を含まない構造を明示的に指定することと同じです。

複合構造は、2 つの構造から成り、構造内に別の構造を入れ子する場合とセマンティクスが異なります。複合構造は、その構成要素である 2 つの構造には含まれないセマンティクスを追加したり、構造内に別の構造を入れ子することが不適合な場合に使用します。

ディレクティブ

説明

DISTRIBUTE PARALLEL DO1

複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。

DISTRIBUTE PARALLEL DO SIMD1

複数のチームのメンバーである複数のスレッドによって並列に実行されるループを指定します。また、ループは SIMD 命令を使用して同時に実行されます。

DISTRIBUTE SIMD1

チーム領域のマスタースレッド間で分配されるループを指定します。また、ループは SIMD 命令を使用して同時に実行されます。

DO SIMD1

SIMD 命令による同時実行も適用されます。

PARALLEL DO

1 つの DO ディレクティブを含む並列領域を簡潔に指定する方法を提供します。

PARALLEL DO SIMD

SIMD 命令による同時実行も適用されます。1 つの SIMD ループ構造だけを含み、その他の文を含まない PARALLEL 構造を簡潔に指定する方法を提供します。

PARALLEL SECTIONS

1 つの SECTIONS ディレクティブを含む並列領域を簡潔に指定する方法を提供します。セマンティクスは SECTIONS ディレクティブが直後に続く PARALLEL ディレクティブを明示的に指定することと同じです。

PARALLEL WORKSHARE

1 つの WORKSHARE ディレクティブを含む並列領域を簡潔に指定する方法を提供します。

TARGET PARALLEL

並列領域でデバイスデータ環境を作成して、そのデバイスで構文を実行します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET PARALLEL DO

1 つの PARALLEL DO 構造だけを含み、その他の文を含まない TARGET 構造を簡潔に指定する方法を提供します。

TARGET PARALLEL DO SIMD

1 つの PARALLEL DO SIMD 構造だけを含み、その他の文を含まない TARGET 構造を簡潔に指定する方法を提供します。

TARGET SIMD

1 つの SIMD 構造だけを含み、その他の文を含まない TARGET 構造を指定します。

TARGET TEAMS

デバイスデータ環境を作成して同じデバイスで構文を実行します。また、スレッドチームを複数作成し、各チームのマスタースレッドが構造化ブロックを実行します。このプラグマは、インテル® MIC アーキテクチャーにのみ適用されます。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET TEAMS DISTRIBUTE

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、TEAMS 構造により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET TEAMS DISTRIBUTE PARALLEL DO

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、TEAMS 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET TEAMS DISTRIBUTE PARALLEL DO SIMD

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、TEAMS 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。ループはチーム全体に分配され、SIMD 命令を使用して同時に実行されます。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TARGET TEAMS DISTRIBUTE SIMD

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構文により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。また、ループは SIMD 命令を使用して同時に実行されます。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。

TASKLOOP SIMD1

SIMD 命令を使用して同時に実行可能で、反復が OpenMP* タスクを使用して並列に実行されるループを指定します。

TEAMS DISTRIBUTE

スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、TEAMS 構造により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。

TEAMS DISTRIBUTE PARALLEL DO

スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。

TEAMS DISTRIBUTE PARALLEL DO SIMD

スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。ループはチーム領域のマスタースレッド間で分配され、SIMD 命令を使用して命令レベルで同時に実行されます。

TEAMS DISTRIBUTE SIMD

スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、チーム領域のマスタースレッド間で分配されるループを指定します。

脚注:

1 このディレクティブは、複合構造を指定します。