C++ 嵌套循环中的OpenMP数组索引
我在尝试使用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
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;zn
对于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)为我工作。非常感谢