1
我有兩個鼻子的工作與共享數組和共享布爾標誌,我知道它可能是一個碰撞,而試圖寫入數組,但如果我讓thoose部分關鍵我將失去所有好處與此平行。有沒有什麼選擇,我如何避免這種情況,並仍然並行工作?感謝openmp共享陣列
#pragma omp parallel
{
#pragma omp for schedule (guided)
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(cluster[i*N+j]!=0)
{
inner_set[i]=1;// Critical???
inner_set[j]=1;
}
else
{
outter_set[i]=1;
}
}
}
}
do
{
isChanged=false;
#pragma omp parallel for schedule (guided)
for(int i=0; i<N; i++)
{
if(inner_set[i]!=0)
{
for (int j=0; j<N;j++)
{
if(i!=j && outter_set[j]!=0)
{
if(dis[i*N+j]<Dis)
{
isChanged=true;
inner_set[i]=0;//critical???
outter_set[i]=1;
}
}
}
}
}
}while(isChanged);
非常感謝。如果我說得對,那麼到處都是通過索引i被排除的東西在這個實現中並不是至關重要的,但是通過索引j改變什麼是至關重要的?可能是更好的想法使用鎖?再次謝謝你。 –
是的。要進行調試,請在串行模式下運行代碼,然後並行並比較結果。如果它有效,那麼投票支持這個答案,以使any1可以作爲問題的解決方案。 – DOOM
我希望我不能聲望但非常感謝你 –