主题:win7系统在cvf下编程,debug和release模式没问题,IVF运行结果出现NAN
ch06
[专家分:30] 发布于 2011-08-14 19:03:00
以前习惯用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 楼
dongyuanxun [专家分:7180] 发布于 2011-10-13 05:49:00
intel这种离开优化库和fastmath的什么都不是的不入流编译器
哎……
12 楼
ch06 [专家分:30] 发布于 2011-10-13 08:57:00
呵呵,多谢楼上两位高手的指点!
我用gfortran加上这些优化参数试一下,
既然gfortran有这么多优化参数,为什么不像intel fortran一样自动优化呢,这样输入命令是不是太麻烦了,请高手解惑。
13 楼
ch06 [专家分:30] 发布于 2011-10-13 09:10:00
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 楼
ch06 [专家分:30] 发布于 2011-10-13 09:20:00
发这个帖子也有一段时间了,我补充一下背景,
刚发这个帖子时,我用的是win7系统,出现了本帖子中的问题,
后来我又装了ubuntu10.10系统,编译器安装了Intel fortran和gfortran,同样出现ifort计算结果不对的问题,
我gfortran的版本为GNU Fortran(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2
以前关注算法多一些,编译器够用就行,随着程序的发展,也开始关注运行效率了。但对编译器了解的太少了,遇到了不少问题,多谢各位大侠仗义出手相助!
15 楼
cgl_lgs [专家分:21040] 发布于 2011-10-13 10:17:00
gfortran据说要用LLVM了,用完后不知道性能会提升多少。不过gcc如果windows版本的库能好好优化一下会是一个很不错的产品形象提升:)
16 楼
dongyuanxun [专家分:7180] 发布于 2011-10-13 11:06:00
[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 楼
cgl_lgs [专家分:21040] 发布于 2011-10-13 12:46:00
我在想一个问题:
如果我自己写一个CRT,并且是Free版权或是BSD版权,那可以不可以发布并用于GCC呢?
我对这个GPL一直很糊涂。。。
18 楼
hhjjack [专家分:0] 发布于 2011-10-13 13:26:00
楼主,我也有这方面的困惑,咱们讨论下吧!我的qq:812861800
19 楼
dongyuanxun [专家分:7180] 发布于 2011-10-13 13:31:00
这里面有多个授权
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 楼
ch06 [专家分:30] 发布于 2011-10-13 15:31:00
我用gfortran+优化参数后,速度与ifort差不多,而且计算结果是正确的!
感谢dongyuanxun大侠的帮助,也感谢各位高手的帮助,
程序初始化问题,我再仔细查查!以后主要就用gfortran了!
我来回复