资源描述:
《体系结构windlx流水线实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一基本实验----by王琳PB1.实验目的:1)熟悉计算机流水线基本概念2)了解DLX基本流水线的各段的功能3)了解各种不同指令在流水线中的实际流动情况4)对流水线做性能分析5)了解影响流水线效率的因素——数据相关、结构相关、控制相关,了解相关的种类6)了解解决数据相关的方法2.实验平台:WinDLX仿真器WinDLX简介:l是一个图形化、交互式的DLX流水线仿真器。l可以装入DLX汇编语言程序,然后单步,设断点或是连续执行该程序.lCPU的寄存器,流水线,I/O和存储器都可以用图形表示出来l提供了对流水线操作的统计功能.l可以装载文件名为*.s的文件.l要求
2、的硬件平台是IBM-PC兼容机.lWinDLX是一个Windows应用程序,运行DOS3.3以上和Windows3.0以上的操作系统.lWinDLX软件包中带有说明文件及教程,可以供使用者进一步了解仿真器的使用方法和DLX处理器的原理.大家再进行实验前应该仔细阅读这些文档.3.实验内容:1)在仿真器上分别运行单条指令:Load指令、Store指令、分支指令、寄存器ALU指令、立即数ALU指令,记录它们在流水线中的执行情况lLw:观察此流水线时空图,可以发现:转移指令引起的延迟仅为1clocks,另2stalls是trap指令引起的,这个执行结果似与不采用forwa
3、rding技术的前提相违,只能理解为对于无条件的转移指令,新的PC值在EX阶段即已被写入。lSw:lBeqz:由此图可见,对于分支指令,总是用not-taken的策略来处理,并且也认为新的PC值也在EX阶段即已被写入,且cond条件也在EX段被算出(这显然是一个极不合理的假设,究竟为何分支指令的延迟为1stall有待进一步探究)l寄存器ALU指令l立即数ALU指令2)仿真器运行一段无相关的程序,记录它的执行情况,计算流水线的加速比、吞吐率与效率。下面是一段不相关的程序,一共6条指令ADDIR5,R5,1SUBIR4,R4,1ANDR3,R3,R3XORR7,R7,
4、R7ADDIR8,R8,1ADDIR9,R9,1在WinDLX中执行的结果如下:如上图所示:l6条指令一共执行了10个周期,而每个指令都需要5个周期来完成。故可得加速比:5*6/10=3l实际吞吐率:流水线由5段组成,完成6条指令,m=5,n=6,T=5△t+(6-1)△t=10△t,Tp=n/T=3/(5△t),即为实际吞吐率。l效率:E=1/(1+(m-1)/n)=TP*△t=3/53)在仿真器运行一段程序:在用仿真器模拟前先自己手动分析出程序执行时的相关种类与个数:1.addi-addi关于r2的raw相关:2stalls2.lw-addi关于r1的raw相
5、关:2stalls3.addi-sw关于r1的raw相关:2stalls4.addi-sub关于r2的raw相关:2stalls5.sub-bnez关于r4的raw相关:2stalls6.bnez的控制相关(alwaysnot-take):1stalls(nothit)/0stall(hit)7.j的控制相关:1stalls8.trap:2stalls在DLX上的实际运行结果:统计该程序在流水线中出现的各种相关个数,及其引起的流水线暂停周期数:可见,此执行结果与之前手动分析的结果完全相同4)通过在流水线中设置定向路径来消除数据相关后,仅lw-addi一处会产生关于
6、r1的raw相关,延迟为1stall,转移指令的延迟情况不变:一个循环的执行时间:6+1+1=8(clocks)总执行时间:(2)+(8*2-1)+(1+1)+(1+2)=22(clocks)总RAW相关的stall数:1*2=2(clocks)运行程序:有出入的原因是windlx认为除了在lw-addi处有1stall的raw相关,sub-bnez处也会有1stall的raw相关(真搞不懂,难道分支指令在IF阶段开始读取寄存器的值了!?),按照这种想法重新计算的结果是:一个循环的执行时间:6+1*2+1=9(clocks)总执行时间:2+(9*2-1)+(1+1
7、)+(1+2)=24(clocks)总RAW相关的stall数:2*2=4(clocks)统计在流水线中出现的相关个数,及其引起的流水线暂停周期数:5)通过对程序进行编译优化并结合其他相关解决方法——分支预测与延迟槽:由于windlx默认采取了alwaysnot-taken的分支预测策略,且不支持延迟槽的概念,所以唯一可做的调度就是通过分离lw-addi和sub-bnez指令来消除raw相关,调度后的程序如下图所示:一个循环的执行时间:6+1=7(clocks)总执行时间:2+(7*2-1)+(1+1)+(1+2)=20(clocks)总RAW相关的stall数:
8、0(clo