【问题标题】:Hardware Prefetcher prefetches single block or multiple blocks?硬件预取器预取单个块还是多个块?
【发布时间】:2013-11-30 19:01:13
【问题描述】:

从这里有关硬件预取的信息来看,hardware prefetching schemes 硬件预取有 3 种类型,

  1. 未命中预取器:如果块 n 未命中,则预取块 (n+1)。正如名称所反映的,如果块 n 没有未命中,则此预取器将不会预取块 (n+1)。 [也只预取单个块]。

  2. Tagged Prefetcher : 每个 block 都关联一个标签,与上面的 prefetcher 不同,每当访问 block n 时,这个 prefetcher 总是会预取块 (n+1)。

  3. 度数为 K 的预取器:预取 n+1、n+2、..... n+k 块。

在其他一些链接中,硬件预取器的定义说它在硬件检测到步幅时激活,它预先根据步幅预取块以停止停止。

现在,我的疑问如下

根据Hardware prefetcher on stride detection,Hardware prefetcher会在stride distance处预取器阻塞。

问题是硬件预取器会预取 1 个块还是 2 个块或任意块?

让我举一个例子。假设我正在访问 0,8,16,24,....硬件预取器将检测到 8 的步幅。

现在它将仅预取第 8、16、24 号块,还是根据 K=8 度的预取器预取所有块 0、1、2、...8 [上述第 3 种预取器]

如果硬件预取器只预取0,8,16,24,那么稍后其他块的访问由于硬件预取不受影响,否则会影响其他块的访问时间[1,2,3,, ,,,7 ] [9,10,11,....]

这里我将在访问 0,8,16,24 之后随机访问任何块,因此不会检测到步幅。

任何链接或帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: operating-system cpu-architecture cpu-cache


    【解决方案1】:

    基于非单位跨度的预取器将以给定的跨度进行获取,而不是预取中间块。非单位步长预取的目的是避免因预取未使用的块而造成过多的缓存污染和带宽浪费,因此像检测到单位步长一样进行预取是不合适的。

    足以处理步幅的预取器几乎肯定会提供多个步幅序列流,因此可以检测到第二个序列(例如,1、9、...)并开始预取,同时仍沿第一个预取顺序。硬件根据过去的行为预测未来。如果第一个序列之外的行为是随机的,则硬件无法准确预测其他块将很快被访问。 (软件预取可以通知硬件这种预期行为。)

    此外,不同的预取引擎和策略可能存在于不同级别的缓存中。这将主要影响预取距离(以补偿更接近内存的访问的更大延迟),但距离处理器更远的预取引擎也可能更能容忍延迟(因此可以应用更多的聪明和更大的存储和逻辑开销;缓存污染也不太重要,因为缓存的外部级别具有更大的容量和关联性)。 (在内存控制器中,活动 DRAM 行中的预取可能比随机访问更便宜,尤其是在避免使用仅读取完整突发的一半的突发斩波时。)

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 2020-05-18
      • 2010-09-09
      • 2019-09-21
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      相关资源
      最近更新 更多