Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing 什么时候开始$OMP平行端有必要吗?_Parallel Processing_Fortran_Openmp - Fatal编程技术网

Parallel processing 什么时候开始$OMP平行端有必要吗?

Parallel processing 什么时候开始$OMP平行端有必要吗?,parallel-processing,fortran,openmp,Parallel Processing,Fortran,Openmp,OpenMP规范指出,[!$OMP PARALLEL END DO]是可选的,如果不存在,编译器将默认使用它。我可以隐式地假定它是正确的吗?比如说 版本1:(无端平行do) 版本2:(端部平行do) 尽管说明书上说它是可选的(安全的),但实际上它有多安全(对于上面的例子)?您的体验是什么?使用安全吗?@Vogt我的MPI+OpenMP代码有问题,并将问题隔离到我的解算器中的上述代码段。我不确定这是否是罪魁祸首,需要进一步调查以确认。@Vogt我还看到OMP规范中提供的所有示例都有一个$OMP端部

OpenMP规范指出,[!$OMP PARALLEL END DO]是可选的,如果不存在,编译器将默认使用它。我可以隐式地假定它是正确的吗?比如说

版本1:(无端平行do) 版本2:(端部平行do)
尽管说明书上说它是可选的(安全的),但实际上它有多安全(对于上面的例子)?

您的体验是什么?使用安全吗?@Vogt我的MPI+OpenMP代码有问题,并将问题隔离到我的解算器中的上述代码段。我不确定这是否是罪魁祸首,需要进一步调查以确认。@Vogt我还看到OMP规范中提供的所有示例都有一个$OMP端部平行DO(DO还原除外)。没有一个例子没有它,更不确定,更怀疑它的安全性。我想不出哪一个例子省略它会有什么不同。但是我不喜欢在上面分享j,你能展示一下你认为导致问题的真正代码吗?@Ian Bush:j不是共享的。请参阅OpenMP4.5标准(与以前的版本相同,但我手头有4.5),p57第14行“如果任何循环迭代变量都是共享的,则它们在循环构造中被隐式设置为私有。”
do i = 1, N
!$OMP PARALLEL DO DEFAULT(SHARED)
   do j = xadj(i), xadj(i+1) - 1
      call residual(j, ...)
   end do
end do 
do i = 1, N
!$OMP PARALLEL DO DEFAULT(SHARED)
   do j = xadj(i), xadj(i+1) - 1
      call residual(j, ...)
   end do
!$OMP END PARALLEL DO
end do