【发布时间】:2016-11-08 14:02:31
【问题描述】:
我经常观察到,在 Fortran 90 中,未格式化的文件写入(如下所示)比格式化文件写入(也如下所示)要快得多。
无格式文件写入
OPEN ( Unit=86, File='out.dat', Form='unformatted', Action='Write')
WRITE (86) A, B, C
CLOSE (86)
格式化文件写入
OPEN ( Unit=86, File='out.dat', Form='formatted', Action='Write')
DO ii = 1,N
DO jj = 1,N
WRITE (*,86) A(ii,jj), B(ii,jj), C(ii,jj)
END DO
END DO
CLOSE (86)
其中 A,B,C 是大小为 (N,N) 的二维数组。我发现在这种情况下CPU_Time 的差异大约是 12 秒。
为什么会有很大的不同?只是循环格式化程序所花费的时间吗?
【问题讨论】:
-
这两种情况做了大量不同的事情,甚至超出了格式化/未格式化的变化。如果你比较一下,你仍然会看到只有那一点的区别,也许未格式化的写入速度更快,但你想了解哪些方面?
-
是的。真的。我已经观察到了。我只是想知道如何以及为什么未格式化的写入更快?
-
另外,您的
write语句是错误的:write(86) A, B, C在第一种情况下,write(86,*) ...(或write(fmt=*,unit=86) ...)在第二种情况下。