1 / 10

SimpleScalar 代码结构

SimpleScalar 代码结构. 概述. 功能模拟器 sim-fast , sim-safe 功能仿真 sim-cache,sim-cheetah Cache 仿真 sim-profile,sim-eio 剖析性能 sim-bpred 分支预测 性能模拟器 sim-outorder 时序的乱序执行仿真. SimpleScalar 模拟器软件架构.

ryo
Download Presentation

SimpleScalar 代码结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SimpleScalar代码结构

  2. 概述 • 功能模拟器 sim-fast,sim-safe 功能仿真 sim-cache,sim-cheetahCache仿真 sim-profile,sim-eio 剖析性能 sim-bpred 分支预测 • 性能模拟器 sim-outorder 时序的乱序执行仿真

  3. SimpleScalar模拟器软件架构 Simulator core模块定义并实现了各个模拟器的行为方式,其余各个模块由各个模拟器共享,各个模拟器可根据自己的需要调用各个模块。这意味着如果要设计自己的模拟器,主要工作就是修改Simulator core模块。SimpleScalar提供的是一个建模框架,具有一定灵活性。每个模块具体由.h和.c文件构成。

  4. SimpleScalar 源文件 • 其模块分两类,一类是计算机系统的组成模块,如:Cache、Memory、 regs等;一类是辅助模块:如程序加载模块loader等。 • sysprobe.c - host endian probe implementation

  5. 主程序的源代码 • 拟器主程序主要部分源代码: main(int argc, char **argv, char **envp) {   sim_check_options(sim_odb, argc, argv); //检验命令行参数,并对个模块初始化,sim_*.c定义     mem_init();//程序加载前Memory初始化,mem.c定义 ld_load_prog();//程序加载,loader.c定义 regs_init();//寄存器初始化,regs.c定义 mem_init1();//程序加载后Memory初始化,mem.c定义 sim_init();//模拟器初始化,sim_*.c定义 sim_main()://模拟器执行入口函数,sim_*.c定义 }

  6. Sim-outorder 程序结构 主函数sim_main()的程序结构表示如下: void sim_main(void) { for ( ; ; ) {     ruu_commit();//提交 ruu_writeback();//写回 lsq_refresh();//LSQ队列刷新 ruu_issue();//发射执行 ruu_dispatch();//分配 ruu_fetch();//取指 sim_cycle++;//模拟器周期,统计程序执行周期           } }

  7. Sim-outorder • for 循环执行一次代表流水线执行一个机器周期,每个ruu_*()函数代表流水线的一段, 采取反向执行顺序是为确保流水线各段之间的互锁同步,整个流水线共分为取指(Fetch)、分配(Dispatch)、发射(Issue&Execute )、回写(Writeback)、提交(Commit)五段。 • 乱序模拟器支持动态指令调度、指令乱序执行、指令预测执行、分支预测等现代微处理器的特性,而且还提供了一系列的工具,包括编译器、Benchmark、调试工具、流水线跟踪器等

  8. Sim-outorder流水线框图

  9. SimpleScalar 主要数据结构 • RUU(Register Update Unit): 此结构将传统的保留站和排序缓冲站合并,实现了指令的 乱序执行按序提交,用于支持处理器精确中断和误预测的状态恢复。而RUU将这两个部件 合并可以减少硬件实现的花费。RUU被组织为循环队列,Head指向当前RUU中最先进入RUU 的指令RUU单元,tail指针指向待分配RUU单元。在指令分配阶段,按取指先后顺序为每 条指令分配RUU单元,指令在RUU中连续存放并且排列顺序与取指顺序一致,这使执行完 成的指令能够按序提交。在执行阶段,RUU中的指令是乱序执行的,只要指令的操作数准 备好,就可以将其送入RQ,为其分配执行单元执行指令。在回写段将执行结果广播到RUU ,并解除相关。

  10. LSQ  (Load/Store Queue):用于处理Store/Load指令,其结构与RUU一致,一条Store/Load指令将被分成两个操作:地址计算和存取操作,地址计算操作作为加法运算放入RUU 中,而存取操作放入LSQ中,提交的时候RUU和LSQ需要同步。 • IFQ (Instruction Fetch Queue):用于存放取指(Fetch)段取出的指令队列,它在一 个周期内尽可能多的取出指令,并保存取出指令的一些相关信息,如当前指令地址、预 测下一条指令地址等。 • RQ (Ready Queue):如果指令执行所需所有操作数已准备好,则将指令放入此队列准备执行,它只是作为一种映射机制存在,将RUU中已经准备好的指令串联成一组,它本身并 不保存任何信息,并且每当发射段运行一次后,RQ都被清空,准备在下一次运行分配段 (Dispatch)的时候继续进行赋值。 • EQ(Event Queue):该队列记录已发射(Issue)指令何时执行完毕,回写段以此确定何 时将指令执行结果写回RUU。

More Related