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
我希望我不能声望但非常感谢你 –