OpenMP を使用してネストされたループを並列化しようとすると問題が発生します。これは、遊んで慣れるための単なるデモ コードです。
int* myresults = new int[1000]
#pragma omp parallel
{
#pragma omp for
for(int z=0; z<=mainCount;z++)
{
results[n++] = myfunc(z,0); //compute something
for(int i=0;i<=secondCount;i+=5)
{
results[n++]=myfunc(z,i);
}
}
}
私の問題は、結果配列のインデックス付けです。OpenMP が最初の for ループを並列化しているため、未定義の動作が発生するため (n が正しくインクリメントされているとは保証できないため)、彼はresults[]
2 倍以上の位置を使用していると思いますが、正しいでしょうか?results[n++]
結果を正しくインデックス化して保存するにはどうすればよいですか?