北邮大三下 计算机系统结构试验报告 试验一到五 WINDLX模拟器_第1页
北邮大三下 计算机系统结构试验报告 试验一到五 WINDLX模拟器_第2页
北邮大三下 计算机系统结构试验报告 试验一到五 WINDLX模拟器_第3页
北邮大三下 计算机系统结构试验报告 试验一到五 WINDLX模拟器_第4页
北邮大三下 计算机系统结构试验报告 试验一到五 WINDLX模拟器_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——北邮大三下计算机系统结构试验报告试验一到五WINDLX模拟器

北京邮电大学

试验报告

课程名称计算机系统结构

计算机学院2023211311班

薛玥(2023211432)

目录

试验一WINDLX模拟器安装及使用3

·试验准备3·试验环境4·试验步骤5·试验内容及要求5·试验过程5·试验总结11试验二指令流水线相关性分析12

·试验目的12·试验环境12·试验步骤12·试验过程12·试验总结19试验三DLX处理器程序设计20

·试验目的20·试验环境20·试验步骤20·试验过程20

A.向量加法代码及性能分析20B.双精度浮点加法求和代码及结果分析26·试验总结31试验四代码优化32

·试验目的32·试验环境32·试验原理32·试验步骤32·试验过程32·试验总结+实习体会37试验五循环展开38

·试验目的38·试验环境38·试验原理38·试验步骤38·试验过程38

矩阵乘程序代码清单及解释说明38相关性分析结果43增加浮点运算部件对性能的影响43增加forward部件对性能的影响43转移指令在转移成功和转移不成功时候的流水线开销43·试验总结+实习体会+课程建议43

2

试验一WINDLX模拟器安装及使用

·试验准备

1.了解DLX的基本结构和原理

DLX是一种典型的Load/Store型指令集结构。它具有一套简单的Load/Store指令集;它重视指令流水效率;它简化指令的译码;它高效支持编译器。

2.了解DLX中的寄放器

DLX中有32个通用寄放器(GPRs),分别将其命名为R0,R1?R31。每个通用寄放器长度为32位。另外,DLX中有32个浮点寄放器(FPRs),分别将其命名为F0,F1?F31。

3.了解DLX数据类型

DLX提供了多种长度的整型数据和浮点数据。对整型数据而言,有8位,16位,32位多种长度;对浮点而言,有32位单精度浮点数和64位双精度浮点数。浮点数据表示采用的是IEEE754标准。DLX操作都是对32位整型数据及32或64位浮点数据进行的。

4.了解DLX的寻址方式和数据传送

DLX提供了寄放器寻址,马上寻址,偏移寻址和寄放器间接寻址四种寻址方式。寄放器寻址字段的大小为5位,用来标识32个通用寄放器或浮点寄放器。

5.了解DLX的指令格式

由于DLX只有四种寻址方式,所以将其寻址方式编码在操作码中。为了简化指令译码,并充分发挥流水线的效率,所有DLX指令的字长均是32位,其中用6位表示操作码。DLX中各种类型指令的格式如下图所示:

3

6.了解DLX中的操作

DLX指令中的操作可以分为四种类型,即:Load和Store操作、ALU操作、分支和跳转操作、浮点操作。

(1)Load和Store操作

可以对DLX的所有通用寄放器和浮点寄放器进行Load(载入)和Store(储存)操作,但是通用寄放器R0的Load操作没有任何效果。(2)ALU操作

在DLX中,所有的ALU指令都是寄放器-寄放器型指令,其运算包含了简单的算术和规律运算,DLX还允许所有这些指令对马上值进行操作,马上值以16位符号扩展形式出现。在DLX指令集中,还有一些寄放器比较指令(=,≠,,≤,≥),假使比较结果为真,这些指令就在目标寄放器中填入1(表示真),否则填入0(表示假)。由于这些比较操作指令要对目标寄放器进行“设置〞,所以也称它们为设置相等、设置不等、设置小于等指令。

