收藏 分享(赏)

北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器.doc

上传人:精品资料 文档编号:10161108 上传时间:2019-10-15 格式:DOC 页数:38 大小:825.94KB
下载 相关 举报
北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器.doc_第1页
第1页 / 共38页
北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器.doc_第2页
第2页 / 共38页
北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器.doc_第3页
第3页 / 共38页
北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器.doc_第4页
第4页 / 共38页
北邮计算机系统结构实验报告-实验一到五-WINDLX模拟器.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、北京邮电大学实验报告课程名称 计算机系统结构计算机学院 2016111303 班王陈(2016110711)2目录实验一 WINDLX 模拟器安装及使用 .3实验准备 .错误!未定义书签。实验环境 .错误!未定义书签。实验步骤 .错误!未定义书签。实验内容及要求 .错误!未定义书签。实验过程 .错误!未定义书签。实验总结 .8实验二 指令流水线相关性分析 9实验目的 .9实验环境 .9实验步骤 .9实验过程 .错误!未定义书签。实验总结 .16实验三 DLX 处理器程序设计 .17实验目的 .17实验环境 .错误!未定义书签。实验步骤 .错误!未定义书签。实验过程 .17A.向量加法代码及性能

2、分析 17B.双精度浮点加法求和代码及结果分析 22实验总结 .27实验四 代码优化 28实验目的 .28实验环境 .错误!未定义书签。实验原理 .28实验步骤 .错误!未定义书签。实验过程 .28实验总结+实习体会 .33实验五 循环展开 34实验目的 .34实验环境 .错误!未定义书签。实验原理 .34实验步骤 .错误!未定义书签。实验过程 .34矩阵乘程序代码清单及注释说明 34相关性分析结果 39增加浮点运算部件对性能的影响 39增加 forward 部件对性能的影响 39转移指令在转移成功和转移不成功时候的流水线开销 39实验总结+实习体会+课程建议 .393实验一 WINDLX 模

3、拟器安装及使用WinDLX 模拟器的结构和功能说明1.点击运行之后,会看到一个如下图所示的窗口。它包括 Register, Code, Pipeline, Clock Cycle Diagram, Statistics, Breakpoints。接下来详细介模拟器的结构及各个部件的功能。2.Register 窗口介绍Rigister 窗口中显示的是各个寄存器的名称及内容。如下图:可以看到寄存器中以十六进制标识,从上图可以看出各个寄存器中的内容。2.Code 窗口介绍在没有进行任何执行的时候,初次打开 code 窗口,即为下图所示4窗口现实的信息是各个存储器内同。第一列标识存储器的地址;第二列是

4、机器代码,用 16 进制表示;第三列是汇编指令。当我们点击上方的 ,可以选择单步或多步执行(也可以使用快捷键F7 或 F8) 。若选择单步执行,每按一次 F7,指令执行一次,可以看到,一次执行的为 IF-ID-intEX-MEM-WB,没执行一次还有颜色的变化。颜色是用来标识指令处于哪个流水段的,如下图。当然,我们也可以使用多步执行,按快捷键 F8,选择 5 步流水,即可。3.Pipeline 窗口介绍通过阅读 WinDLX 模拟器说明书可以知道,Pipeline 窗口显示的是 DLX 处理器的内部结构。窗口用下图标识 DLX 五段流水。当然,如同 Code 窗口介绍讲述的那样,不同的颜色显示

5、了指令处于哪段流水线。使用快捷键 F7 单步执行,可以明显的看出,不同时候流水段执行的不同指令。如下图。5图片反映的正式与 Code 中所处的时刻相同的指令流水。可以清晰看到不同流水段执行的是哪条指令。4.Clock Cycle Diagram 窗口实验准备中我们已经知道,该窗口显示的是流水线的时空图。时空图反映的是不同时隙内的运行情况。如下图。在我看来,时空图是最好理解的。因为它反映的就是流水段的并行程度。在这个 DLX 模拟器中,并不存在一些数据或者控制上的冲突问题。所以可以依靠上图很清晰的看到指令所处的不同流水段,及指令执行情况。该时空图同样也是和前面的 Code 等相对应。也可以通过快

