我在尝试重新编码嵌套的 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 是两个分别具有宽度/高度/int-float 数组的结构。struct3 是一个浮点结构。
到目前为止,我的尝试是将它们变成两个不同的循环,但可惜,它不起作用,因为我会得到很多不正确的结果:
#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;
}
}
}
我不是在寻找答案,而是在寻找一些指导来帮助我思考如何解决这个问题/提示答案等。