【问题标题】:Temporal locality with regard to data access and temporal locality with regard to data fetch关于数据访问的时间局部性和关于数据获取的时间局部性
【发布时间】:2011-12-09 09:08:02
【问题描述】:

我遇到了一个问题,如下所述,

描述一个程序的一般特征和行为:
(a) 数据访问的时间局部性低
(b) 取指令的时间局部性低

我理解时间局部性,但我无法理解它对于数据访问和指令获取的含义。如果有人能向我解释一下,我将非常感激。

【问题讨论】:

    标签: computer-architecture instructions temporal


    【解决方案1】:

    他们正在讨论优化缓存以访问 CPU 中的数据和指令。从本质上讲,低时间局部性意味着经常重复使用的东西,但不是一大块(即随着时间的推移而分散)。

    低时间局部性示例:

    read file
    process data
    output result
    ....
    read file
    process data
    output result
    ....
    read file
    process data
    output result
    

    为了改善这一点,您可以重新安排,使所有读取一起完成,所有处理一起完成,所有输出一起完成。

    在 CPU 的上下文中,您可以说如果您需要频繁读取内存,只需读取一次并缓存它,然后在丢弃之前尽可能多地使用它。对于指令,这意味着将循环指令等内容保存在非常快的缓存(通常是 L1)中。对于数据,这意味着缓存您最常用的任何内容。

    查看这些链接以获得正确的解释:
    http://www.dotnetperls.com/temporal-locality
    http://en.wikipedia.org/wiki/Locality_of_reference#Use_of_spatial_and_temporal_locality:_hierarchical_memory

    【讨论】:

    • 我仍然对两者的时间局部性感到困惑。您在示例中给出了这两个(指令获取/数据访问)中的哪一个?
    • 这个例子适用于两者。读取、处理和输出操作将具有与之关联的代码块。在其当前状态下,每个代码块都将从内存中获取,然后执行。如果操作是集群的(即读取、读取、读取、处理、处理、处理、输出、输出、输出),则代码块可以从内存中读取一次,而不是每次读取 3 次。这同样适用于操作使用的任何变量或数据。
    • 谢谢。您能否详细说明一下时间局部性一般是高还是低。哪个更好?
    • 越高越好。高时间局部性意味着“使用更频繁(或相互之间频繁使用)的东西存储得更近,或者存储得更快”。这也是机械驱动器中使用的概念。如果您知道您将按顺序读取一个文件,则使包含文件数据的块彼此本地,并且不要将它们分散在磁盘上的 500 个不同位置。
    • 我不能说程序的时间局部性较低,因为曾经使用过的指令/数据没有再次使用吗?所以程序出现的数据少了?
    【解决方案2】:
    • 代码的低时间局部性意味着没有循环和指令的重用。
    • 代码的高时间局部性意味着具有大量重用的紧密循环。
    • 代码的空间局部性低意味着要跳转到很远的地方。
    • 代码的高空间局部性意味着根本没有分支/跳转。

    参考:计算机组织和设计:硬件/软件接口

    【讨论】:

      猜你喜欢
      • 2014-01-29
      • 2012-12-07
      • 2011-12-16
      • 2011-11-08
      • 2013-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多