6、捷键 F7 来进一步执行指令,可以看到流水线时空图的扩展情况。任意双击指令的一行,可以详细看到不同流水段的情况。如下图所示。65.Statistics 窗口介绍该窗口是对运行程序中的数据进行分析。主要包括模拟器中硬件配置情况,在该窗口中,我们可以比较不同配置对于该模拟器的不同影响。如下图所示。1)整体指令执行情况2) 硬件配置情况3) 暂停次数和百分比及原因分析74)分支次数和百分比5)Load/Store 指令执行情况6)浮点指令执行次数和百分比7)trap 发生的次数和百分比6.Breakpoints 窗口介绍该窗口使用来观察代码运行情况。先打开 Breakpoints 窗口,点击窗口上方

7、的 来设置 breakpoint,也就是设置指令运行到流水线的哪个阶段程勋停止执行。如上图,如果选择 EX 阶段,在 Code 窗口中相应的行会出现 BEX,即指令执行到译码结束执行开始的时候,程序将中止。8实验总结通过本次试验,由于是第一次接触 DLX 模拟器,该试验能够帮助我对这个模拟器大致的功能及使用做个大致的了解。对于日后的实验打下好的基础。我觉得 WinDLX 模拟器小而精悍,它有不同颜色的标记, 不同寄存器及存储器的反映。通过使用它,可以对 5 步流水的过程及不同阶段很清楚明白的看到。也可以看到不同指令分析走到了哪一步,到了哪一步流水段。实验二 指令流水线相关性分析9实验目的通过使

8、用 WINDLX 模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和 RISC处理器的特点的理解。实验环境Windows XP 操作系统WinDLX 模拟器实验步骤1.观察程序中出现的数据/控制/结构相关。指出程序中出现上述现象的指令组合。2.考察增加浮点运算部件对性能的影响。3.考察增加 forward 部件对性能的影响。4.观察转移指令在转移成功和转移不成功时候的流水线开销。1. 观察程序中出现的数据/控制/结构相关;指出程序中出现上述现象的指令组合。1)数据相关如下图所示,在 Clock Cycle Diagram 窗口所想是

9、的时空图中和 Pipeline窗口中的流图中,第一次出现了 R-Stall。10接下来可以点击上图中的橘色窗口,则屏幕显示lbu r3,00(r2)要在 WB 周期写回 r3 中的数据;而下一条指令seqi r5,r3,0a要在 intEX 周期中读取 r3 中的数据。上述过程发生了 WR 冲突,即写读相关。为了避免此类冲突,seq r5,r4,0a 的 intEX 指令延迟了一个周期进行。由此,相关指令为:2)控制相关11由上图可以看出,在第 4 时钟周期:第一条指令处于 MEM 段;第二条命令处于 intEX 段;第三条指令出于 aborted 状态;第四条命令处于 IF 段。原因分析:j

10、al InputUnsigned 是无条件分支指令,但当第三个周期开始的时候,也就是 jal 这条指令被译码后才知道。此时,movi2fp 已经执行,且将要执行的下一条命令在另外一个地址处,所以这条指令不会执行,这个时候就会发生控制相关。由此,发生控制相关的指令为:3)结构相关首先,我们先来看一下执行过控制相关的时空图和 Pipeline,如下图。12当我们点击 Pipeline 中 IF 所对应的框框可以看到详细的该指令执行情况,如下图:上图表明了 addi r2,r2,01 的详细信息。该指令与它前一条指令 add r1,r1,r3 发生了结构相关。并且由于此处的冲突,需要暂停 2 个周期

11、。在 ID段暂停后,则开始进图 intEX 段。所以这条指令(addi r2,r2,01)你不能进入 ID 流水段,译码部分占用,发生了结构相关。该部分的指令为:2. 考察增加浮点运算部件对性能的影响。该实验取 N=6首先通过 ,点击 Floating Point Stage Configuration 来设置浮点运算部件的配置。由于实验手册上面要求 Delay=4,所以我们将 Delay 这一栏改成 4,而 Count 可以任意,为了对比,我们第一次浮点运算部件取全部为 2,第二次浮点运算部件取全部为 3。如下图所示:13运行 50 个 cycles 之后,可以看到他们数据的对比:14由此可

