【发布时间】:2013-12-31 00:31:26
【问题描述】:
我有这个分子动力学程序,它在模拟的每 n 步将原子位置和速度写入文件。实际的写作需要大约 90% 的运行时间! (通过消除写入来检查)所以我迫切需要优化它。
我看到一些 fortrans 有一个扩展来改变写缓冲区大小(称为 i/o 块大小)和 OPEN 语句中的“块数”,但似乎 gfortran 没有。我还在某处读到 gfortran 使用 8192 字节的写入缓冲区。
我什至尝试做一个 FSTAT(在打开之后,对吗?)来查看它正在使用的块大小和块数,但它在两者上都返回 -1。 (为 windows 64 位编译)
难道没有办法在 gfortran 中扩大文件的写入缓冲区吗? linux编译会不会和windows编译不一样?
我真的很想留在 fortran,但作为一种绝望的措施,难道没有办法通过添加一些 c 例程来做到这一点吗?
谢谢!
【问题讨论】:
-
你是在做格式化输出还是非格式化输出?
-
缓冲 IO 由环境变量 GFORTRAN_UNBUFFERED_ALL=n 控制。我记得在某处读过,速度与缓冲区大小无关,而是与缓冲区大小有关。 C 变体在编写后不会刷新并且运行速度更快。
-
谢谢! IanH 我不确定它是什么,抱歉,这里是菜鸟。它还没有使用格式。如果你的意思是 M.S.B.问,它是人类可读的。杯子,我去说明书上查一下,谢谢!特别是如果 gcc for windows (TDM64) 使用该变量。没有等效的命令行选项? “c 变体”是指如果它是用 c 编写的,对吧?
标签: file-io fortran fortran90 gfortran fortran95