インテル® C++ コンパイラー XE 13.1 ユーザー・リファレンス・ガイド

OpenMP* 宣言子と節の概要

ここでは、インテル® コンパイラーでサポートされている OpenMP* プラグマと節の概要を説明します。 OpenMP* API の詳細については、OpenMP* Web サイト (http://www.openmp.org/) の OpenMP Application Program Interface バージョン 3.1 仕様を参照してください。

OpenMP* プラグマ

プラグマ

説明

parallel

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

task

囲まれた並列構造の領域として、関連付けられた構造ブロックを並列実行するように指定します。

sections

チーム内のスレッド間で分割される一連の構造ブロックを指定する、非反復的なワークシェアの構造を識別します。

section

囲まれた SECTION 構造の領域として、関連付けられた構造ブロックを並列実行するように指定します。

single

対応する構造化ブロックがチーム内の 1 つのスレッドだけで実行されるように指定する構造を識別します。

parallel for

1 つの for 宣言子を含む並列領域のショートカット。

parallel for OpenMP* 宣言子の直後には、for 文を続けなければなりません。 parallel for 宣言子と for 文の間に、ほかの文または OpenMP* 宣言子があると、インテル® C++ コンパイラーは構文エラーを出力します。

for

関連付けられたループの反復が並列実行される領域を指定する、反復的なワークシェアの構造を識別します。それぞれの反復は、チーム内の 1 つのスレッドにより実行されます。

parallel sections

1 つの sections 構造を含む並列領域を指定するショートカット形式です。

master

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

critical[name]

関連付けられた構造ブロックの実行を一度に 1 スレッドだけに制限します。各スレッドは、他のスレッドが同じ name 引数でクリティカル構造を実行しなくなるまで、クリティカル構造の最初で待機します。

taskwait

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

taskyield

現在のタスクを中断し、別のタスクを優先できることを示します。

barrier

チーム内のすべてのスレッドを同期化します。各スレッドは、チーム内の他のすべてのスレッドがこのポイントに到達するまで待機します。

atomic update

指定された変数に対するほかのアトミック操作と同期します。変数を指定された操作でアトミックに更新します。

atomic read

指定された変数に対するほかのアトミック操作と同期します。変数をアトミックに読み取ります。

atomic write

指定された変数に対するほかのアトミック操作と同期します。変数に新しい値を書き込みます。

atomic capture

指定された変数に対するほかのアトミック操作と同期します。変数の古い値をアトミックに取得し、変数に対して指定された操作を行います。

flush [(list)]

クロススレッド・シーケンス・ポイントを指定します。このポイントでは、チーム内のすべてのスレッドから見たメモリー内の特定のオブジェクトの状態の整合性が保たれるように、プログラム上で保証する必要があります。オプションの list 引数は、フラッシュする変数をカンマ区切りでリストします。

ordered

この宣言子に続く構造ブロックを、シーケンシャル・ループ内で反復が実行される順序で実行します。

threadprivate (list)

指定された名前付きのファイル有効範囲変数、名前空間の有効範囲変数、またはスタティック・ブロックの有効範囲変数を特定のスレッドに対してプライベートにします。

OpenMP* の節

説明

private

チーム内の各スレッドに対して変数を private にすることを宣言します。 変数のプライベート・コピーは、使用される前に初期化されません。

firstprivate

private 節で指定される機能のスーパーセットを指定します。 各プライベート・データ・オブジェクトはオリジナルのオブジェクトの値を使用して初期化されます。

lastprivate

private 節で指定される機能のスーパーセットを指定します。 領域を出る時点で、オリジナルのオブジェクトは、関連付けられたループシーケンスの最後の反復、または記述上における最後のセクション構造のプライベート・コピーの値で更新されます。

shared

チーム内のすべてのスレッドで変数を共有します。

default

領域内の変数のデフォルトのデータ属性を設定します。

reduction

スカラー変数の削減を実行します。

ordered

ordered 宣言子に続く構造ブロックを、シーケンシャル・ループ内で反復が実行される順序で実行します。

if (expression)

if(expression) 節が存在する場合、expression 節が TRUE である場合にのみ、囲まれたコードブロックは並列に実行されます。 それ以外の場合は、コードブロックはシリアルに実行されます。

この式は論理型スカラーでなければなりません。

schedule

for ループの反復をチームのスレッド間でどのように分割するかを指定します。

collapse(n)

1 つのループにコラプスして並列実行する、OpenMP* for 構造に関連する for ループの入れ子構造のループ数を指定します。

copyin

マスタースレッドのデータ値を、構造内のスレッドチームの threadprivate 変数にコピーする方法を提供します。

copyprivate

プライベート変数を使用して、1 つの暗黙的なタスクのデータ環境から並列領域に属している他の暗黙的なタスクのデータ環境に値をブロードキャストする方法を提供します。

nowait

ワークシェア領域の最後で実装がバリアを省略できるようにします。

untied

再開されたタスクは、中断前にそのタスクを実行していたスレッドと同じスレッドによって実行される必要がないことを示します。

mergeable

このタスクプラグマによって定義されたタスクは、タスク用にプライベート・データ環境を作成する必要がないことを示します。ただし、タスクの実行が遅延される場合は、プライベート・データ環境が作成されます。

final(expr)

expr を評価し、true の場合は、このタスクとその子孫は遅延されません (並列で実行されません)。

関連情報


このヘルプトピックについてのフィードバックを送信