首页 > 解决方案 > gfortran中的并行编程,奇怪吗?结果是 hello 程序

问题描述

我编译了下一个 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 之间的数字,而不仅仅是零。有什么不对吗?

标签: fortrancygwinopenmpgfortran

解决方案


您丢失use omp_lib了,编译器隐式假定这omp_get_num_thread()是一个返回浮点值的函数,因为它的名称以o. 它不是虽然 - 它返回一个integer. 立即添加将关闭隐式声明并在implicit none没有.program hellouse 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

推荐阅读