Vector OPENMP:如何在fortran中洗牌向量
在我用fortran编写的顺序代码中,我有一个子程序来洗牌一些向量,其工作方式如下:Vector OPENMP:如何在fortran中洗牌向量,vector,fortran,openmp,shuffle,Vector,Fortran,Openmp,Shuffle,在我用fortran编写的顺序代码中,我有一个子程序来洗牌一些向量,其工作方式如下: DO i=1,nsim IF(iflag(i) == 0)THEN j=j+1 pos(j)=pos(i) v(j)=v(i) iflag(j)=iflag(i) END IF END DO nsim=j 我是一个OpenMP新手,所以我不知道如何以正确的方式编写这个循环。 起初,我的想法是
DO i=1,nsim
IF(iflag(i) == 0)THEN
j=j+1
pos(j)=pos(i)
v(j)=v(i)
iflag(j)=iflag(i)
END IF
END DO
nsim=j
我是一个OpenMP新手,所以我不知道如何以正确的方式编写这个循环。
起初,我的想法是这样的:
!$omp parallel do reduction(+: j)
DO i=1,nsim
IF(iflag(i) == 0)THEN
j=j+1
pos(j)=pos(i)
v(j)=v(i)
iflag(j)=iflag(i)
END IF
END DO
!$omp end parallel do
nsim=j
但我不知道这样是否能产生一个竞赛条件。关于如何更好地编写这个循环,有什么建议吗?
提前感谢可通过以下方式并行此类循环: