体系结构windlx流水线实验报告
计算机系统结构实验报告.doc

计算机系统结构实验报告一.流水线中的相关实验目的:1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。
实验平台:WinDLX模拟器实验内容和步骤:1.用WinDLX模拟器执行下列三个程序:求阶乘程序fact.s求最大公倍数程序gcm.s求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
1. 求阶乘程序用WinDLX模拟器执行求阶乘程序fact.s。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
实验结果:在载入fact.s和input.s之后,不设置任何断点运行。
体系结构windlx流水线实验报告

实验一基本实验----by 王琳PB072104321. 实验目的: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)仿真器运行一段无相关的程序,记录它的执行情况,计算流水线的加速比、吞吐率与效率。
系统结构-流水线工作分析报告

系统结构-流水线工作分析报告第一篇:系统结构-流水线工作分析报告《计算机系统结构课内实验》实验报告一、实验目的及要求1、加深对计算机流水线基本概念的理解;2、理解MIPS结构如何用5段流水线来实现,理解各段的功能和基本操作;3、加深对数据冲突、结构冲突的理解,理解这两类冲突对CPU 性能的影响。
4、进一步理解解决数据冲突的方法,掌握如何应用定向技术来减少数据冲突引起的停顿。
加深对计算机流水线基本概念的理解;二、实验环境采用指令级和流水线操作级模拟器WinDLX;三、实验内容1、用WinDLX模拟器进行结构相关的分析①生成汇编程序structure_d.s。
用WinDLX模拟器运行该程序。
②通过模拟,找出存在结构相关的指令对,以及导致结构相关的部件。
③记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
2、用WinDLX模拟器进行数据相关分析①添加data.s程序。
②通过Configuration菜单中的选项,设定在不采用定向技术的情况下,用WinDLX模拟器运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
③在采用定向技术的情况下,用WinDLX模拟器再次运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
3、用WinDLX模拟器分析指令调度①生成schedule-before.s及schedule-after.s程序。
②通过Configuration菜单中的选项,将除法单元数设置为3,将加法﹑乘法﹑除法的延迟设置为3个时钟周期。
③用WinDLX模拟器运行调度前的程序schedule-before.s。
记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。
④用WinDLX模拟器运行调度后的程序schedule-after.s,记录程序执行过程中各种相关发生的次数以及程序执行的总时钟周期数。
流水线实验报告

流水线实验报告一、实验目的本次实验旨在探究流水线技术在计算机体系结构中的应用,并了解流水线的工作原理与效果。
通过对流水线的实验,掌握流水线操作的过程和相关概念,并通过实践了解其对计算机性能的提升作用。
二、实验器材与软件环境实验使用的器材为一台配有Intel Core i7处理器的计算机。
软件环境为Windows 10操作系统,使用C语言编译器进行代码编写和实验运行。
三、实验内容1. 流水线概述流水线是一种用于提高计算机处理器效率的技术。
它将任务划分为多个阶段,使得每个阶段都能并行地处理不同的任务。
通过将多个任务拆分并在不同的阶段同时进行,可以显著提高计算机处理速度。
2. 流水线原理流水线工作原理如下:1) 将任务划分为多个子任务,并在不同的阶段上并行执行。
2) 每个阶段的任务之间通过专门的寄存器传递数据。
3) 每个阶段的任务完成后,将结果写入寄存器,供下一个阶段使用。
4) 流水线的效果取决于各个阶段的任务执行时间,如果存在某个阶段的任务耗时较长,则可能导致整个流水线效率下降。
3. 流水线的实现实验中我们使用C语言编写一段简单的代码来模拟流水线的实现过程。
我们通过将输入的整数加1后输出,来模拟流水线的工作状态。
cinclude <stdio.h>int main() {int input[5] = {1, 2, 3, 4, 5};int output[5];int i;for (i = 0; i < 5; i++) {output[i] = input[i] + 1;}for (i = 0; i < 5; i++) {printf("%d\n", output[i]);}return 0;}上述代码将输入数组中的每个元素加1后,输出到屏幕上。
在这个过程中,我们可以将输入和输出视为流水线中的阶段,每个阶段都有固定的任务。
4. 实验结果与分析在实验中,我们输入数组为{1, 2, 3, 4, 5},运行结果如下:23456可以看到,实验结果符合我们的预期,每个输入元素都成功地加1后输出。
北邮大三下 计算机系统结构实验报告 实验一到五 WINDLX模拟器

