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

The*_*ngs 3 parallel-processing fortran openmp

好的,我希望以前没有问过这个问题,因为在搜索中找到这个有点棘手。

我已经查看了 F95 手册,但仍然发现这很模糊:

For the simple case of:
DO i=0,99
    <some functionality>
END DO
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚之间有什么区别:

!$OMP DO PRIVATE(i)
DO i=0,99
    <some functionality>
END DO
!$OMP END DO
Run Code Online (Sandbox Code Playgroud)

和:

!$OMP PARALLEL DO PRIVATE(i)
DO i=0,99
    <some functionality>
END DO
!$OMP PARALLEL END DO
Run Code Online (Sandbox Code Playgroud)

(只是为了指出不同之处:第一个有 OMP DO 但没有 PARALLEL 指令。第二个只是添加了 PARALLEL 指令)

谢谢!

Vla*_*r F 7

!$OMP DO PRIVATE(i)指示编译器如何划分线程之间的工作,但不启动任何线程。仅当它(甚至间接地)在一个$OMP PARALLEL区域内时,它才会进行任何工作共享,否则它不会做任何事情。

!$OMP PARALLEL DO PRIVATE(i)
!$OMP END PARALLEL DO
Run Code Online (Sandbox Code Playgroud)

!$OMP PARALLELPRIVATE(i)
!$OMP DO
!$OMP END DO
!$OMP END PARALLEL
Run Code Online (Sandbox Code Playgroud)

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

如果你刚刚

!$OMP PARALLEL PRIVATE(i)
!$OMP END PARALLEL
Run Code Online (Sandbox Code Playgroud)

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


Hig*_*ark 3

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

第一个片段没有并行化,第二个片段是并行化的。

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