ABSTRACT:
常规的乱序处理器采用多端口,全关联的load queue保证单线程和多处理器多线程的正确内存引用计数,但随着频率加快和工艺改进,in-flight的load数量变多,缩放原有的结构困难且高耗能,因此,本文完全消除关联load queue,而是在retirement前按程序顺序重新执行和加载指令即可保证数据依赖性和内存一致性约束。
1. Introduction
本文通过改进load/store队列来提供计算机效率。
Load和store队列通常使用内容可寻址的内存为保障内存指令的正确依赖提供一个地址匹配机制。一个load指令发布,store queue CAM会寻找一个与之匹配的地址。当一个store地址产生,load queue CAM会寻找一个先于这个store指令错误猜测发布的相匹配的load指令。load queue也会在每次load发布时被寻找,有时也在外部的无效请求时被查找。由于指令窗口的增加,in-flight的loads和stores数量增加,导致了增长的CAM访问时间。
针对现有问题别人的解决方案面临过于复杂或者无法伸缩(scalability)的问题。
本文不再通过CAM在load queue中寻找,而是提出了一种value-based repaly machanism,在load指令commit前重新载入一遍load的值,若相等则继续,若不相等说明该load和一个之前的store乱序了,违反了内存一致性模型,之前利用了不正确的值的指令都会被squashed。
为了缓解replay带来的花销(增加的缓存带宽和资源侵占),本文评估了几种过滤出需要replay的loads的启发式方法。平均只有0.02提交的指令需要replay。
本文只消除了load queue的RAM而没有消除store queue的RAM,原因在于,1、load指令比store指令占比更多(30%、14%),因此load queue的RAM更复杂。2、store-to-load,从store转发到load是更正常的,而违反RAW是小概率事件,因此store quque的RAM对性能比较关键,不能消除。3、load queue的CAM查找更加频繁(既被load又被store指令以及外部的无效信号查找),需要更多的ports。
总结本文贡献:
1、通过value-based replay消除了load queue的关联查找逻辑;
2、Replay-reduction heuristics: 过滤出了需要replay的load指令(只占很小一部分),对缓存带宽的影响可以忽略。
3、consistency model checking: 定义了检查内存一致性的限制,可以检测一些错误。
(本节中介绍了背景,提高IPC和时钟周期是相违背的,因此把目光瞄向影响性能且难于按比例扩大的load/store queue的CAM,现有的维持内存一致性的方法是每发布一个load/store指令就在CAM中查找是否有与之对应地址的已发布的load/store指令,本文提出了基于value的replay的方法,完全消除了对load queue的CAM,在每次Load提交前reload这个值,如果和之前使用的值相同,就继续,如果不同,就说明可能违反了内存一致性,因此squash这个load及之后的操作。但是replay会带来cache port的增加和资源侵占,因此本文提出了几种过滤器,可以过滤出只占很少比例的需要replay的Load。还提出了一些限制条件来检验内存一致性。)
(2节中描述了原本的关联载入队列的微结构。3节中提出了我们的value-based replay mechanism和过滤器。4节中介绍了实验,之后是我们的机制和原有load queue设计的性能对比。)
2. Associative Load Queue Design
2.1. Functional Requiremen

本文介绍了一种新型的Value-Based Replay机制,旨在优化计算机中的Load/Store队列,通过在Load指令提交前重新加载值,确保数据依赖性和内存一致性,同时大幅减少了对内容可寻址内存(CAM)的需求,降低了能耗并提高了处理效率。
最低0.47元/天 解锁文章
531

被折叠的 条评论
为什么被折叠?



