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

时间:2015-08-05 12:34:03

标签: parallel-processing fortran 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指令AT ALL。第二个只添加了PARALLEL指令)

谢谢!

2 个答案:

答案 0 :(得分:3)

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

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

我不确定 F95手册的含义,也不知道为什么要查看有关OpenMP的信息。

答案 1 :(得分:2)

!$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

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