Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran打印语句对性能的影响_Fortran_Stdout - Fatal编程技术网

Fortran打印语句对性能的影响

Fortran打印语句对性能的影响,fortran,stdout,Fortran,Stdout,我只是继承了一些旧的Fortran代码,它到处都有打印语句(当它运行时,矩阵流通过)。我知道这些打印语句是无用的,因为我不知道程序正在打印什么,因为它运行得太快了。但是,在Fortran程序中使用大量打印语句是否会对性能产生重大影响(例如,一个过于冗长的程序执行起来是否需要更长的时间)?这似乎是另一行执行,但我不知道它是否重要。一般来说,是的,执行I/O“相对昂贵”,因为您必须执行格式化数字等操作,尤其是浮点数,即使这些过程经过高度优化。但是,最大的成本之一(在准备好写入缓冲区后实际执行I/O的

我只是继承了一些旧的Fortran代码,它到处都有打印语句(当它运行时,矩阵流通过)。我知道这些打印语句是无用的,因为我不知道程序正在打印什么,因为它运行得太快了。但是,在Fortran程序中使用大量打印语句是否会对性能产生重大影响(例如,一个过于冗长的程序执行起来是否需要更长的时间)?这似乎是另一行执行,但我不知道它是否重要。

一般来说,是的,执行I/O“相对昂贵”,因为您必须执行格式化数字等操作,尤其是浮点数,即使这些过程经过高度优化。但是,最大的成本之一(在准备好写入缓冲区后实际执行I/O的系统调用)是在良好的编译器/运行时中摊销的,因为I/O语句通常是默认缓冲的。这有助于显著减少系统调用的数量,从而减少应用程序和操作系统之间频繁切换上下文所造成的延迟


也就是说,如果您担心性能受到影响,为什么不尝试对每个PRINT或WRITE语句进行注释,看看运行时是如何变化的?或者更好的方法是,分析您的应用程序,并查看在I/O和相关例程上花费的时间。

在gfortran中,它以某种方式被缓冲,但有一定的限制。您可以将print语句放在崩溃的行之前,并且可以确保在崩溃发生之前完成并真正显示打印。根据我的经验,如果这些语句吃得太多,代码就会变慢。如果一个人开始反复显示大数组,即使是以数量级为单位。