主题:linux下gfortran编译出的程序,写不了文件怎么回事啊
baccle
[专家分:190] 发布于 2011-07-10 21:45:00
遇到了一个很诡异的错误,在linux系统下用fortran编译程序,程序最开始是open语句打开文件这都没有错,但是往文件里写内容却怎么也写不进去。为了验证一下,我把该往文件里写的内容用write(*,*)输出到屏幕上,屏幕上可以输出。为啥往文件里写写不进去呢?
我的程序原来一直在window下用intel编译器编译运行,是没有任何错误的。
有高手大侠麻烦帮帮忙,我都快崩溃了。
回复列表 (共18个回复)
11 楼
cgl_lgs [专家分:21040] 发布于 2011-07-11 14:22:00
文件写缓冲太大了吧。不过gfortran写文件的效率确实不如ivf。
12 楼
dongyuanxun [专家分:7180] 发布于 2011-07-11 14:51:00
缓冲太大了呗
设置GFORTRAN_UNBUFFERED_ALL环境变量为1
13 楼
baccle [专家分:190] 发布于 2011-07-11 15:11:00
明白了,问题解决了,在每步的最后加上一句call flsuh()就行了,把缓冲区的内容都写到该写的地方上去就行了
造成这个问题的原因是linux系统,还是gfortran编译器,或者是曙光的集群?
14 楼
cgl_lgs [专家分:21040] 发布于 2011-07-11 15:28:00
编译器。
15 楼
dongyuanxun [专家分:7180] 发布于 2011-07-11 17:31:00
[quote]编译器。[/quote]
只能说先看硬件,再看系统,再看编译器
16 楼
yeg001 [专家分:14390] 发布于 2011-07-11 20:29:00
flsuh() 做同步会不会导致程序效率降低?
17 楼
baccle [专家分:190] 发布于 2011-07-13 11:23:00
flush()除了清理缓存区,还有同步作用吗?它是把什么同步了呢?
我的程序一共6000步循环,每次循环到最后了写数据,写的数据量很小,就几百个K吧,这样加上flush()语句后会产生多大的不利影响呢?
谢谢
18 楼
dongyuanxun [专家分:7180] 发布于 2011-07-13 12:53:00
肯定会慢的,你想想每次flush都要IO操作,本来是默认是缓冲满了再一起写入的。
记得综合来看,8192K的内存缓冲最佳,因为大于8192时,已经不提高IO性能了。
我来回复