fortran - 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 之间的数字,而不仅仅是零。有什么不对吗?
解决方案
您丢失use omp_lib
了,编译器隐式假定这omp_get_num_thread()
是一个返回浮点值的函数,因为它的名称以o
. 它不是虽然 - 它返回一个integer
. 立即添加将关闭隐式声明并在implicit none
没有.program hello
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
推荐阅读
- python - 当求解 13 方程线性方程需要太多时,是否意味着规范的一些问题?
- node.js - 使用两组不同的参数运行命令行
- excel - 是否可以在 Excel 中创建一个没有文本的下拉列表,只有颜色选项来填充单元格?
- c++ - 为其他人编译 OpenCV + Gstreamer
- junit - Junit测试后如何回滚Rabbit-mq消息?
- delphi - Delphi 5:将点击事件分配给 TImage 时出错
- c# - 如何将数据从一个视图显示到另一个 ASP.NET CORE 5.0 MVC
- laravel - laravel Eloquent 查询合集再次搜索
- azure - Blob 触发的 Azure 函数不再一次只处理一个 Blob
- r - tsibble::yearmonth 无法正确转换格式“2016.11”和“2016.12”