不规则代码的价值剖面引导步长预取技术解析
1. 硬件步长预取与VPGSP概述
硬件步长预取是一种常见的预取机制。当指令地址 I
和数据地址 D1
被插入参考预测表(RPT)时,状态设为 “no prefetch”。后续遇到相同指令地址 I
和新的数据地址 D2
的读缺失时,若对应记录未被替换,RPT 会命中,计算步长 S1 = D2 - D1
并插入 RPT,状态设为 “prefetch”。下次遇到相同指令 I
和地址 D3
时,会预测对 D3 + S1
的引用,同时监控当前步长 S2 = D3 - D2
,若 S2
与 S1
不同,状态降级为 “no prefetch”。
不过,硬件步长预取与 VPGSP 相比存在一些局限性:
- 预取距离的随意性 :预取距离是两次缺失时数据地址的差值,可能导致缓存污染(预取过远)或内存流量浪费(预取过短)。
- 硬件表大小限制 :对于有大量缓存缺失负载的程序,硬件表可能溢出,丢弃有用步长,降低预取效果。
- 缓存级别监控局限 :硬件通常监控特定缓存级别(如 L1)的缺失来确定预取步长,而 VPGSP 更灵活,可针对不同缓存级别使用不同预取距离进行预取。