硬件预取器预取单块还是多块?

时间:2013-11-17 17:49:20

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

根据此处与硬件预取相关的信息,hardware prefetching schemes 有三种类型的硬件预取,

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

  2. Tagged Prefetcher:对于每个块,一个标签被关联,并且与上面的预取器相反,每当访问块n时,这个预取器总是预取块(n + 1)。

  3. 学位K的预取器:预取n + 1,n + 2,..... n + k块。

  4. 在其他一些链接中,硬件预取器的定义表示当硬件检测到一个步幅时它会激活,它会提前根据步幅预取块以停止停止。

    现在,我怀疑如下

    根据步幅检测的硬件预取器,硬件预取器将在步幅距离预取块。

    问题是硬件预取器,预取1个块还是2个块或者没有块?

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

    现在它只预取块8,16,24或者根据Prefetcher预取所有块0,1,2,... 8,程度K = 8 [第3类预取器]

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

    这里我将在访问0,8,16,24之后随机访问任何块,这样就没有可检测到的步幅。

    任何链接或帮助都将受到高度赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:3)

基于非单位步幅的预取程序将以给定的步幅获取而不是预取中间块。非单位步幅预取的目的是避免因预取未使用的块而导致过多的高速缓存污染和带宽浪费,因此预检就像检测到单位步幅一样是不合适的。

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

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