(3)分支和跳转操作

在DLX中,对程序流程的控制是通过一些跳转和分支指令来实现的。根据描述目标地址的方法和是否链接可以将跳转操作指令分为四种类型。其中两种类型的跳转指令用带符号位的26位偏移量加上程序计数器的值来确定跳转的目标地址,另外两种类型的跳转指令则指定一个寄放器,由寄放器中的内容决定跳转的目标地址。跳转有两种类型,一种是简单跳转,另一种是跳转并链接(用于过程调用),后者将返回一个地址,即将下一条顺序指令地址(返回地址)保存在寄放器R31中。DLX中的所有分支指令均是条件分支指令,其源操作数寄放器中包含了一个数值或某个比较结果。分支指令测试该源操作数寄放器中的值是0还是非0,决定分支是否成功。

(4)浮点操作

DLX的浮点操作有:加、减、乘、除。后缀D代表双精度浮点操作,而后缀F代表单精度浮点操作(如:ADDD、ADDF、SUBD、SUBF、MULTD、MULTF、DIVD、DIVF)。值得提出的是,DLX的浮点比较操作设置浮点状态寄放器中的位,假使比较结果为真,则将该位设置为1;假使比较结果为假,则将该位设置为0。浮点分支指令BFPT和BFTF则测试该寄放器的值来决定分支是否成功。

·试验环境

WindowsXP操作系统WinDLX模拟器

4

·试验步骤

1.WINDLX模拟器安装2.熟悉模拟器的配置

3.熟悉各工具的使用

·试验内容及要求

阅读模拟器Help文档和相关资料,利用Fact.s及Input.s代码熟悉模拟器的配置、各项工具使用、寄放器设置及指令系统。

软件包中还有WinDLX教程和联机帮助,可以通过它们进一步了解模拟器的使用方法和DLX处理器的原理。

·试验过程

前期精读老师所给资料+上网查询相关资料,了解WinDLX模拟器。

1.首先,要认真阅读老师所给的有关WinDLX的试验指导书和使用指南,在试验

开始之前一定要对软件有个细致的了解,点击,文档十分细致的陈述了这个模拟器各个窗口所包含的功能。但是我在做试验的时候还上网查了一些资料,希望能够对自己在以后的试验中有所帮助。

文档介绍了该模拟器的指令格式及要求。

2.在详细了解了WinDLX模拟器之后,点击

WinDLX模拟器的结构和功能说明

1.点击运行之后,会看到一个如下图所示的窗口。

,则开始运行。

5

它包括Register,Code,Pipeline,ClockCycleDiagram,Statistics,Breakpoints。接下来详细介模拟器的结构及各个部件的功能。2.Register窗口介绍

Rigister窗口中显示的是各个寄放器的名称及内容。如下图:

可以看到寄放器中以十六进制标识,从上图可以看出各个寄放器中的内容。

2.Code窗口介绍

在没有进行任何执行的时候,初次开启code窗口,即为下图所示

6

窗口现实的信息是各个存储器内同。第一列标识存储器的地址;其次列是机器代码,用16进制表示;第三列是汇编指令。

当我们点击上方的

,可以选择单步或多步执行(也可以使用快捷键

F7或F8)。若选择单步执行,每按一次F7,指令执行一次,可以看到,一次执行的为IF->ID->intEX->MEM->WB,没执行一次还有颜色的变化。颜色是用来标识指令处于哪个流水段的,如下图。

当然,我们也可以使用多步执行,按快捷键F8,选择5步流水,即可。

3.Pipeline窗口介绍

通过阅读WinDLX模拟器说明书可以知道,Pipeline窗口显示的是DLX处理器的内部结构。窗口用下图标识DLX五段流水。当然,宛如Code窗口介绍陈述的那样,不同的颜色显示了指令处于哪段流水线。使用快捷键F7单步执行,可以明显的看出,不同时候流水段执行的不同指令。如下图。

7

