【问题标题】:Is this both temporal or spatial locality?这是时间局部性还是空间局部性?
【发布时间】:2011-12-16 13:52:00
【问题描述】:
我想问一下空间和时间局部性。如果我处于一个循环变量的循环中,比如i ,并且我正在遍历一个名为arr[i] 的数组,那么当我访问 arr[i] 时,根据我的说法,它应该是时间和空间局部性,因为我首先要访问i 并找出 i 是什么,然后转到该索引。我在这里做两件事,
- 访问
i(时间位置)。
- 访问地址
arr[i](空间位置)。
请告诉我这种情况是否正确。
提前致谢。
【问题讨论】:
标签:
spatial
computer-architecture
temporal
【解决方案1】:
时间局部性:事情是否在短时间内发生?如果是这样,它们具有时间局部性。如果没有,他们不会。
空间局部性:事物在空间中是否靠近在一起(即内存)?如果是这样,它们就具有空间局部性。如果没有,他们不会。
请注意,在使用这些术语时,您需要指定什么是本地的;孤立地看,它们没有什么意义。
arr 的元素(假设通常意味着“数组”的实现,即在连续块中分配的数据元素)相对于彼此具有空间局部性。您不知道(至少从问题中所述的任何内容)i 相对于arr 的位置,因此您不能说这些对象是否显示出相对于彼此的空间局部性。
访问i 和arr[i] 的语句一个接一个地发生,因此它们表现出时间局部性,假设您对每个数组元素所做的工作很便宜;有了这个假设,后续迭代对arr 的不同元素的引用也将表现出时间局部性。但是,如果对于循环的每次迭代,您调用的某个函数在访问 i 和 arr 之间需要很长时间,那么这些访问将不再具有时间局部性。