北京邮电大学实验报告课程名称计算机系统结构计算机学院 2011211311班薛玥(2011211432)目录实验一 WINDLX模拟器安装及使用 (3).实验准备 (3).实验环境 (4).实验步骤 (5).实验内容及要求 (5).实验过程 (5).实验总结 (11)实验二指令流水线相关性分析 (12).实验目的 (12).实验环境 (12).实验步骤 (12).实验过程 (12).实验总结 (19)实验三DLX处理器程序设计 (20).实验目的 (20).实验环境 (20).实验步骤 (20).实验过程 (20)A.向量加法代码及性能分析 (20)B.双精度浮点加法求和代码及结果分析 (26).实验总结 (31)实验四代码优化 (32).实验目的 (32).实验环境 (32).实验原理 (32).实验步骤 (32).实验过程 (32).实验总结+实习体会 (37)实验五循环展开 (38).实验目的 (38).实验环境 (38).实验原理 (38).实验步骤 (38).实验过程 (38)矩阵乘程序代码清单及注释说明 (38)相关性分析结果 (43)增加浮点运算部件对性能的影响 (43)增加forward部件对性能的影响 (43)转移指令在转移成功和转移不成功时候的流水线开销 (43).实验总结+实习体会+课程建议 (43)实验一 WINDLX模拟器安装及使用·实验准备1.了解DLX的基本结构和原理DLX是一种典型的Load/Store型指令集结构。
它具有一套简单的Load/Store 指令集;它注重指令流水效率;它简化指令的译码;它高效支持编译器。
2.了解DLX中的寄存器DLX中有32个通用寄存器(GPRs),分别将其命名为R0,R1...R31。
每个通用寄存器长度为32位。
另外,DLX中有32个浮点寄存器(FPRs),分别将其命名为F0,F1 (31)3.了解DLX数据类型DLX提供了多种长度的整型数据和浮点数据。
计算机系统结构实验三.

计算机系统结构实验实验三:DLX 流水线运行分析一、实验目的通过本实验,熟悉 WinDLX 模拟器的操作和使用,了解 DLX 指令集结构及其特点。
二、实验内容(1) 用 WinDLX 模拟器执行求阶乘程序 fact.s 。
执行步骤详见“WinDLX教程”。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了 input.s 中的输入子程序,这个子程序用于读入正整数。
(2)输入数据“3”采用单步执行方法,完成程序并通过上述使用 WinDLX,总结 WinDLX的特点。
(3)注意观察变量说明语句所建立的数据区,理解 WinDLX 指令系统。
三、实验步骤1.双击 Code 图标,从左到右依次为代表存储器内容的三栏信息:地址 (符号或数字)、命令的十六进制机器代码和汇编命令。
点击主窗口中的 Execution 开始模拟。
按 F7 键开始执行。
这时,窗口中带有地址“$TEXT”的第一行变成黄色。
按下 F7 键,模拟就向前执行一步,第一行的颜色变成橘黄色,下一行变成黄色。
这些不同颜色指明命令处于流水线的哪一段。
命令“jalInputUnsigned”在 IF 段,“addi r1, r0, 0x1000”在第二段ID。
其他方框中带有一个“X”标志,表明没有处理有效信息。
2.再次按下 F7 键,代码窗口中的颜色会再改变,红色表明命令处入第三段“intEX”。
再按下 F7,在代码窗口中,黄色出现在更下面的位置,并且是唯一彩色行。
打开 Clock Cycle Diagram 窗口。
它显示流水线的时空图。
第一条命令正在 MEM 段,第二条命令在 intEX 段,第四条命令在 IF 段。
而第三条命令指示为“aborted”。
其原因是:第二条命令(jal)是无条件分支指令,但只有在第三个时钟周期, jal 指令被译码后才知道,这时,下一条命令 movi2fp 已经取出,但需执行的下一条命令在另一个地址处,因而,movi2fp 的执行应被取消,在流水线中留下气泡。
计算机系统结构实验报告

