在我用 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 用户,所以我不知道如何以正确的方式编写此循环。最初,我认为是这样的:
!$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
但我不知道是否可以通过这种方式产生竞争条件。关于如何更好地编写此循环的任何建议?提前致谢