图片反映的正式与Code中所处的时刻一致的指令流水。可以明了看到不同流水段执行的是哪条指令。

4.ClockCycleDiagram窗口

试验准备中我们已经知道,该窗口显示的是流水线的时空图。时空图反映的是不同时隙内的运行状况。如下图。

在我看来,时空图是最好理解的。由于它反映的就是流水段的并行程度。在这个DLX模拟器中,并不存在一些数据或者控制上的冲突问题。所以可以依靠上图很明了的看到指令所处的不同流水段,及指令执行状况。该时空图同样也是和前面的Code等相对应。也可以通过快捷键F7来进一步执行指令,可以看到流水线时空图的扩展状况。

任意双击指令的一行,可以详细看到不同流水段的状况。如下图所示。

8

5.Statistics窗口介绍

该窗口是对运行程序中的数据进行分析。主要包括模拟器中硬件配置状况,在该窗口中,我们可以比较不同配置对于该模拟器的不同影响。如下图所示。1)整体指令执行状况

2)硬件配置状况

3)暂停次数和百分比及原因分析

9

4)分支次数和百分比

5)Load/Store指令执行状况

6)浮点指令执行次数和百分比

7)trap发生的次数和百分比

6.Breakpoints窗口介绍

该窗口使用来观测代码运行状况。先开启Breakpoints窗口,点击窗口上方的

中止执行。

来设置breakpoint,也就是设置指令运行到流水线的哪个阶段程勋

如上图,假使选择EX阶段,在Code窗口中相应的行会出现BEX,即指令执

10

行到译码终止执行开始的时候,程序将中止。

·试验总结

通过本次试验,由于是第一次接触DLX模拟器,该试验能够帮助我对这个模拟器大致的功能及使用做个大致的了解。对于日后的试验打下好的基础。

我觉得WinDLX模拟器小而精悍,它有不同颜色的标记,不同寄放器及存储器的反映。通过使用它,可以对5步流水的过程及不同阶段很明白明白的看到。也可以看到不同指令分析走到了哪一步,到了哪一步流水段。

11

试验二指令流水线相关性分析

·试验目的

通过使用WINDLX模拟器,对程序中的三种相关现象进行观测,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。

·试验环境

WindowsXP操作系统WinDLX模拟器

·试验步骤

1.观测程序中出现的数据/控制/结构相关。指出程序中出现上述现象的指令组合。

2.考察增加浮点运算部件对性能的影响。3.考察增加forward部件对性能的影响。

4.观测转移指令在转移成功和转移不成功时候的流水线开销。

·试验过程

在开始模拟之前,至少应装入一个程序到主存,依照下述步骤,将fact.s和input.s加载至WinDLX中。

加在完后点击Code后可以看到如下图所示。证明加载成功,即可进行以下试验。

1.观测程序中出现的数据/控制/结构相关;指出程序中出现上述现象的指令组

12

合。

1)数据相关

如下图所示,在ClockCycleDiagram窗口所想是的时空图中和Pipeline窗口中的流图中,第一次出现了R-Stall。

接下来可以点击上图中的橘色窗口,则屏幕显示

lbur3,0×0(r2)

要在WB周期写回r3中的数据;而下一条指令

13

seqir5,r3,0×a

要在intEX周期中读取r3中的数据。

上述过程发生了WR冲突,即写读相关。为了避免此类冲突,seqr5,r4,0×a的intEX指令延迟了一个周期进行。由此,相关指令为:

2)控制相关

由上图可以看出,在第4时钟周期:第一条指令处于MEM段;其次条命令处于intEX段;第三条指令出于aborted状态;第四条命令处于IF段。原因分析:jalInputUnsigned是无条件分支指令,但当第三个周期开始的时候,也就是jal这条指令被译码后才知道。此时,movi2fp已经执行,且将要执行的下一条命令在另外一个地址处,所以这条指令不会执行,这个时候就会发生控制相关。由此,发生控制相关的指令为:

3)结构相关

