北邮计算机系统结构实验报告.docx
- 文档编号:23156804
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:39
- 大小:2.44MB
北邮计算机系统结构实验报告.docx
《北邮计算机系统结构实验报告.docx》由会员分享,可在线阅读,更多相关《北邮计算机系统结构实验报告.docx(39页珍藏版)》请在冰豆网上搜索。
北邮计算机系统结构实验报告
高级计算机系统结构
实验报告
实验二指令流水线相关性分析
实验三DLX处理器程序设计
实验四代码优化
实验五循环展开
专业计算机科学与技术
班级2015
姓名
学号2015
实验二指令流水线相关性分析
1.实验目的:
通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。
2.实验设备环境:
2.1WinDLX模拟器可以装入DLX汇编语言程序,然后单步、设置断点或者连续执行该程序;
2.2CPU的寄存器、流水线、I/O和存储器都可以使用图形的方式表示出来;
2.3模拟器还提供了对流水线操作的统计功能;
2.4该模拟器对理解流水线和RISC处理器的特点很有帮助;
2.5所有浮点运算部件的延时都设定为4个周期;
3.实验原理:
指令流水线中主要有结构相关、数据相关、控制相关。
相关影响流水线性能。
3.1数据相关
定义:
原有先后顺序的两条指令(I1,I2)在对共享变量(位置)进行读、写时,指令流水线中实际完成的读、写顺序与原有顺序不一致,导致流水线输出错误。
三类数据相关:
写读(WR)相关
读写(RW)相关
写写(WW)相关
解决方法技术:
1.使某些流水线指令延迟、停顿一或多个周期。
2.双端口存储器:
如果指令和数据放在同一个存储器。
3.设置两个存储器:
一个数据存储,一个为指令存储器。
4.软件优化编译:
通过指令重新排序,消除数据相关。
5.定向技术:
又称旁路技术或专用通路技术,是使后续指令提前得到前指令的运算结果(适合ALU类指令)
3.2结构相关
定义:
如果某指令在流水线重叠执行过程中,硬件资源满足不了指令重叠执行的要求,会产生资源冲突或竞争,称为流水线结构相关
解决方法技术:
1.延迟技术:
使某些指令延迟、停顿一或多个时钟周期
2.双端口存储器:
允许同时读两个数据或指令
3.设置双存储器(哈弗结构):
一个数据存储,一个指令存储。
4软件优化编译:
通过指令重新排序消除结构相关。
3.3控制相关
定义:
控制相关是指因程序执行转移类指令而引起的冲突相关。
包括无条件转移、条件转移、子程序调用、中断等,它们属于分支指令,执行中可能改变程序方向,造成流水线断流。
解决方法技术:
1、静态分支技术
Ø静态转移预测技术(猜测法)
Ø延迟转移
Ø提前形成条件码,生成转移目标地址
Ø改进循环程序
2、动态分支预测技术
Ø转移历史表BHT。
Ø转移目标缓冲栈(BTB)
Ø转移目标指令缓冲栈BTIB
4.实验步骤:
4.1观察程序中出现的数据/控制/结构相关。
指出程序中出现上述现象的指令组合。
按要求,初始化WinDLX,将所有浮点运算部件的延时都设定为4周期;载入fact.s和input.s先总体上观察数据/结构/控制相关。
装入后点击F5运行,在结果分析中发现无结构相关,有数据相关和控制相关。
4.1.1数据相关分析
可知第0*0000012c条指令subdf0,f0,f4对f0进行了读写操作,写回发生在MEM阶段,ledf0,f4指令在ID时刻要读取f0,f4的信息,可知关于f0两条指令发生了写读相关(WR)。
如上图所示,此时由于指令subdf0,f0,f4,在MEM时才写回f0,为保证程序的正确运行,ledf0,f4的ID取数阶段顺延至MEM完成后才进行,这样导致了流水线的断流,影响了程序的运行效率。
4.1.2控制相关分析
可知第0*00000130条指令jfact.Loop为循环指令,指令在EX时刻才能判别指令是否发生转移,此时发生了控制相关。
如下所示,此时指令跳转成功,故顺序取出的指令必须中断,并且转向取出转移到的指令。
jfact.Loop在EX时发现跳转成功,则在EX阶段马上结束指令顺序取出的指令sdPrintfValue(r0),f0,转而执行ledf0/4指令的取指阶段ID。
由于此控制相关使得流水线断流一个时钟周期。
4.2考察增加浮点运算部件对性能的影响。
4.2.1不附加部件
在载入fact.s和input.s后,对程序进行初始化设置,使得浮点数运算时延均设为4。
按F5运行程序,要求输入时,输入12,以后的运算也均输入12。
Statistics窗口中的各种统计数字:
总的周期数(200)其中控制相关暂停17(8.5%)数据相关暂停12.0(6.0%)。
4.2.2附加forward部件
在Configuration菜单中的设置,它们是:
Symbolicaddresses,AbsoluteCycleCount和。
点击EnableForwarding相应菜单项后,在它的旁边将显示一个小钩。
在定向技术存在的情况下Statistics窗口中的各种统计数字:
总的周期数158其中控制相关暂停17(10.76%)数据相关暂停12.0(7.59%)。
在定向技术不存在时候,控制相关暂停和数据相关暂停仍然是同样的值,总的模拟周期数增加到200。
所以定向技术带来的加速比:
200/158=1.266
DLXforwarded比DLXnotforwarded快26.6%。
4.2.3增加浮点运算部件
点击FloatingPointStages,进入后按下图的方式进行选择:
运算结果如下:
Statistics窗口中的各种统计数字:
总的周期数(200)其中控制相关暂停17(8.5%)数据相关暂停12.0(6.0%)与不增加部件的数据一样。
4.3转移指令的影响
可知条件分支指令总共有15条,其中有两条转移成功(13.33%),有13条转移不成功。
转移不成功的指令就顺序执行,故不会影响程序的运行,不会导致流水线断流;而转移成功的指令会导致流水线的断流,经分析可知,两次断流都会导致一个周期的流水线断流。
5.实验结论:
在流水线中,硬件资源满足不了指令重叠执行的要求,会产生资源冲突或竞争,称为流水线结构相关,而解决流水线相关的途径之一是设置双存储器(哈弗结构):
一个数据存储,一个指令存储。
实际上,本身实现DLX指令的硬件设备已经考虑到了这一点,本身已有两个存储器,一个为数据存储器,一个为指令存储器。
故本身就解决了部分结构相关问题。
并且fact.s中的指令并不会导致其他资源冲突,故无法体现资源相关。
试验中多加入浮点数部件,运行效率等没有变化。
通过观察指令的运行情况,因为不会发生结构相关(硬件资源冲突),在流水线中的部件线性使用,故加入部件也不会对结果有直接的影响。
6.实验心得:
通过本次实验,我熟悉了指令执行的每个阶段的任务,对时空图的理解也更深了一步,对流水线中的三种相关性问题有了认识,同时通过此实验学习到了解决这些相关问题的方法,从而对课上所学的知识有了更系统的认识。
实验三DLX处理器程序设计
1.实验目的
学习使用DLX汇编语言编程,进一步分析相关现象。
2.代码清单及注释说明
;fileadd_vector.s
;完成两双精度浮点一维向量的加法(或乘除法)运算
.data
;修改此处代码可设置向量的长度以及对应向量数据
;向量长度>=16
VectorLength:
.word16
Vector1:
.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Vector2:
.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Prompt:
.asciiz"ResultVector="
PrintFormat:
.asciiz"%f"
.align2
PrintPrompt:
.wordPrompt
PrintPar:
.wordPrintFormat
;为结果向量分配一个数据大小的内存空间
Result:
.space4
.text
main:
;r0初始为0,加上符号地址Prompt得到打印内容的首地址,存入r14
I1:
addir14,r0,PrintPrompt
trap5
;将向量长度存入r16
I2:
lwr16,VectorLength
;向量第一个数据偏移地址为0
I3:
addir2,r0,0
Loop:
;循环将两向量对应位置的数据相加
I4:
ldf10,Vector1(r2)
I5:
ldf12,Vector2(r2)
I6:
cvti2df0,f10
I7:
cvti2df2,f12
I8:
adddf4,f2,f0
I9:
sdResult,f4;将一次相加的结果f4存入Result内存空间中
I10:
addir14,r0,PrintPar;打印目前为止的结果向量
trap5
;为下一次循环做准备
I11:
addir2,r2,4
I12:
subir16,r16,1
I13:
bnezr16,Loop
;
trap0
;系统中断,输出结果
3.程序相关性分析结果
初始化WinDLX,将所有浮点运算部件的延时都设定为4周期;载入add_vector.s
按F5运行,总体观察相关性。
无结构相关,有控制相关和数据相关。
3.1观察程序中出现的数据/控制/结构相关。
指出程序中出现上述现象的指令组合。
●I3和I4,I5---数据WR相关(r2),I4和I5需要I3存入r2的运算结果值。
●I4和I6,I5和I7---数据WR相关,I6/I7需要I4/I5的结果值。
●I6,I7和I8---数据WR相关(f0,f2),I8需要I6和I7的结果值。
●I8和I9---数据WR相关(f4),I9需要I8的结果值。
●I9和I10---结构相关。
译码部件只有一个,I9使用未结束,I10需等待。
●I12和I13---数据WR相关,I13需要I12的结果值进行判断是否继续循环。
3.2考察增加浮点运算部件对性能的影响。
●浮点运算部件分别只有一个的情况
●浮点运算部件各自增加一个的情况
由上面可以看出,增加浮点运算部件并没有提高流水线的性能。
原因是本程序中并没有并行执行的浮点运算。
3.3考察forward部件对性能的影响。
停用forward部件
由上面可以看出,使用forwarding技术很大程度上提高了流水线的性能。
加速比=413/315=1.311
3.4观察转移指令在转移成功和转移不成功时候的流水线开销。
转移成功:
转移失败:
由上面可以看出,当转移成功时,已经进入取指阶段的指令被放弃,转入转移的目标指令的取指操作,这就造成了流水线的断流;若转移失败,已经进入取指阶段的指令继续进入译码阶段,流水线不断流。
实验四代码优化
1.实验目的
学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。
2.实验原理
采用静态调度方法重排指令序列,减少相关,优化程序。
3.优化程序代码清单及注释说明
;Programbeginatsymbol
;requiresmoduleINPUT
;readtwovectorsfromstdinandcalculatethesum
;(type:
double,vectorLength16)
;theresultiswrittentostdout
;---------------------------------------------------------------------
.data
VectorLength:
.word16
Vector1:
.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Vector2:
.word1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Printf1:
.asciiz"Vector="
Printf2:
.asciiz"%f"
.align2
PrintPrompt:
.wordPrintf1
PrintPar:
.wordPrintf2
Result:
.space4
.text
main:
;****Printprompt"Vector="
addir14,r0,PrintPrompt
trap5
addir2,r0,0
lwr20,VectorLength
Loop:
ldf10,Vector1(r2)
ldf12,Vector2(r2)
addir2,r2,4
cvti2df0,f10
cvti2df2,f12
subir20,r20,1
adddf4,f2,f0;addD2=D0+D1
;****Finish,writeresultintostdout
sdResult,f4
addir14,r0,PrintPar
trap5
;addir2,r2,4
;subir20,r20,1
bnezr20,Loop
;****End
trap0
4.实验分析:
优化前:
优化后:
结论:
可以从图中看出代码优化后总的时钟周期从315减少到299,减少了16个时钟周期。
数据相关从20.32%减少到了16.05%,减少了4.27%。
控制相关从4.76%上升到5.02%。
总体上,优化后的代码的效率相对于优化前的代码的效率有了比较大的提升。
4.1.观察程序中的数据/控制/结构相关及指令组合
4.1.1.数据相关及指令组合
1)截图及分析
第5个时钟周期,指令adddf4,f2,f0和指令sdresult(r0),f4存在数据相关,指令sdresult(r0),f4的intEX阶段延迟至指令adddf4,f2,f0的intEX阶段完成后执行。
2)相关指令组合
adddf4,f2,f0
sdresult(r0),f4
4.1.2.控制相关及指令组合:
1)截图及分析
bnezr20,Loop是循环判断指令,在其译码之后才发现不需要执行trap0x0,因此trap0x0在第14个时钟周期被取消。
3)相关指令组合
bnezr20,Loop
trap0x0
4.1.3.结构相关及指令组合
1)截图及分析
在上图中,蓝圈中stall是因为结构相关。
因为上一条指令sdResult(r0),f4与addir14,r0,0x1098发生了数据相关,指令sdResult(r0),f4为了避免冲突,把ID段加长了3个时钟周期。
导致了和addir0,r2,0x4产生了结构相关,因为addir0,r2,0x4无法正常进入ID段,二必须等到指令sdResult(r0),f4离开ID段。
2)相关指令组合
sdResult(r0),f4
addir14,r0,0x1098
4.2.考察增加浮点运算部件对性能的影响
1)结果截图
浮点运算部件的数量都为1时:
浮点运算部件都为2时:
2)结果分析
比较各个数据,发现没有变化。
无论怎么增加浮点运算部件,统计结果都一样。
由此可见,浮点运算部件的增减对效率无影响。
增加浮点运算部件能够减少结构相关。
但是本程序并没有产生浮点加法器的结构相关,所以增加浮点加法器的数量对程序执行的性能提升没有帮助。
4.3.考察增加forward部件对性能的影响
1)结果截图
a)不采用重定向技术
b)采用重定向技术
2)结果分析
从上面的数据我们可以看出增加forward的作用:
a)增加forward部件后的299个时钟周期比增加前的348个少了49个时钟周期。
b)增加forward部件使数据相关变为48个,比增加前的97个减少了49个,数据相关的比例从总时钟周期的27.87%减为216.05%。
c)增加forward部件使得控制相关比例增加了,由原来占总时钟周期的4.31%增至5.02%。
在使用forward之后,处理的各个方面的性能都得到了提升,时钟周期减少,相关造成的延时减少。
4.4.观察转移指令在转移成功和转移不成功时候的流水线开销
1)结果截图
在浮点运算部件数目都为1,延时都为4,使用forward的情况下,条件转移结果如下图:
2)结果分析
在控制相关中,转移成功和不成功的差别。
由于系统按照预测成功来执行指令,所以执行bnez后马上将其下一条指令trap读进来判断出是转移不成功时,系统对trap指令进行的操作被全部作废,转而去执行跳转到的指令id。
5.困难和解决方法
5.1安装winDLX软件
问题:
win64平台下无法运行。
解决:
安装VMware软件,安装winXP虚拟机,在虚拟机下使用软件。
5.2使用winDLX软件
问题:
不熟悉使用方法。
解决:
参考“WDLXTUT.DOC”文档学习了一下基本操作方法。
5.3DLX汇编语言
问题:
不熟悉语法。
解决:
通过网络查找DLX源程序的实例,通过学习实例熟悉了基本语法。
5.4有关数据相关和代码优化
问题:
感觉难以下手
解决:
在草稿纸上手动分析代码,推敲其中的相关性和可以优化的部分。
6.实习体会
通过使用winDLX软件,对流水线执行过程和指令相关性有了直接的认识。
winDLX将流水线执行过程可视化,是学习的良好工具,十分方便,节省了许多人工过程。
实验五循环展开
1.实验目的
进一步学习DLX汇编语言编程方法,学习循环展开编译优化方法,观察采用循环展开编译优化方法所带来的性能的提高。
2.实验原理
对循环程序采用循环展开(loopunrolling)方法进行优化,减少相关。
3.实验环境
WindowsXP虚拟机。
4.实验步骤
1.编写矩阵相乘程序
.data
matrix_A:
.space200
matrix_B:
.space200
result:
.space200
.text
.globalmain
main:
addr1,r0,matrix_A
addr2,r0,matrix_B
addr3,r0,0
addr4,r0,0
addr5,r0,0
addr6,r0,0
addr7,r0,0
subdf4,f4,f4
loop1:
ldf0,matrix_A(r3)
addr11,r5,r6
ldf2,matrix_B(r11)
multdf0,f2,f0
adddf4,f4,f0
addr4,r4,1
subir12,r4,5
beqzr12,continue1
addr5,r5,40
addr3,r3,8
jalloop1
continue1:
sdresult(r7),f4
subdf4,f4,f4
addr7,r7,8
addr4,r0,0
subir12,r6,32
beqzr12,continue2
addr5,r0,0
addr6,r6,8
subir3,r3,32
jalloop1
continue2:
subir12,r3,192
beqzr12,finish
addr3,r3,8
addr5,r0,0
addr6,r0,0
jalloop1
finish:
trap5
trap0
2.重复实验二中
(1)
(2)(3)(4)工作。
1)观察程序中出现的数据/控制/结构相关。
指出程序中出现上述现象的指令组合。
a)数据相关
指令组合是:
ldf2,matrix_B(r11);取B矩阵中要参加计算的数
multdf0,f2,f0
ldf2,matrix_B(r11)指令在执行阶段写f2寄存器;multdf0,f2,f0如果不加stall,在ID译码阶段,要读f2寄存器,发生数据相关。
b)控制相关
指令组合为:
addir5,r0,0
trap0x5
系统按照预测成功来执行指令,执行一条指令后马上将其下一条指令trap读进来。
c)结构相关
指令组合为:
addr11,r5,r6
ldf0,matrix_A(r3);取A矩阵中要参加计算的数
addr11,r5,r6在写回周期和ldf0,matrix_A(r3)在MEM周期都要访问ALUoutput,发生结构相关。
2)考察增加浮点运算部件对性能的影响。
下图左边是不增加浮点运算单元的性能情况,右边是增加浮点运算单元的性能情况:
通过观察比对可以发现,改变浮点运算不见对于程序的执行效率没有什么影响。
因为程序执行的时候并没有因为浮点计算部件缺少而发生冲突,所以并行度没有增加,性能得不到提高。
3)考察增加forward部件对性能的影响。
下图左边是不增加forward部件的性能情况,右边是增加forward部件的性能情况:
通过观察比对可以发现,程序所用总的机器周期由2712降到2153,由于冲突增加的stall数目由1125降到565,stall所占比例由41.48%降到26.24%,数据相关明显减少,占时钟周期的比例也明显减少,进一步验证forward部件可以解决部分数据相关的问题,提高流水线的性能。
但是控制相关数目没有变化,说明forward部件对解决控制相关问题没有效果。
4)允许forward时的条件转移指令执行情况如下:
通过观察比对可以发现,程序执行中转移至零转移成功的几率比较大,为80.00%,因为系统按照预测成功来执行指令,当判断转移不成功时,系统对转移指令后的指令进行的操作被全部作废,转而去执行跳转到的指令。
4.3使用循环展开手工优化程序
.data
matrix_A:
.space200
matrix_B:
.space200
result:
.space200
.text
.globalmain
main:
addr1,r0,matrix_A
addr2,r0,matrix_B
addr3,r0,0
addr4,r0,0
addr5,r0,0
addr6,r0,0
addr7,r0,0
subdf4,f4,f4
loop1:
addr4,r4,1
addr11,r5,r6
ldf0,matrix_A(r3)
ldf2,matrix_B(r11)
mul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机系统 结构 实验 报告