インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ここでは、インテル® C++ コンパイラーでサポートされている OpenMP* プラグマの概要を説明します。OpenMP* API の詳細については、OpenMP* Web サイトの OpenMP Application Program Interface Version Technical Report 4: Version 5.0 仕様を参照してください。
このプラグマを使用してスレッドのチームを形成しスレッドを並列に実行します。
プラグマ |
説明 |
---|---|
omp parallel |
スレッドのチームにより並列に実行される構造化ブロックを指定します。 |
このプラグマを使用して遅延実行を行います。
プラグマ |
説明 |
---|---|
omp task |
タスクとして実行するコードブロックを指定します。 |
omp taskloop |
1 つ以上の関連する for ループの反復を OpenMP* タスクを使用して並列に実行するように指定します。反復は、構文によって作成されるタスクに分配され、実行がスケジュールされます。 |
これらのプラグマを使用してスレッドのチーム間のワークを共有します。
プラグマ |
説明 |
---|---|
omp for |
並列ループを指定します。ループの各反復は、チーム内の 1 つのスレッドにより実行されます。 |
omp sections |
チーム内のスレッド間で分配される構造化ブロック領域を定義します。 |
omp single |
コードのスレッドが一度に 1 つのスレッドでのみ実行されることを指定します。 |
これらのプラグマを使用してスレッド間を同期します。
プラグマ |
説明 |
---|---|
omp atomic |
アトミックに実行する必要がある計算を指定します。 |
omp barrier |
チーム内のすべてのスレッドが到着するまで各スレッドが待機しなければならないコード位置を指定します。 |
omp critical |
一度に 1 つのスレッドのみアクセスできるコードブロックを指定します。 |
omp flush |
スレッドから見たメモリーの状態と実際のメモリーの整合性が保たれるポイントを定義します。 |
omp master |
チームのマスタースレッドで 1 回だけ実行するコードブロックの開始位置を指定します。 |
omp ordered |
チームのスレッドがループの反復順に実行するスレッドのコードブロックを指定します。 |
omp taskgroup |
囲まれたタスクと派生タスクがすべて完了するまでプログラムを待機させます。 |
omp taskwait |
現在のタスクが開始してから、生成された子タスクの完了まで待機するように指定します。 |
omp taskyield |
現在のタスクを中断し、別のタスクの実行を優先することを許可します。 |
このプラグマを使用してグローバルなプライベート・データをスレッドに割り当てます。
プラグマ |
説明 |
---|---|
omp threadprivate |
各スレッドにプライベートとして割り当てられるグローバル変数のリストを指定します。 |
これらのプラグマを使用して 1 つ以上のオフロードターゲット上の実行を制御します。
プラグマ |
説明 |
---|---|
omp declare target |
デバイス向けに作成、またはマップする関数と変数を指定します。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーまたはインテル® グラフィックス・テクノロジーをターゲットとする場合にのみ適用されます。 |
omp distribute |
1 つ以上のループの反復をすべてのスレッドチームのマスタースレッド間で分配するかどうかを指定します。 |
omp target |
デバイスデータ環境を作成してそのデバイスで構文を実行します。このディレクティブは、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーにのみ適用されます。 |
omp target data |
領域の範囲のデバイスデータ環境へ変数をマップします。このプラグマは、インテル® MIC アーキテクチャーにのみ適用されます。 |
omp target enter data |
デバイスのデータ環境へ変数をマップします。このプラグマは、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーにのみ適用されます。 |
omp target exit data |
デバイスのデータ環境から変数をアンマップ (解放) します。このプラグマは、インテル® MIC アーキテクチャーおよびインテル® グラフィックス・テクノロジーにのみ適用されます。 |
omp target update |
プラグマで指定されているモーション節に応じて、デバイスとホスト間でデバイスのデータ環境の項目の整合性を保持します。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーまたはインテル® グラフィックス・テクノロジーをターゲットとする場合にのみ適用されます。 |
omp teams |
ターゲット領域内でスレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。 |
これらのプラグマを使用してベクトル・ハードウェア上の実行を制御します。
プラグマ |
説明 |
---|---|
omp simd |
ループを SIMD (Single Instruction, Multiple Data) 命令を使用して同時に実行されるループにベクトル化します。 early_exit 節は、インテル独自の OpenMP* 仕様の拡張です。 early_exit 複数の終了ポイントを持つループのベクトル化を許可します。この節を指定すると、プログラムは次のように振る舞います。
|
omp declare simd |
SIMD ループから一度の呼び出しで、SIMD (single instruction-multiple data) 命令を使用して複数の引数を処理できる関数バージョンを作成します。 |
プラグマ |
説明 |
---|---|
omp cancel |
指定した種類の最内領域の取り消し要求を行います。このプラグマに到達したタスクは、取り消された構文の最後に進みます。 |
omp cancellation point |
暗黙的または明示的なタスクが、指定された節の最内領域で取り消し要求があったかどうかをチェックするポイントを定義します。この構文は、スレッド間またはタスク間の同期は実装していません。 |
このプラグマを使用して、reduction 節でリダクション演算子として利用可能なリダクション識別子を定義します。
プラグマ |
説明 |
---|---|
omp declare reduction |
reduction 節でリダクション演算子として利用可能なユーザー定義のリダクション (UDR) 関数 (リダクション識別子) を宣言します。 |
これらのプラグマは、連続する複数のプラグマのショートカットとして使用します。結合構造は、ある構造内に別の構造を入れ子するためのショートカット形式です。内部に別の構造を 1 つだけ含み、ほかの文を含まない構造を明示的に指定することと同じです。
複合構造は、2 つの構造から成り、構造内に別の構造を入れ子する場合とセマンティクスが異なります。複合構造は、その構成要素である 2 つの構造には含まれないセマンティクスを追加したり、構造内に別の構造を入れ子することが不適合な場合に使用します。
プラグマ |
説明 |
---|---|
omp distribute parallel for1 |
複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。 |
omp distribute parallel for simd1 |
複数のチームのメンバーである複数のスレッドによって並列に実行されるループを指定します。また、ループは SIMD 命令を使用して同時に実行されます。 |
omp distribute simd1 |
チーム領域のマスタースレッド間で分配されるループを指定します。また、ループは SIMD 命令を使用して同時に実行されます。 |
omp for simd1 |
ループ反復をチーム内のスレッド間で分配するように指定します。各スレッドによって実行される反復は、SIMD 命令を使用して同時に実行することもできます。 |
omp parallel for |
1 つの for 構文を含む並列領域を簡潔に指定する方法を提供します。 |
omp parallel for simd |
1 つの for simd 構文だけを含み、その他の文を含まない parallel 構文を指定します。 |
omp parallel sections |
1 つの sections 構文を含む parallel 構文を指定します。 |
omp target parallel |
デバイスデータ環境を作成して、そのデバイスで並列領域を実行します。このディレクティブは、インテル® MIC アーキテクチャーにのみ適用されます。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
omp target parallel for |
1 つの omp target parallel for 構造だけを含み、その他の文を含まない target 構造を簡潔に指定する方法を提供します。 |
omp target parallel for simd |
1 つの omp target parallel for simd 構造だけを含み、その他の文を含まない target 構造を簡潔に指定する方法を提供します。 |
omp target simd |
1 つの omp simd 構造だけを含み、その他の文を含まない target 構造を指定します。 |
omp target teams |
デバイスデータ環境を作成して同じデバイスで構文を実行します。また、スレッドチームを複数作成し、各チームのマスタースレッドが構造化ブロックを実行します。このプラグマは、インテル® MIC アーキテクチャーにのみ適用されます。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
omp target teams distribute |
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構造により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
omp target teams distribute parallel for |
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
omp target teams distribute parallel for simd |
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。ループはチーム全体に分配され、SIMD 命令を使用して同時に実行されます。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
omp target teams distribute simd |
デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構文により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。また、ループは SIMD 命令を使用して同時に実行されます。このプラグマは、インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャーをターゲットとする場合にのみ適用されます。 |
omp taskloop simd1 |
SIMD 命令を使用して同時に実行可能で、反復が OpenMP* タスクを使用して並列に実行されるループを指定します。 |
omp teams distribute |
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、teams 構造により生成されるすべてのスレッドチームのマスタースレッド間で、ループ反復を分配するように指定します。 |
omp teams distribute parallel for |
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。 |
omp teams distribute parallel for simd |
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、複数のチームのメンバーである複数のスレッドによって並列に実行できるループを指定します。ループはチーム領域のマスタースレッド間で分配され、SIMD 命令を使用して命令レベルで同時に実行されます。 |
omp teams distribute simd |
スレッドチームを複数作成し、各チームのマスタースレッドの構造化ブロックを実行します。また、チーム領域のマスタースレッド間で分配されるループを指定します。 |
脚注:
1 このディレクティブは、複合構造を指定します。