我需要运行一个短外循环和一个长内循环。我想并行化后者而不是前者。原因是内部循环运行后更新了一个数组。我正在使用的代码如下
#pragma omp parallel{
for(j=0;j<3;j++){
s=0;
#pragma omp for reduction(+:s)
for(i=0;i<10000;i++)
s+=1;
A[j]=s;
}
}
这实际上挂起。以下工作很好,但我宁愿避免启动新的并行区域的开销,因为这之前是另一个。
for(j=0;j<3;j++){
s=0;
#pragma omp parallel for reduction(+:s)
for(i=0;i<10000;i++)
s+=1;
A[j]=s;
}
这样做的正确(和最快)方法是什么?