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