C++ 嵌套循环中的OpenMP数组索引

C++ 嵌套循环中的OpenMP数组索引,c++,for-loop,openmp,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&l

我在尝试使用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);
        }
    }
}
int*myresults=new int[1000]
#pragma-omp并行
{
#pragma omp for

for(int z=0;z
n
对于
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);
}
#专用pragma omp并行(n)

for(intz=0;z)为我工作。非常感谢