OpenMPはどのように並列セクション内で宣言されたデータを扱うのですか? C99の前に私はprivate()節を使ってスレッドローカルデータを指定します。OpenMPとC99データ
int i, x;
#pragma omp parallel for private(x)
for (i=0; i<n; i++) {
x=i;
}
C99ではデータとコードを混在させることができましたので、変数を使用する直前に変数を宣言することをお勧めします。ループの範囲内でデータを宣言するとスレッドプライベートであることが保証されますか?例えば、以下のものが有効ですか?
#pragma omp parallel for
for (int i=0; i<n; i++) {
int x=i;
}
私は念のためにプライベート(X)を追加しようとしたが、私のコンパイラのオブジェクトは、(おそらくX以来、まだ宣言されていません)。
Googleでのクイック検索は、これが本当に正しいことを示しています。 C++にはこのプロパティがありました。 –
btw:あなたのC90サンプルコードでC99スタイルの 'for'-loopを使っています... – Christoph
おそらくC99の例も有効なC90です。どのような変数もANSI Cの複合文( '{...}'ブロック)の先頭に宣言することができます。 – Juliano