好的,我希望以前没有问过这个问题,因为在搜索中找到这个问题有点棘手。
我查阅了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
And:
!$OMP PARALLEL DO PRIVATE(i)
DO i=0,99
<some functionality>
END DO
!$OMP PARALLEL END DO
(只是为了指出区别:第一个有 OMP DO 但根本没有 PARALLEL 指令。第二个只是添加了 PARALLEL 指令)
Thanks!
The !$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
所有线程都将完成并行区域内的所有工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)