<< 24 >>
インテル® C/C++ コンパイラー OpenMP* 活用ガイド
デュアルコア・マルチコア対応アプリケーション開発A
barrier 宣言子
バリアーは、全てのプロセスを同期させる為の指示を行います。個々のスレッドは、全てのスレッドがバリアポイント
に到着するまでその後の実行を開始しません。全スレッドがバリアポイントに到達することにより同期がとれます。シン
タックスは以下の通りです
#pragma omp barrier
atomic 宣言子
atomic 宣言子は、同時に複数のスレッドからアップデートされる可能性のあるメモリーエリアの更新を排他的に行
います。
#pramga omp atomic
Expression-statement
このディレクティブは、ディレクティブに続く 1 行のステートメントだけに適用されます。ステートメントは以下のいず
れかのフォームである必要があります。
x = x op expr, x = expr op x, x = intr (x, expr) , x = intr(expr, x)
x は組み込み関数で利用可能なデータ形式を持つスカラー変数で、expr はを参照しない演算式となり、intr は
max、min、iand、ior、ieor のいずれかの組み込み関数、op は +,*,-,/,.and.,.or.,.eqv.,.neqv. のいずれかの演算となります。
x に対するロード、ストアが atomic の対象となります。演算自身が atomic の対象となるわけではありません。
critical 構文でもこの atomic 構文と同じ処理が可能です。実際には、critical 構文の方が柔軟な排他制御が可能とな
ります。
図.19 atomic アップデートの指定
逐次実行するプログラムブロック
#pragma omp parallel
{
#pragma omp for
{
}
#pragma atomic
#pragma omp for
{
}
}
逐次実行するプログラムブロック
並列実行するプログラムブロック
一つのスレッドだけで処理するブロック
並列実行するプログラムブロック
スレーブスレッド
マスタースレッド