【问题标题】:Formatted vs unformatted file writing格式化与未格式化的文件写入
【发布时间】: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) ...)在第二种情况下。

标签: file-io fortran cpu-time


【解决方案1】:

请注意,在一种情况下,您先写整个 A,然后是整个 B,然后是整个 C。在第二种情况下,您正在写 A11,B11,C11,A21,B21,C21,...这是不同的,但是影响会很小。

将数字从二进制内存表示转换为人类可读数字需要大量 CPU 时间。这主要是在格式化的情况下使它变慢的原因。此外,文件较大,因此写入需要更多时间。

【讨论】:

  • 而且第二个有N**2 记录(带分隔符)而不是 1。可以写入更多字符。
  • 确实,这会在两个未格式化的情况下产生很大的不同。
猜你喜欢
  • 2015-06-07
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多