インテルがサポートするプラグマの一覧

インテル® oneAPI DPC++/C++ コンパイラーは、他のコンパイラーとの互換性を維持するため、次のプラグマをサポートします。

Microsoft* コンパイラーと互換性があるプラグマ

次のプラグマは、Microsoft* コンパイラーと互換性があります。各プラグマに関する詳細は、Microsoft* Developer Network (https://docs.microsoft.com/ja-jp/) を参照してください。

プラグマ

説明

alloc_text

指定された関数定義のコードセクションの名前を指定します。

auto_inline

off で指定された範囲内で定義されたすべての関数を、自動インライン展開の候補とみなされる関数から除外します。

bss_seg

.obj ファイル内の初期化されていない変数が格納されているセグメントをコンパイラーに示します。

check_stack

on 引数は後に続く関数のスタックチェックを有効にすることを示し、off 引数は後に続く関数のスタックチェックを無効にすることを示します。

code_seg

関数が割り当てられるコードセクションを指定します。

comment

オブジェクト・ファイルまたは実行ファイルにコメントを書き込みます。

component

ソースファイルのブラウザー情報や依存情報の収集を制御します。

conform

/Zc:forScope コンパイラー・オプションのランタイムの動作を指定します。

const_seg

.obj ファイル内に格納されている関数のセグメントをコンパイラーに示します。

data_seg

初期化されたデータのデフォルトのセクションを指定します。

deprecated

関数、型、その他の識別子が将来のリリースではサポートされなくなること、または、関数、型、その他の識別子を使用すべきではないことを示します。

fenv_access

プログラムがステータスフラグをチェックしたり、デフォルトではない制御モードで実行することを許可します。

float_control

関数の浮動小数点動作を指定します。

fp_contract

浮動小数点計算結果を省略するかどうかを指示します。

loop

自動ベクトル化で考慮されるループコードと除外されるループコードを制御します。

init_seg

翻訳単位の C++ 初期化コードをセクションに含めます。

message

指定された文字列を標準出力デバイス (stdout) に表示します。

optimize

プラグマの後の関数に対して、または次の最適化プラグマに到達するまで最適化を行うかどうか指定します。Microsoft*の同じプラグマを部分的にサポートするよう実装されています。インテル® oneAPI DPC++/C++ コンパイラーの実装については、「optimize」を参照してください。

pointers_to_members

クラスを定義する前にそのメンバーへのポインターを宣言できるようし、そのポインターを使用してポインターのサイズおよびポインターの解釈に必要なコードを制御するかどうかを指定します。

pop_macro

指定されたマクロの値を、スタックの一番上の値に設定します。

push_macro

指定されたマクロの値を、スタックの一番上に保存します。

region/endregion

アウトライン機能を使用して展開および縮約する Microsoft* Visual Studio* コードエディターのコードセグメントを指定します。

section

.obj ファイル内にセクションを作成します。定義されたセクションは、コンパイルが終わるまで有効です。

vtordisp

on 引数は hidden の vtordisp メンバーの生成を有効にし、off 引数は無効にします。

push 引数は現在の vtordisp 設定を内部コンパイラー・スタックにプッシュします。pop 引数はコンパイラー・スタックのトップからレコードをポップし、ポップした vtordisp の値を復元します。

warning (警告)

コンパイラーの警告メッセージの動作を設定します。

weak

入力されるシンボルをウィークシンボルとして宣言します。

OpenMP* プラグマ

インテル® oneAPI DPC++/C++ コンパイラーは、現在、OpenMP* バージョン 5.0 TR4 と、OpenMP* バージョン 5.1 の一部のプラグマをサポートしています。以下は、サポートされているプラグマの一覧です。各プラグマに関する詳細は、OpenMP* バージョン 5.1 仕様を参照してください。

インテル固有の節は、関連するプラグマの説明で示します。

プラグマ

説明

omp allocate

オブジェクトの割り当てと解放にメモリー・アロケーターを使用するように指示します。

omp atomic

アトミックに実行する必要がある計算を指定します。

omp barrier

チーム内のすべてのスレッドが到着するまで各スレッドが待機しなければならないコード位置を指定します。

omp cancel

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

omp cancellation point

暗黙的または明示的なタスクが、指定された節の最内領域で取り消し要求があったかどうかをチェックするポイントを定義します。この構文は、スレッド間またはタスク間の同期は実装していません。

omp critical

一度に 1 つのスレッドのみアクセスできるコードブロックを指定します。

omp declare reduction

reduction 節でリダクション演算子として利用可能なユーザー定義のリダクション (UDR) 関数 (リダクション識別子) を宣言します。

omp declare simd

SIMD ループから一度の呼び出しで、SIMD (single instruction-multiple data) 命令を使用して複数の引数を処理できる関数バージョンを作成します。

omp declare target

デバイス向けに作成またはマップする関数と変数を指定します。

omp declare variant

ベース・プロシージャーのバリアントを識別し、このバリアントが使用されるコンテキストを指定します。

omp dispatch

指定されたプロシージャー呼び出しに対して、プロシージャーのバリアントが呼び出されるかどうかを決定します。

omp distribute

1 つ以上のループの反復をすべてのスレッドチームのプライマリー・スレッド間で分配するかどうかを指定します。

omp distribute parallel for

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

omp distribute parallel for simd

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

omp distribute simd

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

omp flush

スレッドから見た一時的なメモリーの状態と実際のメモリーの整合性が保たれるポイントを定義します。

omp for

ワークシェア・ループを指定します。ループの反復は、チーム内の 1 つのスレッドにより並列に実行されます。

omp for simd

ループ反復をチーム内のスレッド間で分配するように指定します。各スレッドによって実行される反復は、SIMD 命令を使用して同時に実行することもできます。

omp interop

外部のランタイム・コンテキストを識別し、そのコンテキストのランタイム特性を特定して相互運用性を実現します。

omp loop

関連するループの反復が任意の順序または同時実行可能であることを指定します。

omp masked

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

omp master (非推奨の古いプラグマ。omp masked を参照。)

チームのプライマリー・スレッドで 1 回だけ実行するコードブロックを指定します。

omp ordered

チームのスレッドがループの反復順に実行するスレッドのコードブロックを指定します。または、スタンドアロン・ディレクティブとして、DOACROSS ループの入れ子で繰り返し間の依存関係を指定します。

omp ordered simd

SIMD レーンの論理的な順序でシリアルに実行すべきループのコードブロックまたは SIMD 対応関数を指定します。

omp ordered simd monotonic

関連する SIMD ループの各反復で新しいリスト項目の値が、そのループに入る前のオリジナルのリスト項目の値 + 現在の反復の前に条件付き更新が行われた反復数 × リニアステップに対応するコードブロックを指定します。関連するループの最後の反復に対応する値が、オリジナルのリスト項目に割り当てられます。

omp ordered simd overlap

SIMD ループ内のオーバーラップする inx 値はスカラーに実行し、別の inx 値は並列に実行する必要があるコードブロックを指定します。

omp parallel

スレッドのチームにより並列に実行される構造化ブロックを指定します。

omp parallel for

1 つの FOR 構文を含む並列領域を簡潔に指定する方法を提供します。

omp parallel for simd

1 つの for simd 構文だけを含み、その他の文を含まない parallel 構文を指定します。

omp parallel sections

1 つの sections 構文を含む parallel 構文を指定します。

omp requires

プログラムを正しくコンパイルして実行するため、実装がサポートしなければならない機能を列挙します。

omp scope

追加の OpenMP* 操作を指定できる、チーム内のすべてのスレッドで実行される構造化ブロックを定義します。

omp sections

チーム内のスレッド間で分配される構造化ブロックのセットを定義します。

omp simd

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

omp single

コードブロックがチームの 1 つのスレッドでのみ実行されることを指定します。

omp target

デバイスデータ環境を作成してそのデバイスで構文を実行します。

omp target data

領域の範囲のデバイスデータ環境へ変数をマップします。

omp target enter data

デバイスのデータ環境へ変数をマップします。

omp target exit data

デバイスのデータ環境から変数をアンマップ (解放) します。

omp target parallel loop

1 つの並列ループ構文を含むターゲット領域を簡潔に指定する方法を提供します。

omp target teams

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

omp target teams distribute

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構造により生成されるすべてのスレッドチームのプライマリー・スレッド間で、ループ反復を分配するように指定します。

omp target teams distribute parallel for

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。

omp target teams distribute parallel for simd

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams 構造により生成される複数のチームのメンバーである複数のスレッド間で、ループが並列に実行されるように指定します。ループはチーム全体に分配され、SIMD 命令を使用して同時に実行されます。

omp target teams distribute simd

デバイスデータ環境を作成してそのデバイスで構文を実行します。また、teams により生成されるすべてのスレッドチームのプライマリー・スレッド間で、ループ反復を分配するように指定します。また、ループは SIMD 命令を使用して同時に実行されます。

omp target teams loop

1 つの teams ループ構文を含むターゲット領域を簡潔に指定する方法を提供します。

omp target update

プラグマで指定されているモーション節に応じて、デバイスとホスト間でデバイスのデータ環境の項目の整合性を保持します。

omp task

実行を遅延させることができるコードブロックを指定します。

omp taskgroup

囲まれたタスクと派生タスクがすべて完了するまでプログラムを待機させます。

omp taskwait

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

omp taskyield

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

omp teams

ターゲット領域内でスレッドチームを複数作成し、各チームのプライマリー・スレッドの構造化ブロックを実行します。

omp teams distribute

スレッドチームのリーグを作成して、リーグ内のすべてのスレッドチームのプライマリー・スレッド間でループ反復を分配するように指定します。

omp teams distribute parallel for

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

omp teams distribute parallel for simd

スレッドチームのリーグを作成して、複数のチームのメンバーである複数のスレッドによって SIMD 命令を使用して並列に実行できるループを指定します。

omp teams distribute simd

スレッドチームのリーグを作成して、リーグ内のチームのプライマリー・スレッド間で分配して、SIMD 命令を使用して並列に実行できるループを指定します。

omp teams loop

1 つのループ構文を含む teams 構文を簡潔に指定する方法を提供します。

omp threadprivate

各スレッドにプライベートとして割り当てられるグローバル変数のリストを指定します。

その他のコンパイラーと互換性があるプラグマ

次のプラグマは、その他のコンパイラーと互換性があります。各プラグマに関する詳細は、それぞれのコンパイラーのドキュメントを参照してください。

プラグマ

説明

include_directory

HP 互換プラグマ。
#include ファイルの場所を検索するリストに文字列引数を追加します。

poison

GCC 互換プラグマ。プログラムから削除する識別子にラベル付けします。poison 指定された識別子をコンパイルするとエラーが発生します。#pragma POISON もサポートされています。

options

GCC 互換プラグマ。構造内のフィールドのアライメントを設定します。

weak

GCC 互換プラグマ。入力されるシンボルをウィークシンボルとして宣言します。

関連情報