问题的框架
我目前正在为海洋/循环模型编辑一个附加模块,该模型是用 Fortran 编写的。主模型的代码在较短的运行时间(而不是代码的可读性)方面进行了相当优化。附加模块中的一些代码部分似乎没有被优化——至少从我的角度来看是这样。
问题
在三种情况下,引入了一个临时变量来替代某些计算,如下所示:
! comment
a2 = a * a
b2 = b * b
! comment
c = a / (a2 + b2)
! comment
f = c * d
如果(1)我想让代码更好地可读或(2)a * a
在代码中被替换几次,这对我来说似乎是合理的。然而,(1) 和 (2) 并非如此:a2
并且b2
只需要一次。为了减少运行时间,这个公式似乎更好:
f = d * a / (a * a + b * b)
计算步骤的数量保持不变。删除了三个变量的声明。我们在代码中松散了一些解释。
我认为在以前版本的代码a * a
中多次出现,这就是为什么它被a2
. 但是,它没有被删除。
问题
- 关于“最佳”运行时间保持代码在第一个代码剪切中发布的一个很好的理由吗?
- 最先进的编译器(即 ifort)是否会检测到它并删除不必要的变量?因此,两种配方都没有区别吗?