回 帖 发 新 帖 刷新版面

主题:win7系统在cvf下编程,debug和release模式没问题,IVF运行结果出现NAN

以前习惯用CVF编程,装了win7系统,还想用这个软件,

参考yrliu大侠的帖子:http://www.programfan.com/club/showtxt.asp?id=314906,可以用CVF了

同时我电脑里还装了IVF,

一般我都是用CVF编程序,然后IVF运行(曾经对比过速度,比CVF的release模式稍快一点),

今天出现了下面这个问题:

CVF的debug和release模式没问题,文件正常;IVF运行也正常,但计算结果中出现NAN,没法后处理了。

请教各位专家这是什么原因?

回复列表 (共21个回复)

11 楼

intel这种离开优化库和fastmath的什么都不是的不入流编译器
哎……

12 楼

呵呵,多谢楼上两位高手的指点!

我用gfortran加上这些优化参数试一下,

既然gfortran有这么多优化参数,为什么不像intel fortran一样自动优化呢,这样输入命令是不是太麻烦了,请高手解惑。

13 楼

gfortran -O3 -fivopts -ftree-loop-linear -ftree-vectorize -fforce-addr -fomit-frame-pointer -fno-bounds-check -funroll-loops -ffast-math -march=native -finit-local-zero main.f90

执行上面的命令,果然快了不少,今天下午看看结果怎么样!

先暂时不结贴。

14 楼

发这个帖子也有一段时间了,我补充一下背景,

刚发这个帖子时,我用的是win7系统,出现了本帖子中的问题,

后来我又装了ubuntu10.10系统,编译器安装了Intel fortran和gfortran,同样出现ifort计算结果不对的问题,
我gfortran的版本为GNU Fortran(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2

以前关注算法多一些,编译器够用就行,随着程序的发展,也开始关注运行效率了。但对编译器了解的太少了,遇到了不少问题,多谢各位大侠仗义出手相助!

15 楼

gfortran据说要用LLVM了,用完后不知道性能会提升多少。不过gcc如果windows版本的库能好好优化一下会是一个很不错的产品形象提升:)

16 楼

[quote]gfortran据说要用LLVM了,用完后不知道性能会提升多少。不过gcc如果windows版本的库能好好优化一下会是一个很不错的产品形象提升:)[/quote]
…………
没影的事

源码就不可能(C/C++的接口转换挺麻烦的)
LTO信息也不兼容,倒是LLVM可以作为gcc的插件进行存在来替换gcc的部分功能

在GPL限制下已经够优化的了,只不过很多人不会用而已。而且外围库gcc是不处理的,你应该找各自的CRT,或者使用第三方优化库来替代CRT的函数,这就是开源DIY之处,反正接口都给你了,随便你自己玩。你完全可以自己整出来一个速度秒杀其他编译器的gcc来。但你敢分发么?这就是授权的限制,不过GPL的漏洞在于你不分发就行,所以这个余地留给用户了。

GNU也不需要这些无用的形象提升,Linux X86下也只有LLVM是竞争对手,计算领域再加上Open64,嵌入式开源还是GCC的天下。Windows下VC是老大,注重跨平台的会使用GCC,Intel的用的人不多,只用作参照体和测试体,而且Intel编译出来的东西消耗内存太多,很多软件也不敢用。
优化本来就是个双刃剑,可能提升也可能完蛋。再说有太多的开源优化库可用,用哪个不比Intel的强啊,Intel的还是收费的,不准做为商业开发(还不像VC有免费的编译器)。

Intel唯一的好处是把库集中在一起了,所以给初学者用/喜欢花钱的不知道其他库的科研工作者用比较好。

17 楼

我在想一个问题:
如果我自己写一个CRT,并且是Free版权或是BSD版权,那可以不可以发布并用于GCC呢?
我对这个GPL一直很糊涂。。。

18 楼

楼主,我也有这方面的困惑,咱们讨论下吧!我的qq:812861800

19 楼

这里面有多个授权
GPL授权是传染性的,只要你的exe链接了GPL代码(包括动态链接静态链接),那么exe就必须GPL发布。
GCC编译器是GPL授权的,这部分只是把源代码变成.o的过程,GCC编译器还包含各个语言核心库,比如libgcc/libgfortran/STL,这部分是要链接到你的exe里去的,所以不是GPL授权,为公共领域。
这只是一部分,如果要变成最终程序,还需要链接器和CRT,链接器ld是GPL授权,但和你最终的exe没有关系。
CRT各个平台不一样,Windows GCC的CRT有mingw/mingw64,这俩都是公共领域,也就是无版权的,cygwin忘了,可以查查。Linux下的CRT为glibc,这个是LGPL授权,也就是说你静态链接glibc,那么就必须公布你的源代码,如果你动态链接他,那么随意。

如果你自己写CRT,这部分代码是要进exe的,所以最终exe的授权和你CRT的版权有关。
如果是GPL,exe就是GPL
如果是BSD,那么随意
Free,那么问作者

20 楼

我用gfortran+优化参数后,速度与ifort差不多,而且计算结果是正确的!

感谢dongyuanxun大侠的帮助,也感谢各位高手的帮助,

程序初始化问题,我再仔细查查!以后主要就用gfortran了!

我来回复

您尚未登录,请登录后再回复。点此登录或注册