我读过有关使用 ifort 启用缓冲 I/O 的英特尔文档(使用-assume buffered_io
or FORT_BUFFERED=true
),这适用于直接输出到文件。然而,我们有大型应用程序正在写入标准输出(例如write(*,*)
or write(stdout,*)
),它被重定向到一个文件。在这种情况下,两种缓冲技术都不起作用。
除了重构代码以直接写入文件之外,是否有一种方法可以使用 ifort 在 stdout 上启用缓冲 I/O?例如,gfortran 上默认启用此功能。
我们在 SLES 11 上使用 ifort 12.0。
更新:感谢您的评论。我正在研究 stdbuf 和/或通过缓冲程序(如 tee)进行管道传输作为解决方法。到目前为止,我还无法做出可衡量的改变。
更新2:
我根据道格拉斯的建议尝试了一些实验,通过另一个程序进行管道传输。 tee 和 cat 都缓冲,事实上缓冲似乎是由管道本身完成的,大约 8K。然而,原始 write() 调用、管道以及管道程序的系统调用(tee、cat 等)的开销太高,无法使其成为可行的解决方案。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)