OMP:OMP PARALLEL DO 和 OMP DO 有什么区别(根本没有并行指令)

OMP: What is the difference between OMP PARALLEL DO and OMP DO (Without parallel directive at all)

好的,我希望之前没有问过这个问题,因为在搜索时很难找到它。

我看了F95的说明书,还是觉得很模糊:

For the simple case of:
DO i=0,99
    <some functionality>
END DO

我想弄清楚以下两者之间的区别:

!$OMP DO PRIVATE(i)
DO i=0,99
    <some functionality>
END DO
!$OMP END DO

并且:

!$OMP PARALLEL DO PRIVATE(i)
DO i=0,99
    <some functionality>
END DO
!$OMP PARALLEL END DO

(只是指出区别:第一个有 OMP DO 但根本没有 PARALLEL 指令。第二个只是添加了 PARALLEL 指令)

谢谢!

!$OMP DO PRIVATE(i) 指示编译器如何在线程之间分配工作,但不启动任何线程。只有在 $OMP PARALLEL 区域内(甚至是间接地),它才会执行任何工作共享,否则它不会执行任何操作。

!$OMP PARALLEL DO PRIVATE(i)
!$OMP END PARALLEL DO

一样
!$OMP PARALLELPRIVATE(i)
!$OMP DO
!$OMP END DO
!$OMP END PARALLEL

所以它既启动线程又在它们之间分配工作。

如果你刚刚

!$OMP PARALLEL PRIVATE(i)
!$OMP END PARALLEL

所有线程都将在并行区域内完成所有工作。

如果在并行区域之外遇到 OpenMP do 指令,它将由一个线程串行执行——它的行为就好像它根本没有被并行化一样。当然,那是因为它不是。

您的第一个代码段未并行化,第二个是。

我不确定您所说的 F95 手册 是什么意思,也不知道您为什么要在那里查找有关 OpenMP 的信息。