嵌套循环中的OpenMP数组索引

时间:2012-06-04 00:47:21

标签: c++ for-loop openmp

我在尝试使用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循环,他使用results[]的位置两次或更多,因为results[n++]将产生未定义的行为(因为它无法保证n向右递增),我是正确的吗?

如何正确索引和存储我的结果?

1 个答案:

答案 0 :(得分:1)

对于n,{p> myfunc(z,0)会增加1 + secondCount/5次,myfunc(z,i)会增加n次。这意味着z * (2 + secondCount/5)应该在外循环的每次迭代开始时#pragma omp parallel for private(n) for (int z = 0; z <= mainCount; z++) { n = z * (2 + secondCount/5); results[n++] = myfunc(z, 0); for (int i = 0; i <= secondCount; i += 5) results[n++] = myfunc(z, i); } 。您应该像这样重写代码:

{{1}}