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保密,因爲在其他迭代中不會看到更新... 我該如何改進它?