openMP で「共有」が何をするのかは不明です。仕様には、「タスクによって共有される 1 つ以上のリスト項目を宣言する...」と共有されていることが記載されていますが、それは私には不明確に思えます。
たとえば、次のコードがあるとします。
#pragma omp parallel for shared(num1)
for(i=0; i<m; i++) {
for(j=0; j < n; j++) {
if(myFunc(i,j) < 0) {
num1 += 256*u(i,j);
}
}
}
これにより、num1 との競合状態が停止し、この for ループの最後に正確な結果が得られますか? そうでない場合、それは正確に何をしますか?