首页 > 解决方案 > Fortran 性能,在每个子程序调用时分配或声明一个全局变量并分配一次

问题描述

我有一个子程序,它分配四个大小 = 9 的向量,并对其进行一些操作。这些向量只在这个子程序中使用。在我的程序运行期间,该子程序被调用了数千次。

每次调用子程序时分配向量是否值得,或者最好创建一个全局变量并且只分配一次向量?

标签: performancefortran

解决方案


对于非常大的工作数组(大型 3D 数组),我会声明(全局)模块变量,然后在模块中方便地使用清理子例程。

但是,对于大小为 9 的向量,这实际上是不必要的。将这些作为局部变量分配到堆栈上没有任何成本。大小为 9 的局部变量,无论是显式的还是自动的,在堆栈上分配的成本为零。Fortran 标准不允许您决定分配发生的位置,但编译器通常会这样做。堆栈往往是默认设置。

静态存储也是可能的(有效地由save属性强制),但在这里似乎没有必要。


推荐阅读