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
我编译下一个 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