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

omp single

チーム内の 1 つのスレッドにより 1 回だけ実行するコードブロックの開始位置を指定します。

構文

#pragma omp single [clause,clause , ...]

structured-block

引数

clause

次の 1 つまたは複数の clause を指定できます。

copyprivate(list)

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

firstprivate(list)

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

nowait(integer expression)

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

private(list)

チーム内の各スレッドに対して変数を private にすることを宣言します。

説明

常に 1 つのスレッドだけが構造化ブロックを実行できます。チーム内のほかのスレッドは、nowait が指定されていない限り、single 構造のにある暗黙的なバリアで待機します。nowait が指定されている場合、チーム内のほかのスレッドは、構造化ブロックの後のコードを直ちに実行します。

次の例は、このプラグマを使用して、printf 関数を 1 回だけ実行する方法を示します。チーム内の関数を実行しないすべてのスレッドは、直ちに次の計算に進みます。

#include <omp.h>
#pragma omp parallel {
 	#pragma omp single nowait { printf(“Starting calculation\n”); }
	
	// Do some calculation
}