cod-hw2

cod-hw2

郭高旭 ggx21@mails.tsinghua.edu.cn 2021010803

  1. C

  2. A

  3. 是的,在相同的cpu频率下,CPI 越低,每条指令的平均执行时间就越短,吞吐量较高,cpu响应速度也越快,整体执行效率越高。但是,单纯追求低 CPI 并不总是最终目标,因为在一些情况下,需要权衡执行效率、能效、成本以及时钟频率等因素。

  4. 不一定,如果后面的指令需要数据但此时数据还没有产生,那么数据旁路也不能解决这种数据冲突。比如load类指令在mem段将数据存入寄存器,如果下一条指令id段要读取这个寄存器,那么数据旁路不能解决。

  5. 支持。 对于RISC-V架构而言,进入异常之后,mstatus寄存器中的MIE域将会被硬件自动更新成0(意味着中断全局被关闭,从而无法响应新的中断

    1. FEC7 96E3
    2. 当前pc的前4096到后4094(偶数,如果要求合法,则应该对齐为四的倍数)
    3. image-20231126233637425
    4. 89
    5. 如果使用数据旁路,12 lw 和 14.中的a3否则会发生数据冲突的行号有(1.,2.)(11.,12.,14.)(14.,15.)(16.17)
    • DM@MEM/WB->DM

    • 交换最后两行

    • a) IF: nop
      ID: sw t1, (a0)
      EXE: bne t3, x0, count
      MEM: add t1, t1, t0
      WB: add t3, t3, -1

    • DM@MEM/WB->DM

    • 方案一不满足精确异常的定义。精确异常要求在产生异常时,不会对指令流水线中的指令状态造成任何影响,即异常应该在异常指令执行之前进行处理。而方案一中,异常信号被存入ID/EXE流水寄存器,会在下一个周期由EXE段的异常处理模块处理,这就导致了异常信号的处理不是在异常指令执行之前完成的。

    • RV.X   // 引发异常的指令
      ADDI a0,1    // 普通指令
      SUBI a0,1    // 普通指令
      
    • 这里第一条指令 RV.X 是会引发异常的指令。在方案一中,异常信号会被存入ID/EXE流水寄存器,并在下一个周期被EXE段的异常处理模块处理。但问题在于,由于流水线中已经有了 ADD 和 SUB 两条指令,它们在当前周期内会继续执行。




本文总阅读量