<< 25 >>
インテル® C/C++ コンパイラー OpenMP* 活用ガイド
デュアルコア・マルチコア対応アプリケーション開発A
flush 宣言子
コンパイラーは、flush が指定されたポイントで、スレッドの変数に関連する一貫性の保持のための共有変数に関
する同期処理を指示します。
#pragma omp flush(list)]
ここでの list には、変数名をカンマ (,) で区切って指定します。省略すると以下の全ての共有変数について同期
が取られます。
グローバル変数
save 属性のないローカル変数で、そのアドレスが他のサブプログラムへ引き渡されるなど、アドレスが参照さ
れるもの
ローカル変数で、サブプログラムにあるパラレル領域で shared と宣言されるもの
ダミーの引数
全てのポインター参照
list には必要な変数をコンマ (,) で区切って記述します。list の指定がない場合は全ての変数がフラッシュされ
ます。
order 宣言子
order で囲まれたコードブロックは、そのコードを逐次実行した場合と同様に実行されます。
#pragma omp order
実行コードブロック
order 宣言子は for 指示構文または parallel for 指示構文中にだけに記述できます。また、その時、for 宣言子には、
order 宣言句も指定されている必要があります。
reduction 宣言句
reduction 宣言句は、for 構文に指定され reduction 演算を並列処理するものです。
reduction {op| intr }: list )
list で指定された変数は、組み込み関数で利用可能なデータ形式を持つスカラー変数と配列です。また、その変
数のスコーピング属性は shared 属性である必要があります。list で指定された変数はそれぞれのスレッドのために
プライベートのコピーが作成され、その値はオペレーターの種類によって特定の値で初期化されます。intr は max、
min、iand、ior、ieorのいずれかの組み込み関数が指定可能で、op は +,*,-,/,.and.,.or.,.eqv.,.neqv. のいずれかの演
算となります。
reduction を行ったループの後で共有のリダクション変数は、そのオリジナルの値とそれぞれのスレッドが持つプラ
イベートのリダクション変数の最終値を使用して記述された op の演算を行い、アップデートされます。リダクション演
算は引き算を除き結合可能であるため、コンパイラーは最終値の計算について自由に再構成することができます。
共有変数の値は最初のスレッドが演算に到達すると未定義となり、リダクション演算が終了するまでその状態となり
ます。通常、演算処理は reduction 構文の最後で完了します。ただし、nowait が指定された reduction 構文では、
全てのスレッドがリダクション演算を終了したことを確認するために barrier 同期を行うまでは、共有変数の値は未定
義のままとなります。