【发布时间】:2013-11-30 19:01:13
【问题描述】:
从这里有关硬件预取的信息来看,hardware prefetching schemes 硬件预取有 3 种类型,
未命中预取器:如果块 n 未命中,则预取块 (n+1)。正如名称所反映的,如果块 n 没有未命中,则此预取器将不会预取块 (n+1)。 [也只预取单个块]。
Tagged Prefetcher : 每个 block 都关联一个标签,与上面的 prefetcher 不同,每当访问 block n 时,这个 prefetcher 总是会预取块 (n+1)。
度数为 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