为什么这个嵌套循环有内存流量N(N + 1)而不是N ^ 2?

时间:2014-10-15 22:39:44

标签: algorithm memory optimization hardware

我今天早些时候正在阅读一本关于内存访问优化技术的教科书,例如展开和卡纸,本书提供了这个作为考虑的例子(在优化之前):

do i=1,N
  do j=1,N
    sum = sum + foo(A(i),B(j))
  enddo
enddo

看着这个,立刻突然出现的是内存流量应该是N ^ 2。但是,代码后面的解释说明总内存流量实际上是N(N + 1)。那为什么会这样?

我的最佳猜测基本上是这样的:N(N + 1)= N ^ 2 + N.N ^ 2来自加载所有阵列B(其大小为N)总共N次(到期到外循环),N来自加载所有A(大小为N)正好一次(因为外循环运行完成一次)。

这是准确的吗?或者是否有一些东西可能会加载foo的签名,或者读取/写入变量sum,或者其他偷偷摸摸的东西,我不考虑导致+1项?我知道这是一个相对简单的问题,但我想确保在解决更难的问题之前,我正在以正确的方式思考这类问题。

0 个答案:

没有答案