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 的信息。
好的,我希望之前没有问过这个问题,因为在搜索时很难找到它。
我看了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 的信息。