2

我已经阅读了有关使用 ifort (使用-assume buffered_ioor FORT_BUFFERED=true)启用缓冲 I/O 的英特尔文档,这适用于直接输出到文件。但是,我们有大型应用程序正在写入标准输出(例如write(*,*)write(stdout,*)),它被重定向到一个文件。在这种情况下,这两种缓冲技术都不起作用。

除了重构代码以直接写入文件之外,是否有一种方法可以使用 ifort 在 stdout 上启用缓冲 I/O?这在例如 gfortran 上默认启用。

我们在 SLES 11 上使用 ifort 12.0。

更新:感谢您的评论。我正在通过缓冲程序(如 tee)研究 stdbuf 和/或管道作为解决方法。到目前为止,我还无法做出可衡量的差异。

更新 2:

我已经尝试了 Douglas 的建议的一些实验,通过另一个程序进行管道传输。tee 和 cat 都缓冲,实际上缓冲似乎是由管道本身在 8K 左右完成的。然而,最初的 write() 调用、管道以及管道程序(tee、cat 等)的系统调用的开销太高,无法使其成为可行的解决方案。

4

0 回答 0