【缓存预取】Primer on Hardware Prefetching(一)

一 预取

为了隐藏latency,预取机制需要:1)准确的预测memory访问地址 2) 预测何时预取 3)选择在哪里放置预取的数据

1.1 预取地址

如果程序执行的是顺序的访问数组,那么预取的地址有规律,比较方便做。但是如果是间隔的访问变量,多重数据结构或者是控制流相关的访问,比如访问二叉树,那么地址就不好预测。

上面说的是数据预取,那么对指令的预取的效果就主要依赖于程序是顺序执行,还是正在执行分支。顺序预取比较简单,但是指令控制流的行为以及该行为是否可预测,就决定了指令预取的效果。

预取地址也依赖于cache的层级。最高级的cache,直接与CPU连接,此时它可以获得准确且完整的CPU访问行为,但是将数据预取到最高级的cache中,如果cache本来就会命中,那么在最高级cache中实现的prefetcher就会浪费资源。相反,在最低级的cache中,它接触到的访问次序都已经被上层cache过滤掉了,因此只会接触到上层cache miss的部分。此外,cache也可能会被cache替换策略所干扰。

现在的研究中,一般将对prefetch的效果分为两部分:coverage和accuracy。

coverage就是prefetch减少了多少cache miss。 Accuracy则是prefetch发出的数据中的有用部分的占比。很多简单的prefetcher是通过牺牲准确率来提高覆盖率,然而理想的prefetcher能够同时兼顾高准确率和覆盖率。

1.2 提前预取

准确的预测何时发出预取也是一个挑战。如果预取的过早,cache可能无法长时间hold所有预取来的数据。被预取来的数据可能被victim出去,也有可能反而把有用的数据victim出去。如果预取的过晚,那么就起不到prefetch的效果。

1.3 存放预取数据的位置

如果是软件的策略,可能会想要将prefetch来的数据存放到寄存器。硬件预取一般会将数据直接存到cache或者是buffer中,因为它们也受cache一致性的保护。

欢迎关注我的公众号《处理器与AI芯片》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值