爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 19126|回复: 26

[经验总结] 关于fortran两种执行文件的效率对比实验(debug与release)

[复制链接]

新浪微博达人勋

发表于 2014-4-29 22:11:33 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
      最近看书的时候无意间看到了彭国伦的《fortran95程序设计》中347页有这样一节,讲fortran可执行文件的编译。(没有书的可以在论坛搜索下载)
书中说我们的vf编译器一般默认的编译选项是生成一个‘执行效率低,内含调试信息的执行文件’,而不是一个‘经过优化处理,执行效率高的执行文件’。前者是我们在默认状态下编译生成的debug文件夹下的exe文件,后者则会生成一个release文件夹,里面也有一个exe文件。
       这两种不同的编译格式,会使得程序的执行效率产生差别,‘执行效率有的时候会有好几倍的差距’。
       好了,背景交代完了,不知道多少人了解fortran的这两种编译格式,反正我是不知道,而且我十分好奇,这两种格式的执行效率究竟差多少。所以,今晚就在 @ziki 的帮助下,做了这个实验~

首先是不同编译格式的选择,本人是在windows7下使用cvf6.6,在编译界面内
a.jpg
点击后出现两个选项
b.jpg
默认的使我们熟悉的debug格式
之后我对一个程序进行了测试,这是一个文件读取与写入的程序,除了一两个if块,基本都是读写。
结果如图
d12.jpg
上图是debug格式的,用时1分11秒
r12.jpg
这个是release格式的,用时1分08秒
由于当时 @ziki 在看视频,为了保证可信度,又重新对两种格式进行了运算,另外一次的结果中:debug1分12秒,release1分11秒。
平均来讲release仅仅比debug快2.8%。这一差距与彭书中所说的‘有时好几倍’不大符合。
为了进一步验证,我又换用了另外一个以计算为主的程序,一个我自己编的聚类分析程序。
d.jpg
上图是debug格式,用时51秒。
r.jpg
上图是release格式的,用时43秒。
在这个聚类的程序中release比debug快了15.7%,可见在以运算为主的程序中,release的确比debug快。
但是这也没有达到书中所说的‘好几倍’,甚至这样的差别,平时可能都注意不到。
       本人只用过cvf编译器,也只在windows下跑过程序,所以,是否和我的操作系统以及使用的程序有关,还不得而知,这只是个小小的实验,纯属娱乐。如果有人对此了解也希望能够跟大家分享下哈~~~

评分

参与人数 1金钱 +15 贡献 +5 收起 理由
mofangbao + 15 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 08:23:04 | 显示全部楼层
本帖最后由 letsdo8 于 2014-4-30 08:28 编辑

我是觉得彭书中的说法是对的。

这个debug和优化编译造成的Wallclock差别,跟你的问题和用那种编译器有关。

你前一个例子,IO占主要,优化选项基本不起作用。后一个则有些差别,但差别不大,这可能是CVF编译器中这两者方式的优化程度本身就差别不大的原因。

在LINUX机器上,gfortran和Intel FORTRAN,用-g (debug选项)和-fast选项,同样算WRF等的一天积分,可能能得出彭书中的结论。(估计用多重嵌套的话会更明显)。

优化级别也有多种方式,-O0,-O1,-O2,-O3,等。

WRF中对有几个子程序(从configure后产生的文件中可见),还特别降低了优化级别(不然会编译很慢,或甚至编译不过)。这几个子程序一般是allocate会占用很大内存的数据。

评分

参与人数 1金钱 +10 贡献 +2 收起 理由
lqouc + 10 + 2 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-4-29 22:27:56 | 显示全部楼层
嘿嘿~多谢分享~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-29 22:29:02 | 显示全部楼层
ziki 发表于 2014-4-29 22:27
嘿嘿~多谢分享~

嘿嘿~~~请多指教
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-29 22:33:24 | 显示全部楼层
一个调试版,一个发行版。发行版对代码进行了各种优化,不仅程序执行速度上加快,可执行程序的大小也变小了哦!
其它编译器也有优化功能。比如,gcc -O,就是来指定优化等级。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 07:22:49 | 显示全部楼层
学习了,用来很长时间,都不知道这些!!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

0
早起挑战累计收入
发表于 2014-4-30 08:12:07 | 显示全部楼层
第一个程序很明显是磁盘IO造成的性能瓶颈  两种模式下不能显示出区别。
第二个程序就能看出点了,不过只测试一次这结果说服力个人感觉还是有点不够的哈  可以多运行几次 取个平均看看   Fortran运行40多秒的程序计算量应该是普通程序中的大块头了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 08:27:46 | 显示全部楼层
再说一个有用的编译选项
-p 和 -gp

用这个选项后,./a.out运算后,会同时生成一个mon.out文件,
用prof ./a.out mon.out,会告诉各个子程序(和内部函数)占用的计算时间。

用-gp的会更详细。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-30 09:03:59 | 显示全部楼层
letsdo8 发表于 2014-4-30 08:23
我是觉得彭书中的说法是对的。

这个debug和优化编译造成的Wallclock差别,跟你的问题和用那种编译器有关 ...

哇,厉害!学习了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-4-30 14:27:08 | 显示全部楼层
letsdo8 发表于 2014-4-30 08:23
我是觉得彭书中的说法是对的。

这个debug和优化编译造成的Wallclock差别,跟你的问题和用那种编译器有关 ...

高手哈~以后有机会也在linux上试试。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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