【发布时间】:2013-04-01 16:54:41
【问题描述】:
我有两个用于共享数组和共享布尔标志的嵌套 for(s),我知道在尝试写入数组时可能会发生冲突,但如果我将这些部分设为关键,我将失去并行处理的所有好处.有什么选择可以避免这种情况并且仍然可以并行工作吗?谢谢
#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);
【问题讨论】:
标签: c parallel-processing openmp