计算机体系结构:实验3_ MIPS流水线实验报告

1. winMIPS64模拟器

熟悉winMIPS64模拟器,并确定指令格式中各个域的具体值。包括如下内容:
① 将附件中的winmips64.zip文件解压到你的电脑中。
② 阅读附件中的winmipstut-6-3.3.docx文件,并按其中的步骤操作、学习winMIPS64模拟器。


按照教程中的样例一步步进行。下边是剪影
在这里插入图片描述

图 1 1 模拟器学习

2. 了解指令在MIPS流水线中的运行过程

了解RISC-V的在线模拟器Venus的使用方法。包括如下内容:

  • 通过阅读理解程序incre.s,指出该程序在运行时可能会出现哪些数据相关和控制相关。
  • 将incre.s读入到模拟器中,关闭直送(forwarding),单步运行程序,考察一个循环内程序的各个指令在各个周期的运行情况。对最下面的状态栏上指示的RAW和Branch taken冒险,解释其产生的原因。

2.1. 可能出现的数据相关和控制相关

数据相关:RAW
RAW如
daddi r2, r0, number
daddi r3, r2, 24

lw r1, 0(r2)
daddi r1, r1, 1

控制相关:Branch taken
dsub r4, r3, r2
bnez r4, loop

2.2. RAW Branch taken的分析

在这里插入图片描述

图表 2 1 程序运行截图

  daddi  r2, r0, number
  daddi  r3, r2, 24

loop: lw r1, 0(r2)
daddi r1, r1, 1
sw r1, 0(r2)
daddi r2, r2, 4
dsub r4, r3, r2
bnez r4, loop

第一、二句 RAW R2。
三四句,R1 RAW
四五句,R1 RAW 。SW读R1,daddi 写R1。
六七句,R2 RAW。
最后两句,R4 branch taken,bnez需要读R4。

在这里插入图片描述

图表 2 2 一轮的incre.s执行结果

3. Forwarding对流水线的影响

考察直送(forwarding)技术对流水线性能的影响
① 在打开直送(forwarding)功能的情况下,单步运行incre.s并考察一个循环内程序的各个指令在各个周期的运行情况,解释直送是如何解决了很多冒险情况的。
② 指出哪些仍未消失的冒险为什么直送也无法解决。


在这里插入图片描述
图表 3 1 打开直送时的情况

直送的解决办法:
通过在exe阶段后由流水线寄存器直送到所需要的ALU的输入端,可以解决两个计算指令的RAW的问题。

不能解决的问题:
Lw 后的alu不能消除。Lw要到DM后才能得到操作数,而后边紧接着的ALU算数指令,要在exe之前得到操作数,这样就会发生RAW。
还有ALU算数指令之后的branch指令是不能解决的。转移中采用的是预测不成功,这样如果,转移成功,需要阻塞一个周期,重新恢复现场。并且这里情况很特殊,根据模拟器来说,应该是RAW stall和branch taken stall都有。Exe和ID是同一周期的ID没法得到R4的值,所以只能阻塞;同时转移成功的stall也有,两个合并了。

4. 通过调度减少冒险

① 考察incre.s, 看看能否在不改变程序运行结果的情况下,通过改变指令的执行顺序来进一步减少冒险产生的stall。要求:可以修改指令的操作数,但不能增加或减少指令。
② 解释你的做法为什么能减少冒险。


可以这样修改:
原程序:
daddi r2, r0, number
daddi r3, r2, 24
loop: lw r1, 0(r2)
daddi r1, r1, 1

sw r1, 0(r2)
daddi r2, r2, 4
dsub r4, r3, r2
bnez r4, loop

修改为
daddi r2, r0, number
daddi r3, r2, 24
loop: lw r1, 0(r2)
daddi r2, r2, 4
dsub r4, r3, r2

  daddi  r1, r1, 1
  sw  r1, **-4(r2)**
  bnez  r4, loop  

原理解释:
原程序前4条指令的相对顺序是不能修改的,他们彼此之间是有关联关系的。这样我们可以把R2的计算的自增计算放前面,R4的也提前,这样可以减少LW后的RAW和BNEZ的后RAW。同时,由于R2的变化,我们在SW时要把偏移量改为-4。
在这里插入图片描述

图表 4 1 调度之后的结果
这样,就只有一次由于转移预测错误的STALL,RAW的完全解决了。

5. 实验总结

对以上的三个步骤,分别考察统计信息(显示在winMIPS64的statistics窗口中)。通过列表的方式对本次实验做一个总结。

fowarding调度CycleinstructionCPIRAW stallbranch taken stall
11951.801
101161.83321
001972.714101

表格 1 三种情况比较
Forwarding和调度1代表有,0代表无。

通过实验的汇总表格,我们可以知道,forwarding技术,在流水线中可以有效减少RAW Stall的现象,但是对由于转移造成的Stall和LW后算数指令的stall无能为力,这个时候,我们就可以采用调度的方法进行控制,进一步减少stall的数量。同时,使用forwarding和调度可以极大的减少CPI,也就是我们减少Stall数的效果。

通过这次实验,我对流水线的运行方式和stall的产生与处理有了更深的理解,更感受到了计算机科学家的思维魅力。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值