我读过的英特尔文档关于启用缓冲I / O与ifort(使用-assume buffered_io
或FORT_BUFFERED=true
),这将直接适用于输出到文件。 但是,我们有正在写到标准输出(如大型应用程序write(*,*)
或write(stdout,*)
这是重定向到一个文件。 在这种情况下,无论是的缓冲技术工作。
除了重构代码直接写入文件,有没有使与ifort标准输出缓冲I / O的方法? 这是默认启用,例如,gfortran。
我们使用ifort 12.0上SLES 11。
更新:感谢您的意见。 我调查通过缓冲程序(如TEE)stdbuf和/或管道作为一种解决方法。 到目前为止,我还没有能够进行可测量的差异。
更新2:
我已经尝试了一些实验与道格拉斯的建议,通过其他程序管道。 三通和猫都缓存在脸上的缓冲似乎通过管道本身在8K左右来完成。 然而,原来写的开销()调用,加管,加管道项目(TEE,猫等)的系统调用过高使之成为一个可行的解决方案。