ネストされた for ループを並列化するために再コーディングしようとすると問題が発生します。
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(asubsref(struct1,j) > 0)
asubsref(struct2,j) = asubsref(struct3,j) + 1;
}
for(j=0; j<n; j++)
asubsref(struct1,j) = asubsref(struct2,j) - asubsref(struct3,i);
}
Struct1/struct2 は、それぞれ width/height/int-float 配列を持つ 2 つの構造体です。struct3 は float 構造体です。
これまでの私の試みは、それらを 2 つの異なるループにすることでしたが、残念ながら、多くの間違った結果が得られるため、うまくいきませんでした。
#pragma omp parallel
{
#pragma omp for private(j)
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(asubsref(struct1,j) > 0)
asubsref(struct2,j) += 1;
}
}
#pragma omp for private(j)
for(i=0; i<n; i++)
{
k = asubsref(struct3,i);
for (j=0; j<n; j++)
{
asubsref(struct1,j) -= k;
}
}
}
私は答えを探しているわけではありませんが、これについてどうやって行くかを考えるのに役立つガイダンス/答えへのヒントなどを探しています。