0
我想并行化一块C++代码与OpenMp,但我面临一些问题。事实上,我的并行代码并不比串行代码快。 我想我已经理解了这个原因,但我无法解决它。在OpenMP共享阵列
我的代码的结构是这样的:
int vec1 [M];
int vec2 [N];
...initialization of vec1 and vec2...
for (int it=0; it < tot_iterations; it++) {
if ((it+1)%2 != 0) {
#pragma omp parallel for
for (int j=0 ; j < N ; j++) {
....code involving a call to a function to which I'm passing as a parameter vec1.....
if (something) { vec2[j]=vec2[j]-1;}
}
}
else {
# pragma omp parallel for
for (int i=0 ; i < M ; i++) {
....code involving a call to a function to which I'm passing as a parameter vec2.....
if (something) { vec1[i]=vec1[i]-1;}
}
}
}
我想,也许我的并行代码变慢了,因为多个线程想访问同一共享阵列和一个必须等待,直到另一个已经完成,但我不确定事情真的如何。但我不能使vec1和vec2保密,因为在其他迭代中不会看到更新... 我该如何改进它?