体系结构windlx流水线实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一基本实验----by 王琳PB07210432
1. 实验目的:
1)熟悉计算机流水线基本概念
2)了解DLX基本流水线的各段的功能
3)了解各种不同指令在流水线中的实际流动情况
4)对流水线做性能分析
5)了解影响流水线效率的因素——数据相关、结构相关、控制相关,了解相关的种类
6)了解解决数据相关的方法
2. 实验平台:WinDLX仿真器
WinDLX简介:
●是一个图形化、交互式的DLX流水线仿真器。
●可以装入DLX汇编语言程序,然后单步,设断点或是连续执行该程序.
●CPU的寄存器,流水线,I/O和存储器都可以用图形表示出来
●提供了对流水线操作的统计功能.
●可以装载文件名为*.s的文件.
●要求的硬件平台是IBM-PC兼容机.
●WinDLX是一个Windows应用程序,运行DOS3.3以上和Windows3.0以上的操作系统.
●WinDLX软件包中带有说明文件及教程,可以供使用者进一步了解仿真器的使用方法和
DLX处理器的原理.大家再进行实验前应该仔细阅读这些文档.
3. 实验内容:
1)在仿真器上分别运行单条指令:Load指令、Store指令、分支指令、寄存器ALU指令、立即数ALU指令,记录它们在流水线中的执行情况
●Lw:
观察此流水线时空图,可以发现:转移指令引起的延迟仅为1 clocks,另2 stalls 是trap指令引起的,这个执行结果似与不采用forwarding技术的前提相违,只能理解为对于无条件的转移指令,新的PC值在EX阶段即已被写入。
●Sw:
●Beqz:
由此图可见,对于分支指令,总是用
not-taken的策略来处理,并且也认为新的
PC值也在EX阶段即已被写入,且cond
条件也在EX段被算出(这显然是一个极
不合理的假设,究竟为何分支指令的延迟
为1 stall有待进一步探究)
●寄存器ALU指令
●立即数ALU指令
2)仿真器运行一段无相关的程序,记录它的执行情况,计算流水线的加速比、吞吐率与效率。下面是一段不相关的程序,一共6条指令
ADDI R5, R5, 1
SUBI R4, R4, 1
AND R3, R3, R3
XOR R7, R7, R7
ADDI R8, R8, 1
ADDI R9, R9, 1
在WinDLX中执行的结果如下:
如上图所示:
●6条指令一共执行了10个周期,而每个指令都需要5个周期来完成。故可得加速比:
5*6/10=3
●实际吞吐率:流水线由5段组成,完成6条指令,m=5,n=6,T=5△t+(6-1) △t=10△t,
Tp=n/T=3/(5△t),即为实际吞吐率。
●效率:E=1/(1+(m-1)/n)=TP*△t=3/5
3)在仿真器运行一段程序:
在用仿真器模拟前先自己手动分析出程序执行时的
相关种类与个数:
1.addi-addi关于r2的raw相关:2 stalls
2.lw-addi关于r1的raw相关:2 stalls
3.addi-sw关于r1的raw相关:2 stalls
4.addi-sub关于r2的raw相关:2 stalls
5.sub-bnez关于r4的raw相关:2 stalls
6.bnez的控制相关(always not-take):
1 stalls(not hit)/0 stall(hit)
7.j的控制相关:1 stalls
8.trap:2 stalls
在DLX上的实际运行结果:
统计该程序在流水线中出现的各种相关个数,及其引起的流水线暂停周期数:
可见,此执行结果与之前手动分析的结果完全相同
4)通过在流水线中设置定向路径来消除数据相关后,仅lw-addi一处会产生关于r1的raw相关,延迟为1 stall,转移指令的延迟情况不变:
一个循环的执行时间:6+1+1=8(clocks)
总执行时间:(2)+(8*2-1)+(1+1)+(1+2)=22(clocks)
总RA W相关的stall数:1*2=2(clocks)
运行程序:
有出入的原因是windlx认为
除了在lw-addi处有1 stall的
raw相关,sub-bnez处也会有
1 stall的raw相关(真搞不懂,
难道分支指令在IF阶段开始
读取寄存器的值了!?),按
照这种想法重新计算的结果
是:
一个循环的执行时间:6+1*2+1=9(clocks)
总执行时间:2+(9*2-1)+(1+1)+(1+2)=24(clocks)
总RA W相关的stall数:2*2=4(clocks)
统计在流水线中出现的相关个数,及其引起的流水线暂停周期数:
5)通过对程序进行编译优化并结合其他相关解决方法——分支预测与延迟槽:
由于windlx默认采取了always not-taken的分支预测策略,且不支持延迟槽的概念,所以唯一可做的调度就是通过分离lw-addi和sub-bnez指令来消除raw相关,调度后的程序如下图所示:
一个循环的执行时间:6+1=7(clocks)
总执行时间:2+(7*2-1)+(1+1)+(1+2)=20(clocks)
总RA W相关的stall数:0(clocks)