首先,我们先来看一下执行过控制相关的时空图和Pipeline,如下图。

14

当我们点击Pipeline中IF所对应的框框可以看到详细的该指令执行状况,如下图:

上图说明白addir2,r2,0×1的详细信息。该指令与它前一条指令addr1,r1,r3发生了结构相关。并且由于此处的冲突,需要暂停2个周期。在ID段暂停后,则开始进图intEX段。所以这条指令(addir2,r2,0×1)你不能进入ID流水段,译码部分占用,发生了结构相关。该部分的指令为:

2.考察增加浮点运算部件对性能的影响。该试验取N=6首先通过

,点击FloatingPointStageConfiguration来设置浮点

运算部件的配置。由于试验手册上面要求Delay=4,所以我们将Delay这一栏改成4,而Count可以任意,为了对比,我们第一次浮点运算部件取全部为2,其次次浮点运算部件取全部为3。如下图所示:

15

运行50个cycles之后,可以看到他们数据的对比:

16

由此可见,浮点运算部件的增减对效率无影响。比较各个数据,发现没有变化。无论怎么增加浮点运算部件,统计结果都一样。原因在于此程序中浮点计算指令没有重叠,所以并行度没有增加,性能没有提高。

3.考察增加forward部件对性能的影响。

为了对比有无forward部件的性能。需要在

中勾选enable

forwarding,以及不勾选enableconfiguration来看性能数据的对比。

17

不使用forward部件:

使用forward部件:

从上面的数据我们可以看出增加forwardi部件后RAW由原来占总时钟周期的26%减少至18%,RAW个数由原来的13减少至9。增加forward部件使得控制相关比例增加了。即,使用forward部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。

3.观测转移指令在转移成功和转移不成功时候的流水线开销。

我们假设,浮点部件设置Count=3,Delay=4;N=6。执行完毕后,查看条件转移

18

分支,如下图所示:

由上图可知,转移指令一共8条,成功转移2条(占25%),不成功为6条。所以,静态指令调度算法只能解决数据相关,条件转移结果与原来相比没有变化。即,若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低;若转移成功,则要废弃预先读入的指令,重新从转移成功处读入指令,执行效率会下降。

·试验总结

本次试验中,主要遇见一个问题,就是在当时文件加载时没有成功,后来通过查询资料和自己的尝试,发现,在选择文件的顺序很关键,它决定了文件在存储器中出现的顺序。

本次试验,主要通过对于三中相关的观测,分析出现相关时的指令,分析浮点运算部件和forward部件对性能的影响,观测转移指令在转移成功和不成功时的流水线开销,这些试验一步一步,通过WinDLX形象生动的表示,使我在实践中更加深入的认识了流水线。

19

试验三DLX处理器程序设计

·试验目的

学习使用DLX汇编语言编程,进一步分析相关现象

·试验环境

WinXP操作系统DLX汇编语言环境

·试验步骤

1.熟悉DLX汇编语言。

2.自编一段汇编代码,完成两双精度浮点一维向量的加法(或乘除法)运算,并输出结果。向量长度>=16。观测程序中出现的数据/控制/结构相关3.对此程序完成上面试验二中1)、2)、3)、4)方面的分析

·试验过程

A.向量加法代码及性能分析首先给据题目要求,需要熟练把握DLX编程语言,然后根据规范格式编写向量的代码。

1)向量声明

VectorLength:.word16//声明向量长度

Vector1:.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16//声明两个向量Vector1和Vector2

Vector2:.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16Result:.space4//声明一个空间来存放打印的数据Loop://循环体

ldf10,Vector1(r2)

ldf12,Vector2(r2)//读入两个提前声明的向量addf4,f2,f0//加法运算trap5//系统中断

2)源代码

20

运行结果分析

当运行到如下图所示的时候,则表示运行终止。

运行结果为

接下来我们可以查看Statistics可以看到运行结果的数据显示,如下图所示。

21

1)程序相关性分析结果

