关键字优先 & 提前重启动:让CPU少等内存的两种套路

缓存miss了,传统做法是等整个64字节块从内存回来再交给CPU。但CPU可能只需要其中4字节。关键字优先(Critical Word First)和提前重启动(Early Restart)就是用来解决这个问题的——让CPU早点拿到急需的数据,剩下的慢慢传。


1. 传统加载的问题

假设L1缓存miss,需要从DDR4内存加载一个64字节块:

  • 内存延迟:50ns
  • 内存带宽:20GB/s
  • 加载64字节理论上只需要3ns,但延迟是50ns

传统做法:等50ns,64字节全到了,再交给CPU。CPU在这50ns里完全停顿。

实际上,DDR内存是burst传输的。一个64字节块需要8个burst(每个burst 8字节),按顺序传输。如果CPU要的是第7个burst,也得等前面6个传完。


2. 两种优化策略

2.1 提前重启动(Early Restart)

核心思想:不按顺序等,只要请求的那个字到了,立刻给CPU,让它继续执行,剩下的字后台慢慢传。

工作流程

  1. 内存按正常顺序传burst 0,1,2,3,4,5,6,7
  2. 假设CPU请求的是burst 3
  3. burst 3到达时,立即送给CPU,CPU流水线重启
  4. burst 4,5,6,7继续传,填充缓存

适用场景:顺序访问。因为空间局部性,CPU很可能接下来要burst 4,5,6,7,这些已经在路上了。

局限性:如果CPU接下来要的是burst 0(回跳),还得等,因为已经传过了。

2.2 关键字优先(Critical Word First)

核心思想:改变传输顺序,先传CPU要的那个字,再传其他的。

工作流程

  1. CPU请求burst 3
  2. 内存控制器调整顺序:先传burst 3
  3. burst 3到达,送给CPU,CPU流水线重启
  4. 后台继续传burst 0,1,2,4,5,6,7

适用场景:随机访问。比如指针追逐、分支跳转目标,不知道接下来要哪个字。

关键区别

  • Early Restart:不改变传输顺序,只改变响应时机
  • Critical Word First:改变传输顺序,优先传关键字

3. 效果分析

3.1 理论收益

假设:

  • 块大小:64字节(8个burst,每个8字节)
  • 内存延迟:50ns(从请求到第一个burst到达)
  • burst间隔:6ns(50ns/8个burst的传输时间)
策略 等待时间 节省
传统方式 50ns 0%
Early Restart(关键字在中间) ~25ns 50%
Critical Word First(关键字优先) ~12ns 75%

注意:Critical Word First不是0等待,因为内存控制器需要时间处理请求、调整顺序。

3.2 实际限制

Early Restart的问题

Hennessy & Patterson的经典教材[1][2]指出:

"Spatial locality => tend to want next sequential word, so first access to a block is normally to 1st word, but next is to 2nd word, which may stall again and so on, so benefit from early restart alone is not clear"

翻译:空间局部性导致第一次访问通常是第0个字,但第二次访问第1个字时,如果Early Restart已经传过第1个字了,CPU还是得等。所以Early Restart单独使用的效果不明确。

Critical Word First的问题

  1. 内存控制器复杂度:需要支持乱序burst传输
  2. DDR协议限制:DDR的burst传输有固定模式(如sequential或interleaved),完全乱序可能不支持
  3. 块大小限制:块越大(128B),收益越高;块小(32B),节省的时间可能被控制逻辑开销抵消

4. 与非阻塞缓存的协同

Critical Word First/Early Restart和Non-blocking Cache是绝配。

Non-blocking Cache:允许miss时继续处理其他请求
Critical Word First:让CPU尽快拿到数据,继续执行

两者结合:

  1. Load A miss,请求Critical Word
  2. CPU继续执行,发射Load B
  3. Load B hit(如果数据在缓存)
  4. Critical Word到达,CPU继续Load A的依赖指令
  5. 同时,缓存后台加载剩余块

这种重叠可以显著降低effective miss penalty。


5. 总结

策略 改变传输顺序 适用场景 实现复杂度 实际收益
Early Restart 顺序访问 中等(空间局部性限制)
Critical Word First 随机访问 高(大块缓存)

关键认知

  1. 块越大(≥64B),这两种技术的收益越高
  2. Early Restart单独使用效果有限,因为空间局部性导致下一次访问很可能已经传过了
  3. Critical Word First需要内存控制器支持,实现更复杂
  4. 现代处理器主要依赖硬件预取Non-blocking Cache来隐藏延迟,这两种技术作为辅助

理解这些,做缓存设计时就能在复杂度、功耗、性能间找到平衡。


参考


  1. PassLab, University of Wisconsin. Lecture 12: Memory Hierarchy -- Cache Optimizations. Summary of advanced cache optimization techniques.

  2. Iowa State University. Reducing Miss Penalty Summary. Early Restart and Critical Word First.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容