Skip to content

cdp 间接预取

核心原理是当 load 的 cache line 到达的时候,检查 cacheline 中的数据,如果有个类似指针的数据,就发动预取。

prefetch 比较难做可能是因为集成在 cache 中的 prefetcher 所知道的程序语义太少,这在多篇论文中都有提到。

做这种指针预取有很多的前提,比如数据的布局比较好,虚拟地址的分配比较有规律等等。

架构和工作模式

本质就是拿到一个 cacheline 的时候进行检查,如果符合条件判断为指针就进行递归的预取。

深度是记录在每个 cache 中,或许这个深度是持续学习的或者固定的。第二种机制是在比如深度为3,实际到 2 的时候,发一轮新的预取,尝试更深一点,避免在 3 的时候的一些意外中断(未及时,意外被驱逐等等)等等。

虚拟地址预取的好处和TLB敏感性

文章再次说明了虚拟地址预取的好处。同时也证明了这个工作是对 TLB 大小不敏感的,也就是说提前的访问并没有污染到 TLB。由于两次指针之间的工作负载可能较小,因此对于及时性的要求可能很高,所以设置成 on chip 的。