インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ここでは、インテル® Fortran コンパイラーでサポートされている OpenMP* ディレクティブの概要を説明します。OpenMP* API の詳細については、OpenMP* Web サイトの OpenMP Application Program Interface Version Technical Report 4: Version 5.0 仕様を参照してください。
次のリストで、ほかでも同じ名前が使用されている OpenMP* ディレクティブにはディレクティブと明記しています。例えば、FLUSH はディレクティブ、文、サブルーチンを指します。
このディレクティブを使用してスレッドのチームを形成しスレッドを並列に実行します。
ディレクティブ |
説明 |
---|---|
並列実行領域を定義します。 |
このディレクティブを使用して遅延実行を行います。
これらのディレクティブを使用してスレッドのチーム間のワークを共有します。
ディレクティブ |
説明 |
---|---|
関連付けられたループの反復がチーム内のスレッド間で分割される、反復的なワークシェアの構造を識別します。 |
|
囲まれた SECTION ディレクティブがチームのスレッド間に分割されるコードのブロックを定義することを指定します。各セクションは、チーム内のスレッドにより 1 回だけ実行されます。 |
|
コードのスレッドが一度に 1 つのスレッドでのみ実行されることを指定します。 |
|
文または構造のブロックを実行する作業を個別のユニットに分割します。また、実行単位の作業をチームのスレッドに分配して、各作業単位が 1 回だけ実行されるようにします。 |
これらのディレクティブを使用してスレッド間を同期します。
ディレクティブ |
説明 |
---|---|
特定のメモリー位置をアトミックに更新し、複数のスレッドが同時に読み取り/書き込みを行う危険性を回避します。 |
|
チーム内のすべてのスレッドを同期化します。各スレッドは、チーム内のほかのすべてのスレッドがバリアに到達するまで待機します。 |
|
コードのブロックへのアクセスを一度に 1 つのスレッドのみに制限します。 |
|
チームのスレッドでメモリーの状態の整合性が保たれる同期ポイントを定義します。 |
|
チームのマスタースレッドで実行されるコードブロックを指定します。 |
|
チームのスレッドがループの反復順に実行するスレッドのコードブロックを指定します。 |
|
現在のタスクの子タスクと派生タスクがすべて完了するまで待機するように指定します。 |
|
現在のタスクが開始してから、生成された子タスクの完了まで待機するように指定します。 |
|
現在のタスクを中断し、別のタスクの実行を優先することを許可します。 |
このディレクティブを使用してグローバルなプライベート・データをスレッドに割り当てます。
ディレクティブ |
説明 |
---|---|
各スレッドにプライベート (ローカル) な名前付き共通ブロック (スレッド内ではグローバル) を指定します。 |
これらのディレクティブを使用して 1 つ以上のオフロードターゲット上の実行を制御します。
ディレクティブ |
説明 |
---|---|
デバイス向けに作成、またはマップする名前付きルーチンと変数を指定します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
teams 構文により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。 |
|
デバイスデータ環境を作成してそのデバイスで構文を実行します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。 |
|
領域の範囲のデバイスデータ環境へ変数をマップします。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。 |
|
デバイスのデータ環境へ変数をマップします。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
デバイスのデータ環境から変数をアンマップ (解放) します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
デバイスデータ環境のリスト項目と対応するオリジナルのリスト項目の整合性を保持します。 |
|
ターゲット領域内でスレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。 |
これらのディレクティブを使用してベクトル・ハードウェア上の実行を制御します。
ディレクティブ |
説明 |
---|---|
ループを SIMD (Single Instruction, Multiple Data) 命令を使用して同時に実行されるループにベクトル化します。 EARLY_EXIT 節は、インテル独自の OpenMP* 仕様の拡張です。 EARLY_EXIT 複数の終了ポイントを持つループのベクトル化を許可します。この節を指定すると、プログラムは次のように振る舞います。
|
|
SIMD プロシージャーを生成します。 |
ディレクティブ |
説明 |
---|---|
指定した構文の最内領域の取り消し要求を行います。このプラグマに到達したタスクは、取り消された構文の最後に進みます。 |
|
暗黙的または明示的なタスクが、指定された節の最内領域で取り消し要求があったかどうかをチェックするポイントを定義します。 |
これらのディレクティブは、連続する複数のディレクティブのショートカットとして使用します。結合構造は、ある構造内に別の構造を入れ子するためのショートカット形式です。内部に別の構造を 1 つだけ含み、ほかの文を含まない構造を明示的に指定することと同じです。
複合構造は、2 つの構造から成り、構造内に別の構造を入れ子する場合とセマンティクスが異なります。複合構造は、その構成要素である 2 つの構造には含まれないセマンティクスを追加したり、構造内に別の構造を入れ子することが不適合な場合に使用します。
ディレクティブ |
説明 |
---|---|
複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。 |
|
複数のチームのメンバーである複数のスレッドによって並列に実行されるループを指定します。また、ループは SIMD 命令を使用して同時に実行されます。 |
|
チーム領域のマスタースレッド間で分配されるループを指定します。また、ループは SIMD 命令を使用して同時に実行されます。 |
|
SIMD 命令による同時実行も適用されます。 |
|
1 つの DO ディレクティブを含む並列領域を簡潔に指定する方法を提供します。 |
|
SIMD 命令による同時実行も適用されます。1 つの SIMD ループ構造だけを含み、その他の文を含まない PARALLEL 構造を簡潔に指定する方法を提供します。 |
|
1 つの SECTIONS ディレクティブを含む並列領域を簡潔に指定する方法を提供します。セマンティクスは SECTIONS ディレクティブが直後に続く PARALLEL ディレクティブを明示的に指定することと同じです。 |
|
1 つの WORKSHARE ディレクティブを含む並列領域を簡潔に指定する方法を提供します。 |
|
並列領域でデバイスデータ環境を作成して、そのデバイスで構文を実行します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
1 つの PARALLEL DO 構造だけを含み、その他の文を含まない TARGET 構造を簡潔に指定する方法を提供します。 |
|
1 つの PARALLEL DO SIMD 構造だけを含み、その他の文を含まない TARGET 構造を簡潔に指定する方法を提供します。 |
|
1 つの SIMD 構造だけを含み、その他の文を含まない TARGET 構造を指定します。 |
|
デバイスデータ環境を作成して同じデバイスで構文を実行します。また、スレッドチームを複数作成し、各チームのマスタースレッドが構造化ブロックを実行します。このプラグマは、インテル® MIC アーキテクチャーにのみ適用されます。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、TEAMS 構造により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、TEAMS 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、TEAMS 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。ループはチーム全体に分配され、SIMD 命令を使用して同時に実行されます。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構文により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。また、ループは SIMD 命令を使用して同時に実行されます。このディレクティブは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
|
SIMD 命令を使用して同時に実行可能で、反復が OpenMP* タスクを使用して並列に実行されるループを指定します。 |
|
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、TEAMS 構造により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。 |
|
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。 |
|
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。ループはチーム領域のマスタースレッド間で分配され、SIMD 命令を使用して命令レベルで同時に実行されます。 |
|
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、チーム領域のマスタースレッド間で分配されるループを指定します。 |
脚注:
1 このディレクティブは、複合構造を指定します。