gfortran 中的并行编程,奇怪吗?结果是 hello 程序

Parallel programming in gfortran, strange? result in hello program

我编译下一个 hello 程序,但没有得到预期的结果。

program hello

print*, " Hello parallel world"

!$omp parallel

print*, omp_get_thread_num()

!$omp end parallel

print*, "Back to the sequential world"

end

编译我使用:

mpifort -fopenmp -o hello hello.f90


当我运行它时,它的结果是:

Hello parallel world

0.00000000

0.00000000

0.00000000

0.00000000

Back to the sequential world

,但根据手册(Rohit Chandra、Ramesh Menon、Leo Dagum、David Kohr、Dror Maydan、Jeff McDonald 的 OpenMP 中的并行编程),我可以获得 0 到 3 之间的数字,而不仅仅是零。有什么问题吗?

您缺少 use omp_lib,并且编译器隐含地假定 omp_get_num_thread() 是一个 returns 浮点值的函数,因为它的名称以 o 开头。虽然不是 - 它 returns 和 integer。在 program hello 之后添加 implicit none 将关闭隐式声明并在没有 use omp_lib.

的情况下触发编译时错误
program hello
   use omp_lib
   implicit none
   print*, "Hello parallel world"
!$omp parallel
   print*, omp_get_thread_num()
!$omp end parallel
   print*, "Back to the sequential world"
end