Fortran Coder

查看: 12024|回复: 6
打印 上一主题 下一主题

[并行] FORTRAN程序的并行编译错误

[复制链接]

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
跳转到指定楼层
楼主
发表于 2020-3-30 03:34:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
大家好,

我写了一个并行(MPI)的FORTRAN代码(包含两个文件:主文件conductivityMAINp.f90和子程序文件conductivityCALp.f90);但是在编译的时候,出现了下面的错误。我把我的文件和错误信息上传到附件里了,麻烦大家给我些建议,要如何调试代码消除编译错误。谢谢啦。

Error_Information.dat

172.04 KB, 下载次数: 2

错误信息

conductivityCALp.f90

9.5 KB, 下载次数: 2

子程序文件

conductivityMAINp.f90

15.65 KB, 下载次数: 1

主程序文件

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
7#
 楼主| 发表于 2020-4-15 12:58:15 | 只看该作者
非常感谢你的回复。

我还想问两个问题。

1. 能麻烦你推荐下讲解使用FORTRAN Coarray功能的书籍,或者文献吗?我在网上没找到。另外,你觉得MPI版本的并行程序和Coarray版本的并行程序,那个更高效呢?是不是FORTRAN的Coarray功能可以完全取代MPI的所有功能,而实现同等的并行功能呢?

2. 我之前写的程序都是按照面向过程的模式来写的。最近看了FORTRAN2003版本的规则,看到FORTRAN语言也可以按照面向对象的模式来写了。那请问是不是所有的按照面向过程模式来写的程序,都可以转化为按照面向对象的模式的程序呢?

就以我的这个程序为例,你觉得应该怎么转化呢?(也许我这问题,问得有点不合理)

或者能否麻烦你推荐些书籍,以为FORTRAN语言为例来讲解,一般如何把按过程模式编写的程序,转化为按对象模式编程的程序吗?(我刚看懂了按面向对象的功能,但还是感觉有点摸不到头脑如何把我的程序转化成按面向对象模式的程序)。

拜谢啦。

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
6#
发表于 2020-4-7 10:01:27 | 只看该作者
误差是不可避免的,如果满足精度需求,就无所谓。《高性能计算之并行编程技术—— MPI并行程序设计》

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
5#
 楼主| 发表于 2020-4-2 00:09:21 | 只看该作者
本帖最后由 Kieran 于 2020-4-2 00:10 编辑
li913 发表于 2020-3-31 11:06
你得调试找到错误位置。你的问题,在别人电脑上不一定重现。

非常感谢你的建议。

我已经调试成功我的并行代码了,我把新的代码放在附件里了。

不过,我还是有几个问题想请教下。

1. 我发现并行和原来串行的代码给出的电导率结果几乎一致,但小数部分却不相同。我分别以200乘以200和300乘以300的k网格的计算情况为例。下面是我的计算结果

200乘以200的k网格的计算情况
串行代码结果
(-50979.1014624820,-8.548064305026142E-013)
并行代码结果
(-50979.0937138954,-6.321723719222822E-013)

300乘以300的k网格的计算情况
串行代码结果
(-49921.7921175357,-5.004116663839427E-013)
并行代码结果
(-49921.7885585475,-5.499348523590750E-014)

我想问下这种情况合理吗?我的意思是说并行的代码计算出的结果是不是一定会与串行代码计算出的结果完全相同呢?还是有可能会有一定程度的差异,就如同我计算的结果一样。

2. 我发现MPI_Bcast本身就有阻断的功能,那是不是在它之前,其实也可以不必使用MPI_Barrier命令呢?

3.能否推荐一下MPI方面的教科书,我想对并行编程有个更好的理解和认识。

多谢啦!

conductivityCALp.f90

15.03 KB, 下载次数: 0

子程序文件

conductivityMAINp.f90

15.49 KB, 下载次数: 0

调试后的主程序文件

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
地板
发表于 2020-3-31 11:06:35 | 只看该作者
你得调试找到错误位置。你的问题,在别人电脑上不一定重现。

68

帖子

25

主题

0

精华

专家

F 币
321 元
贡献
197 点
板凳
 楼主| 发表于 2020-3-30 17:48:08 | 只看该作者
li913 发表于 2020-3-30 12:01
ka 只在0进程分配内存,其余进程未分配,不能广播。

谢谢你的回复。

我把ka动态数组放在0号主进程外面分配空间,并广播给其它进程了。可是运行的时候,还是除了错误。我查看了半天也没看出哪里还有问题。

我把conductivityMAINp.f90程序和错误信息发到附件里了。conductivityCALp.f90文件没有任何改变。能再麻烦你帮我看下还哪里不合理呢?

谢谢啦。

Error_Information.dat

42.02 KB, 下载次数: 2

错误信息

conductivityMAINp.f90

15.63 KB, 下载次数: 1

修改后的主程序

835

帖子

2

主题

0

精华

大宗师

F 币
3926 元
贡献
2334 点
沙发
发表于 2020-3-30 12:01:11 | 只看该作者
ka 只在0进程分配内存,其余进程未分配,不能广播。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 10:46

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表