Operating system 硬件预取器预取单个块还是多个块?

Operating system 硬件预取器预取单个块还是多个块?,operating-system,cpu-architecture,cpu-cache,Operating System,Cpu Architecture,Cpu Cache,根据此处与硬件预取相关的信息, 有3种类型的硬件预取 未命中时的预取器:如果块n未命中,则预取块(n+1)。根据名称反映,如果块n没有未命中,此预取器将不会预取块(n+1)。[此外,仅预取单个块] 带标签的预取器:与每个块关联一个标签,与上述预取器相反,每当访问块n时,该预取器将始终预取块(n+1) K度预取器:预取n+1,n+2,。。。。。n+k块 在另一个链接中,硬件预取器的定义是,当硬件检测到步幅时,它会激活,它会根据步幅预先预取块以停止暂停 现在,我的疑问如下 根据硬件预取器的步幅检测,

根据此处与硬件预取相关的信息, 有3种类型的硬件预取

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

  • 带标签的预取器:与每个块关联一个标签,与上述预取器相反,每当访问块n时,该预取器将始终预取块(n+1)

  • K度预取器:预取n+1,n+2,。。。。。n+k块

  • 在另一个链接中,硬件预取器的定义是,当硬件检测到步幅时,它会激活,它会根据步幅预先预取块以停止暂停

    现在,我的疑问如下

    根据硬件预取器的步幅检测,硬件预取器将在步幅距离处预取器阻塞

    问题是硬件预取器会预取1个块还是2个块,或者任何一个块都不会预取

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

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

    如果硬件预取器仅预取0,8,16,24,则在稍后时间,由于硬件预取而不影响其他块的访问,否则将对其他块的访问时间产生影响[1,2,3,,,,,,,,,,,7][9,10,11,…]

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


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

    基于非单位步长的预取器将按给定步长进行提取,而不是预取中间块。非单位步长预取的目的是避免预取未使用的块时造成过多的缓存污染和带宽浪费,因此,如果检测到单位步长,则预取是不合适的

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

    此外,不同级别的缓存中可能存在不同的预取引擎和策略。这将主要影响提前取数距离(以补偿更接近内存的访问延迟),但距离处理器更远的预取引擎也可能更能容忍延迟(因此可以应用更聪明、更大的存储和逻辑开销;缓存污染也不那么严重,因为外部级别的缓存具有更大的容量和关联性)。(在内存控制器上,活动DRAM行内的预取比随机访问的成本更低,尤其是当这样避免使用只读取半个完整突发的突发切块时。)