OpenMP WORKSHARE构造能否与Fortran的DO CONCURRENT配合使用?
兼容性说明
从OpenMP 4.5版本开始,标准明确允许DO CONCURRENT作为WORKSHARE构造的执行内容,二者可以配合使用,实现类似并行化FORALL的效果。
代码示例的有效性
你给出的代码是符合OpenMP规范的合法写法:
!$OMP PARALLEL WORKSHARE do concurrent (i1=1:100) a(i1)=i1 enddo !$OMP END PARALLEL WORKSHARE
注意事项
- 需使用支持OpenMP 4.5及以上版本的编译器,主流的GCC、Intel Fortran、NVIDIA HPC SDK等均已提供支持。
DO CONCURRENT内部的代码必须遵守其自身的语法限制,比如不能存在副作用操作、不能修改循环控制变量等,这些限制和FORALL基本一致,迁移时可沿用原有逻辑。- 也可以选择用
!$OMP PARALLEL DO来并行化,但WORKSHARE更契合DO CONCURRENT的并发语义,尤其当DO CONCURRENT包含多数组赋值等复杂并发操作时,适配性更好。
内容的提问来源于stack exchange,提问作者attacc
相关产品推荐
相关产品推荐

