performance - Fortran 性能,在每个子程序调用时分配或声明一个全局变量并分配一次

标签 performance fortran

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

每次调用子例程时都分配向量是否值得,还是创建一个全局变量并只分配一次向量更好?

最佳答案

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

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

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

关于performance - Fortran 性能,在每个子程序调用时分配或声明一个全局变量并分配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61396652/

相关文章:

java - 有任何与 JMX 一起使用的 WS-DM 开源实现吗?

检查 iso_c_binding 在编译时是否可用

algorithm - 在 Fortran 中使用蒙特卡罗方法估计 pi

arguments - fortran意图(in,out,inout)之间的明显区别是什么?

python - 对元组列表中的每个值求和

python - 有没有办法提高 nltk.sentiment.vader 情感分析的性能?

python - 链接列表的多个索引操作的最快方法?

javascript - 有没有办法知道浏览器UI线程是否繁忙?

Fortran "Error: Two main PROGRAMs at (1) and (2)"

parallel-processing - 使用 gfortran 自动并行化