12、见,浮点运算部件的增减对效率无影响。比较各个数据,发现没有变化。无论怎么增加浮点运算部件,统计结果都一样。原因在于此程序中浮点计算指令没有重叠,所以并行度没有增加,性能没有提高。3.考察增加 forward 部件对性能的影响。为了对比有无 forward 部件的性能。需要在 中勾选 enable forwarding,以及不勾选 enable configuration 来看性能数据的对比。15不使用 forward 部件:使用 forward 部件:从上面的数据我们可以看出增加 forwardi 部件后 RAW 由原来占总时钟周期的 26%减少至 18%,RAW 个数由原来的 13 减少至

13、9。增加 forward 部件使得控制相关比例增加了。即,使用 forward 部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。3. 观察转移指令在转移成功和转移不成功时候的流水线开销。我们假设,浮点部件设置 Count=3,Delay=4;N=6。执行完毕后,查看条件转移16分支,如下图所示:由上图可知,转移指令一共 8 条,成功转移 2 条(占 25%) ,不成功为 6 条。所以,静态指令调度算法只能解决数据相关,条件转移结果与原来相比没有变化。即,若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低;若转移成功,则要废弃预先读入的指令,重新从转移成功处读入

14、指令,执行效率会下降。实验总结本次试验中,主要遇见一个问题,就是在当初文件加载时没有成功,后来通过查询资料和自己的尝试,发现,在选择文件的顺序很关键,它决定了文件在存储器中出现的顺序。本次实验,主要通过对于三中相关的观察,分析出现相关时的指令,分析浮点运算部件和 forward 部件对性能的影响,观察转移指令在转移成功和不成功时的流水线开销,这些实验一步一步,通过 WinDLX 形象生动的表示,使我在实践中更加深入的认识了流水线。17实验三 DLX 处理器程序设计实验目的学习使用 DLX 汇编语言编程,进一步分析相关现象实验过程A. 向量加法代码及性能分析首先给据题目要求,需要熟练掌握 DLX

15、 编程语言,然后根据规范格式编写向量的代码。1) 向量声明VectorLength: .word 16 /声明向量长度Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 /声明两个向量Vector1 和 Vector2Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 Result: .space 4 /声明一个空间来存放打印的数据 Loop: /循环体ld f10,Vector1(r2) ld f12,Vector2(r2) /读入两个提前声明的向量add f4,f2,f0 /加法

16、运算 trap 5 /系统中断2) 源代码18运行结果分析当运行到如下图所示的时候,则表示运行结束。运行结果为接下来我们可以查看 Statistics 可以看到运行结果的数据显示,如下图所示。191)程序相关性分析结果 数据相关由上图的 可以看出,该程序产生了11.31%的数据相关。所以当对当前指令的操作数寄存器进行操作(EX)的时候,前几条指令的运算结 果还未写回(WB)结果寄存器,由此产生数据相关。 结构相关由于程序只简单的做了一次加法,所以没有结构相关产生。 控制相关查看 pipeline 中可以看到,当执行到如下情况时,发生了控制相关。由 Statistics 中的 可以看出,其控制相

17、关发生了 5.3%。分析可知,由于系统按照预测成功来执行指令,所以执行 bnez 后马上将其下一条指令 trap 读进来。2)浮点运算部件带来的影响当我们通过设置浮点部件的个数,并将程序运行完毕,查看 Statistics 中的数据作对比。如下图所示。20将浮点加法器由 1 个增加为 4 个后(左图为 4 个),可以由上图看出,程序执行的性能未得到提升。分析原因我们知道,由于该程序为产生浮点加法器的结构相关,所以增加浮点加法器的数量对程序执行的性能提升没有帮助。3)forward 部件的影响 21由上图的对比可以看到,当不勾选 enable forwarding 时,运行时间由 283 增加到

18、 381。所以 forwarding 技术为该程序带来的加速比为381/282=1.354)转移成功和不成功 查看 statistics 中的Conditional Branches 选项,两者的下述相同,如下图所示。可以发现,由于系统按照预测成功来执行指令,所以执行bnez 后马上将其下一条指令trap 读进来判断出是转移不成功时,系统对 trap 指令进行的操作被全部作废,转而去执行跳转到的指令 id。B. 双精度浮点加法求和代码及结果分析按照题目要求,自行又编写了一套程序来实现双精度浮点加法求和22结果分析当运行到如下图所示时,运行结束,可以看到运行结果如下图所示。产看 Statisti

