#pragma omp parallel
{
int x; // private to each thread ?
}
#pragma omp parallel for
for (int i = 0; i < 1000; ++i)
{
int x; // private to each thread ?
}
ありがとうございました!
追伸ローカル変数が自動的にプライベートである場合、private句を使用する意味は何ですか?
はい、ローカル変数は自動的にプライベートです。
private
句が存在する理由は、 コードを変更する必要がない であるためです。
Private節なしで次のコードを並列化する唯一の方法
int i,j;
#pragma omp parallel for private(j)
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
//do something
}
}
コードを変更することです。たとえば、次のようなものです。
int i
#pragma omp parallel for
for(i = 0; i < n; i++) {
int j;
for(j = 0; j < n; j++) {
//do something
}
}
これは完全に有効なC89/C90コードですが、OpenMPの目標の1つは、コンパイル時に有効または無効にできるpragma
ステートメントを追加する以外はコードを変更する必要はありません。
並列領域内のデータは、各スレッド専用です。
http://en.wikipedia.org/wiki/OpenMP#Data_sharing_attribute_clauses [データ共有属性句]