数据相关由上图的可以看出,该程序产生了11.31%的数据相关。所以当对当前指令的操作数寄放器进行操作(EX)的时候,前几条指令的运算结果还未写回(WB)结果寄放器,由此产生数据相关。

结构相关

由于程序只简单的做了一次加法,所以没有结构相关产生。控制相关

查看pipeline中可以看到,当执行到如下状况时,发生了控制相关。

22

由Statistics中的可以看出,其控制相关发生了5.3%。分析可知,由于系统依照预计成功来执行指令,所以执行bnez后马上将其下一条指令trap读进来。

2)浮点运算部件带来的影响

当我们通过设置浮点部件的个数,并将程序运行完毕,查看Statistics中的数据作对比。如下图所示。

23

将浮点加法器由1个增加为4个后(左图为4个),可以由上图看出,程序执行的性能未得到提升。

分析原因我们知道,由于该程序为产生浮点加法器的结构相关,所以增加浮点加法器的数量对程序执行的性能提升没有帮助。

3)forward部件的影响

24

由上图的对比可以看到,当不勾选enableforwarding时,运行时间由283增加到381。所以forwarding技术为该程序带来的加速比为381/282=1.35

4)转移成功和不成功

查看statistics中的ConditionalBranches选项,两者的下述一致,如下图所示。

可以发现,由于系统依照预计成功来执行指令,所以执行bnez后马上将其下一条指令trap读进来判断出是转移不成功时,系统对trap指令进行的操作被全部作废,转而去执行跳转到的指令id。

25

B.双精度浮点加法求和代码及结果分析

依照题目要求,自行又编写了一套程序来实现双精度浮点加法求和

结果分析

当运行到如下图所示时,运行终止,可以看到运行结果如下图所示。

产看Statistics可以看到具体数据状况和产生相关的比例等。

26

1)程序中出现的数据/控制/结构相关控制相关:数据相关

由Statistics中的知道,发生了55.48%的数据相关。产看代码可以发现,产生的相关都为RW读写相关。它们分别为:addir1,r0,0subir2,r1,20

subir2,r1,20beqzr2,finish

multur3,r1,r4ldf0,a(r3)

ldf2,b(r3)adddf4,f0,f2

adddf4,f0,f2

27

sdr(r3),f4

控制相关

由Statistics中的可以看到,发生了4.43%的控制相关。

系统依照预计成功来执行指令,执行一条指令后马上将其下一条指令trap读进来。

2)增加浮点运算部件对性能的影响。

下图分别为浮点运算部件为1和4的时候数据状况对比。

28

由上图的对比可知,当浮点运算部件个数给边后统计结果均一致,也就是其数量对该函数没有任何性能方面的改进。

分期其原由于,这主要是由于函数中没有连续的浮点加指令,乘、除指令。

3)增加forward部件对性能的影响。

下图左侧为没有勾选enableforwarding时的运行数据结果,右侧为使用了forwarding技术。

29

由上图的对比可以看出,增加forwarding技术后,流水线的加速比为:474/352=1.347

流水线性能有明显改善。

4)转移指令在转移成功和转移不成功时候的流水线开销。

由ConditionalBranches的数据可以看出,该转移指令“nottaken〞的状况占绝大多数(95.24%)。在一共的21中,发生了仅为1次,所以预计顺序取对流水线的性能是有利的。转移不成功时:顺序预取的下条指令可以直接在流水线中执行,保证流水线不断流;转移成功时:顺序预取的下条指令作废,需要转到转移地址处重新取指,流水线发生了断流现象。

30

·试验总结

在试验中,我主要遇到的问题是WinDLX所加载的.s文件不要出现中文格式,不然会导致加载失败(开始好几次为了便利我直接起名为“双精度浮点向量加.s〞却怎么样也导入不成功);在编写双精度浮点数运算时有些对于指令把握不熟练,并且双精度double型运算指令,其所有的运算指令名称上面都要加上“d〞才ok。而假使是单精度的,则需要添加字母“f〞;其次,对于浮点数的相关设置,包括状态寄放器和浮点寄放器都需要在试验之前查资料了解透彻,不然在试验中就会有语法错误。

