访问数组中的元素是否比访问变量慢?

计算科学 优化
2021-12-13 13:43:52

在优化我的代码时,我发现自己经常写类似下面的东西......

do i = 1,n
    r = t(i)
    y(i) = r*r*2.0
    f(i) = r*3.5
enddo

我对我的变量所做的事情,r除了它被多次使用之外,真的无关紧要,而且很可能被使用了 5 或 6 次。现在,在我的脑海中,我这样做是因为我认为访问数组很慢,我想存储该变量,以便下次可以更快地检索它。这是一个正确的思路吗?我想知道,由于我使用了 t(i),它是否像再次引用一样容易在短时间内连续引用r将数组中的值存储到临时变量中是否会使我们再次更快地获得该值,或者就像我写的一样

do i = 1,n
    r = t(i)
    y(i) = t(i)*t(i)*2.0
    f(i) = t(i)*3.5
enddo

? 如果它们相同,那么我实际上是通过编写额外的作业()来减慢速度r = t(i)

2个回答

如果没有可能的别名(Fortran 禁止),任何现代编译器都应该将它们解释为相同。您应该使用在调试器中更易于阅读或检查的任何内容。

最好的做法是首先以最易读的形式编写代码(有助于理解和调试,并在编写代码很久后进行更改),然后使用分析器(在您打算使用代码的机器上)找出最昂贵的语句在哪里,以及更改这些语句如何影响时间。

不属于最昂贵的代码片段根本不需要优化,因为节省的成本很小,并且可读性受到影响。