计算机系统结构实验报告一.流水线中的相关实验目的:1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停。
实验平台:WinDLX模拟器实验内容和步骤:1.用WinDLX模拟器执行下列三个程序:求阶乘程序fact.s求最大公倍数程序gcm.s求素数程序prim.s分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
2. 用WinDLX运行程序structure_d.s,通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
3. 在不采用定向技术的情况下(去掉Configuration菜单中Enable Forwarding选项前的勾选符),用WinDLX运行程序data_d.s。
记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
在采用定向技术的情况下(勾选Enable Forwarding),用WinDLX再次运行程序data_d.s。
重复上述3中的工作,并计算采用定向技术后性能提高的倍数。
1. 求阶乘程序用WinDLX模拟器执行求阶乘程序fact.s。
这个程序说明浮点指令的使用。
该程序从标准输入读入一个整数,求其阶乘,然后将结果输出。
该程序中调用了input.s中的输入子程序,这个子程序用于读入正整数。
实验结果:在载入fact.s和input.s之后,不设置任何断点运行。
计算机体系结构实验报告

计算机体系结构实验报告实验⼆结构相关⼀、实验⽬的:通过本实验,加深对结构相关的理解,了解结构相关对CPU性能的影响。
⼆、实验内容:1. ⽤WinDLX模拟器运⾏程序structure_d.s 。
2. 通过模拟,找出存在结构相关的指令对以及导致结构相关的部件。
3. 记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执⾏周期数的百分⽐。
4. 论述结构相关对CPU性能的影响,讨论解决结构相关的⽅法。
三、实验程序structure_d.sLHI R2, (A>>16)&0xFFFF 数据相关ADDUI R2, R2, A&0xFFFFLHI R3, (B>>16)&0xFFFFADDUI R3, R3, B&0xFFFFADDU R4, R0, R3loop:LD F0, 0(R2)LD F4, 0(R3)ADDD F0, F0, F4 ;浮点运算,两个周期,结构相关ADDD F2, F0, F2 ; <- A stall is found (an example of how to answeryour questions)ADDI R2, R2, #8ADDI R3, R3, #8SUB R5, R4, R2BNEZ R5, loop ;条件跳转TRAP #0 ;; Exit <- this is a comment !!A: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10B: .double 1, 2, 3, 4, 5, 6, 7, 8, 9, 10四、实验过程打开软件,load structure_d.s⽂件,进⾏单步运⾏。
经过分析,此程序⼀次循环中共有五次结构相关。
(R-stall 数据相关Stall- 结构相关)1)第⼀个结构相关:addd f2,,f0,f2由于前⾯的数据相关,导致上⼀条指令addd f0,f0,f4暂停在ID阶段,所以下⼀条指令addd f2,,f0,f2发⽣结构相关,导致相关的部件:译码部件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一基本实验----by 王琳PB072104321. 实验目的: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, 1SUBI R4, R4, 1AND R3, R3, R3XOR R7, R7, R7ADDI R8, R8, 1ADDI 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/53)在仿真器运行一段程序:在用仿真器模拟前先自己手动分析出程序执行时的相关种类与个数:1.addi-addi关于r2的raw相关:2 stalls2.lw-addi关于r1的raw相关:2 stalls3.addi-sw关于r1的raw相关:2 stalls4.addi-sub关于r2的raw相关:2 stalls5.sub-bnez关于r4的raw相关:2 stalls6.bnez的控制相关(always not-take):1 stalls(not hit)/0 stall(hit)7.j的控制相关:1 stalls8.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)运行程序:统计在流水线中出现的相关个数,及其引起的流水线暂停周期数4.实验步骤:1) 运行WinDLX仿真器.2) 根据实验内容的要求设计出相应的DLX程序.3) 完成所有的实验内容.5. 实验时间:4课时6. 实验要求:1) 必做实验。
2) 自己设计出体现实验要求的程序。
比如在进行统计相关种类与个数的步骤中所用到的程序怎么尽可能包含所有种类的相关,建议3) 要求学生实际在仿真器运行程序并统计结果, 课后形成图表上交实验报告。
4) 通过实验分析相关对流水线的性能影响,实际掌握各种相关解决策略,比较采用各种策略前后流水线的性能,形成图表上交实验报告。
7. 参考材料:计算机体系结构教材、WinDLX仿真器使用指南8. 附录编写代码的要求:1)需要编写代码文件*.s。
所有程序均用DLX汇编语言编写.2)文件格式请参照WinDLX自带的例子程序.常见问题:1.Load指令后都是nop ?注意选择了文件后要Select,或双击,下方Select Files显示了相应的文件名才是已经选择了文件。
选择之后需再Load.正确的Load会显示:File(s) Loaded Successfully, Reset DLX?此时在Window->Code窗口里应该能看到你的代码。
2.Load时会出现“Code or Data Error”?这是因为你的汇编代码有错。
DLX汇编的格式请参考帮助文件之The DLX-Assembly Language && DLX Instructions Set && DLX-Examples。
如果是Load 自带的GCM和FACT 的例子,请先务必Load Input.s。
(WinDLX可以一次load 多个.s文件).3.如何初始化内存呢?Memory->Change 里面可以察看/设置内存的值,指定Address和V alue后Set即可。
Memory->Display 可以显示内存的值。
4.程序运行时会报错“Mem Error”可能是因为你程序中用到的访存地址没有对齐导致,Memory是按字对齐的,访问地址必须是4的倍数。
也可能是地址超过了存储器得地址范围。
默认的存储器大小是0x8000 Bytes,可以通过Configuration->Memory Size 来设置大小。
.5.如何载入立即值?可以通过LHI指令和其他指令的组合,或者用ADDI指令来实现。
注意LW是访存指令,并非载入立即值指令。
具体指令请参考DLX Instruction Set。
6.指令用到了立即数需不需要用“#“用不用不会影响,具体请参考The DLX-Assembly Language && DLX-Examples.7.例子里的.data, .global等是干什么用的?这些是编译制导语句,具体含义请参考The DLX-Assembly Language ->Directives.●.space size Move the current storage pointer forward size bytes (to leave some emptyspace in memory)●.data [address] Cause the following code and data to be stored in the data area. If anaddress was supplied, the data will be loaded starting at that address, otherwise, the last value for the data pointer will be used. If we were just reading data based on the text (code) pointer, store that address so that we can continue from there later (on a .text directive).●.text [address] Cause the following code and data to be stored in the text (code) area. Ifan address was supplied, the data will be loaded starting at that address, otherwise, the last value for the text pointer will be used. If we were just reading data based on the data pointer, store that address so that we can continue from there later (on a .data directive).●.global label Make the label available for reference by code found in files loaded afterthis file.8.WinDLX能指定定向路径吗?如何指定?WinDLX可以启用和禁止Forwarding。
Configuration->Enable Forwarding.定向路径可以显示出来,选中Clock Cycle Diag->Display Forwading9.如何设置程序代码和数据段在内存中起始位置?有没有类似i386汇编的ORG语句?WinDLX没有ORG指令,但可以通过Symbol来指定代码和数据段的起始位置。