通过此次试验我对试验二所进行的数据相关、控制相关、结构相关的性能分析做了更深入的了解,以及对于功能部件对流水线的影响,forwarding技术对流水线的影响,还有就是静态指令调度等。

通过自行编写向量矢量算法,在代码中初始化两个向量,依照分量顺序进行运算。当然,假使想要改变源向量,直接处理代码中的相关数据即可。

总之,该试验主要着重对浮点运算以及对于流水线的相关影响及性能分析,使我受益匪浅。

31

试验四代码优化

·试验目的

学习简单编译优化方法,观测采用编译优化方法所带来的性能的提高。

·试验环境

WinXP操作系统DLX汇编语言环境

·试验原理

采用静态调度方法重排指令序列,减少相关,优化程序

·试验步骤

1.使用静态调度方法手工优化试验2或试验3的代码

2.对优化程序,重复试验二中(1)、(2)、(3)、(4)工作。

·试验过程

选择上一个试验的向量加法运算作为优化对象。优化后的代码如下图所示。

32

当如下图所示的时候证明已经执行完毕。

执行完毕后,我们点击Statistics查看运行结果数据分析。

33

1)程序相关性分析结果优化之后其中断数据显示为:

优化前为:

34

由上述两图对比可以看出,

数据相关:其RAW相关由优化前的34.12%减少为20.57%,性能改善好多;结构相关没有发生改变;

控制相关:由原来的3.94%变为4.75%,没有改善。

因此,可以看出,我所进行的代码优化对性能方面改善并不是很猛烈,主要影响还是在数据相关方面。

2)增加浮点运算部件对性能的影响。

上图左图为4个浮点部件执行结果,右图为原始默认1个浮点部件执行结果。由此可以看出,其部件个数对统计结果并无影响。

原由于该运算过程中不存在结构相关,因此并行度没有增加,程序影响不大,部件增加对于系统的性能并没有改善。

3)增加forward部件对性能的影响。

35

左图为使用forwading技术的统计结果。通过对比可以看出,使用forwarding技术之后执行周期少了316-283=33个时钟周期,在这些时钟周期中,forwarding技术主要在于消除了执行过程中的数据相关(由65个中断减少至32个)。因此,代码执行效率改善好多。

5)转移指令在转移成功和转移不成功时候的流水线开销。由统计结果中的ConditionalBranches(如下图)可以看出,

优化前和优化后的ConditionalBranches都为上图显示,优化对于转移指令并无影响。

在本代码运行过程中,成功几率为93.75%,在进行一共16次转移中,taken一共15次。分析原因可以知道,预计成功执行指令,当判断转移不成功是,系统

36

对trap指令不再执行,进行跳转。

·试验总结+实习体会

本次试验主要是对上一个试验中的代码进行优化,使我在做试验的过程中把握了进行代码优化的方法,以及相关性的分析。而相关性分析在我看来是重点,它关系到能否进行优化以及怎么优化。

首先需要分析程序中产生的相关性,代码优化的目的就是减少相关性的发生,提高流水线的效率。通过上述的试验报告和数据对比,可以看到,代码优化我做到了。

实习体会:

其实总的来说这几次试验难度不大,主要还是将课上老师所讲的融入试验当中。其中forwarding技术和预计技术都是课上老师详细讲过的,所以对于试验的理解起来更简单一些。理解之后,通过试验结果的统计数据可以客观的看到这些技术对于流水线性能的影响。这对于我来说收获颇多。

37

试验五循环展开

·试验目的

进一步学习DLX汇编语言编程方法,学习循环展开编译优化方法,观测采用循环展开编译优化方法所带来的性能的提高。

·试验环境

WinXP操作系统DLX汇编语言环境

·试验原理

对循环程序采用循环展开(loopunrolling)方法进行优

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论