19、cs 可以看到具体数据情况和产生相关的比例等。231)程序中出现的数据/控制/结构相关 控制相关: 数据相关由 Statistics 中的 知道,发生了 55.48%的数据相关。产看代码可以发现,产生的相关都为 RW 读写相关。它们分别为:addi r1,r0,0subi r2,r1,20subi r2,r1,20beqz r2,finishmultu r3,r1,r4ld f0,a(r3)ld f2,b(r3)addd f4,f0,f2addd f4,f0,f224sd r(r3),f4 控制相关由 Statistics 中的 可以看到,发生了 4.43%的控制相关。系统按照预测成功来执行指

20、令,执行一条指令后马上将其下一条指令 trap 读进来。2)增加浮点运算部件对性能的影响。下图分别为浮点运算部件为 1 和 4 的时候数据情况对比。25由上图的对比可知,当浮点运算部件个数给边后统计结果均相同,也就是其数量对该函数没有任何性能方面的改进。分期其原因为,这主要是因为函数中没有连续的浮点加指令,乘、 除指令。3)增加 forward 部件对性能的影响。 下图左侧为没有勾选 enable forwarding 时的运行数据结果,右侧为使用了forwarding 技术。26由上图的对比可以看出,增加 forwarding 技术后,流水线的加速比为:474/352=1.347流水线性能有

21、明显改善。 4)转移指令在转移成功和转移不成功时候的流水线开销。 由 Conditional Branches 的数据可以看出,该转移指令“not taken”的情况占绝大多数(95.24%)。在一共的 21 中,发生了仅为 1 次,所以预测顺序取对流水线的性能是有利的。转移不成功时:顺序预取的下条指令可以直接在流水线中执行,保证流水线不断流;转移成功时:顺序预取的下条指令作废,需要转到转移地址处重新取指,流水线发生了断流现象。实验总结在实验中,我主要遇到的问题是 WinDLX 所加载的.s 文件不要出现中文格式,不然会导致加载失败(开始好几次为了方便我直接起名为“双精度浮点向量加.s”却怎么

22、样也导入不成功);在编写双精度浮点数运算时有些对于指令27掌握不熟练,并且双精度 double 型运算指令,其所有的运算指令名称上面都要加上“d”才 ok。而如果是单精度的,则需要添加字母“f”;其次,对于浮点数的相关设置,包括状态寄存器和浮点寄存器都需要在实验之前查资料了解透彻,不然在试验中就会有语法错误。通过此次实验我对实验二所进行的数据相关、控制相关、结构相关的性能分析做了更深入的了解,以及对于功能部件对流水线的影响,forwarding 技术对流水线的影响,还有就是静态指令调度等。通过自行编写向量矢量算法,在代码中初始化两个向量,按照分量顺序进行运算。当然,如果想要改变源向量,直接处理

23、代码中的相关数据即可。总之,该实验主要着重对浮点运算以及对于流水线的相关影响及性能分析,使我受益匪浅。实验四 代码优化实验目的学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。实验原理采用静态调度方法重排指令序列,减少相关,优化程序实验过程选择上一个实验的向量加法运算作为优化对象。优化后的代码如下图所示。28当如下图所示的时候证明已经执行完毕。执行完毕后,我们点击 Statistics 查看运行结果数据分析。291)程序相关性分析结果 优化之后其中断数据显示为:优化前为:由上述两图对比可以看出,30数据相关:其 RAW 相关由优化前的 34.12%减少为 20.57%,性能改善很多;结构相关没有发生改变;控制相关:由原来的 3.94%变为 4.75%,没有改善。因此,可以看出,我所进行的代码优化对性能方面改善并不是很强烈,主要影响还是在数据相关方面。2)增加浮点运算部件对性能的影响。上图左图为 4 个浮点部件执行结果,右图为原始默认 1 个浮点部件执行结果。由此可以看出,其部件个数对统计结果并无影响。原因为该运算过程中不存在结构相关,因此并行度没有增加,程序影响不大,部件增加对于系统的性能并没有改善。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报