摘要:
SuperscalarSimulator 开源代码链接:https://gitee.com/kelvin07/superscalar-simulator 介绍 超标量处理器模拟器,支持双发射; 整形计算单元和浮点计算单元各一个,以及独立的地址计算单元; 两条CDBs; 同时支持前瞻执行,每周期最多提 阅读全文
摘要:
3.9 指令传送和预测的先进技术 高性能流水线,特别是多发射流水线中仅能够预测分支还不够,需要传送高带宽的指令流(多发射的取值周期变多,预测要等到译码阶段才知道是否为分支),因此需要使用BTB提高指令传送带宽。同时高级的前瞻技术能够进一步增强ILP。 提高取值带宽 分支目标缓冲BTB 预测尚未译码的 阅读全文
摘要:
代码地址:Scoreboarding: 计算机体系结构作业——计分板模拟 (gitee.com) 简介 此代码为高级计算机体系结构作业——计分板模拟器,使用python实现; 模拟的CPU只有四个阶段,分别是发出指令(Issue)、读操作数(Read Operator,RO)、执行计算(Execut 阅读全文
摘要:
3.8 使用动态调度、多发射和前瞻利用ILP 我们希望将动态调度、多发射和前瞻结合起来,以Tomasulo算法为基础,构建前瞻执行动态调度的多发射处理器。 在动态调度的处理器中,无论是否前瞻,都需要更新控制表,否则会丢失相关性。要实现动态调度的处理器,关键就在于保留站的分配与流水线控制表的更新,有两 阅读全文
摘要:
3.7 多发射和静态调度 之前所描述的方法虽然可以尽量降低CPI,但是最低为1,如果要为了进一步提高性能,希望将CPI降低到小于1,这就必须要一个时钟周期发射多条指令,即多发射处理器,主要有以下三种方式: 静态调度超标量处理器 VLIW处理器 动态调度的超标量处理器 超标量处理器和VLIW处理器实现 阅读全文
摘要:
3.6 基于硬件的前瞻执行 Tomasulo算法通过寄存器重命名、设置预留站和使用公共数据总线等方式,优化指令的并行执行,能够处理数据依赖,但在处理控制依赖时存在局限。如果存在分支带来的控制依赖,Tomasulo算法需要等待分支指令的执行结果,(或者不等待,但可能导致中断的不精确,乱序执行本身就会导 阅读全文
摘要:
3.5 动态调度的例子与算法 Tomasulo算法优势 分布式危险检测逻辑。分布式保留站和CDB实现,如果多个指令正在等待单个结果,并且每个指令已经有了它的其他操作数,那么可以通过在CDB上广播结果来同时释放这些指令。如果使用集中式寄存器文件,当寄存器总线可用时,这些单元必须从寄存器中读取它们的结果 阅读全文
摘要:
3.4 利用动态调度克服数据危险 本节将探讨动态调度,硬件重新安排指令执行以减少停顿,同时保持数据流和异常行为。基于硬件的动态调度有几个优点。 它允许汇编代码在不同流水线上运行,避免二进制文件对不同微体系结构重新编译的需要。 可以处理编译时依赖项未知的情况。 允许处理器容忍不可预测的延迟,比如缓存丢 阅读全文
摘要:
3.3 利用先进的分支预测降低分支开销 前置知识:分支预测缓冲Brach-Prediction Buffer(BPB,最简单的动态分支预测) 1bit准确率不够,4K-entry 2-bits BPB准确率能够达到80%以上,且与无限entry的准确率相当。 BPB的典型实现为cache,在IF阶段 阅读全文
摘要:
3.2 实现ILP的基本编译技巧 指令调度和循环展开 为了尽可能避免流水线的停滞,可以寻找指令间的依赖关系并重叠不相关指令序列。 循环展开可以减少分支指令次数,使用不同的寄存器来避免不必要的约束,更多的指令也可以更方便进行指令调度。但是需要调整循环终止和迭代代码。 所有这些转换背后的关键需求是理解一 阅读全文