HW prefetcher之CDP(Content-Directed Data Prefetching)

CDP是Content-Directed Data Prefetching的缩写,它基于Robert Cooksey和Stephan Jourdan提出的"Stateless, Content-Directed Data Prefetching Mechanism"论文实现。是一种内容导向的数据预取机制,CDP通过分析内存中的数据内容来识别可能的指针,当识别到指针时,它会预取指针指向的内存地址。CDP使用VPN表和过滤表来提高预取的准确性和效率,并通过自适应机制来调整预取策略。这种方法特别适合处理链表、树等指针密集型数据结构。

以香山GEM5代码为例,可参考

https://github.com/OpenXiangShan/GEM5/blob/xs-dev/src/mem/cache/prefetch/cdp.cc

CDP prefetcher由两个主要文件组成:

1. src/mem/cache/prefetch/cdp.hh - 头文件,定义了CDP类及其相关的数据结构和方法

2. src/mem/cache/prefetch/cdp.cc - 实现文件,包含了CDP类方法的具体实现

# CDP类的结构

CDP类继承自Queued类。

1. 内部定义了以下嵌套类:

SubVpnEntry:管理单个VPN子条目
VpnEntry:管理VPN条目,包含多个SubVpnEntry
VpnTable:管理VPN表,使用AssociativeSet实现
FilterTableEntry:过滤表条目
CDPStats:统计信息收集类,收集各种统计信息,如预取触发次数、命中率等

VpnTable
├── VpnEntry
│   ├── SubVpnEntry
│   ├── SubVpnEntry
│   └── ...
└── VpnEntry
    ├── SubVpnEntry
    ├── SubVpnEntry
    └── ...

2. 主要成员变量:

Table:VPN表,用于跟踪页面访问模式
filterTable:过滤表,用于减少不必要的预取
pfLRUFilter:使用LRU策略的预取过滤器
各种配置参数:enableCoordinate, depth_threshold, degree, throttle_aggressiveness等

重点是通过类VpnTable和FilterTableEntry定义了两个Table,Table 和 filterTable。在该算法中,Table 和 filterTable 用于跟踪和过滤预取内存访问的数据结构。

Table 功能
Table

用于跟踪每个 VpnEntry内 SubVpnEntry(虚拟页号)的引用计数和热度。它用于识别内存访问模式并预测未来的内存访问。

每当发生内存访问时(load/store/refill),Table 都会更新,并有助于根据观察到的访问模式确定是否触发预取。

filterTable

用于过滤不必要的预取请求。它通过跟踪先前预取的准确性来帮助减少预取次数。

生成预取请求时,将参考 filterTable 来确定是否应过滤该预取请求。

如果预取请求通过了过滤,则会将其添加到地址向量中以供进一步处理。

filterTable 会根据预取的准确性进行更新,并通过避免不必要的预取来提高预取机制的有效性。

3. 主要方法:

calculatePrefetch:计算预取地址
notifyFill:在缓存填充时通知预取器
notifyWithData:处理带有数据的通知
pfHitNotify:处理预

你可能感兴趣的:(xPU,Chip,Design,CPU,GEM5)