gpt4 book ai didi

c - openmp共享数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:44 24 4
gpt4 key购买 nike

我有两个用于共享数组和共享 bool 标志的 nasted for(s),我知道在尝试写入数组时可能会发生冲突,但如果我将 thoose 部分设置为关键部分,我将失去并行此操作的所有好处.有什么选择我怎样才能避免这种情况并仍然并行工作?谢谢

#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 从(i+1)->N 运行所有线程。因此,您认为关键 的内容并非如此。下一行即

inner_set[j] = 1

实际上被所有线程覆盖。

该行需要#pragma omp critical

出于同样的原因,第二个循环再次有利于并行。

关于c - openmp共享数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747687/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com