实验三处理器结构实验一.docx
- 文档编号:27934057
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:13
- 大小:243.29KB
实验三处理器结构实验一.docx
《实验三处理器结构实验一.docx》由会员分享,可在线阅读,更多相关《实验三处理器结构实验一.docx(13页珍藏版)》请在冰豆网上搜索。
实验三处理器结构实验一
深圳大学实验报告
课程名称:
计算机系统(3)
实验项目名称:
处理器结构实验一
学院:
********
专业:
******************
指导教师:
******
报告人:
******学号:
***********班级:
**
实验时间:
2017年11月19日星期日
实验报告提交时间:
2017年11月30日星期四
教务处制
一、实验目标
1.了解MIPS的五级流水线,和在运行过程中的所产生的各种不同的流水线冒险
2.通过指令顺序调整,或旁路与预测技术来提高流水线效率
3.更加了解流水线细节和其指令的改善方法
4.更加熟悉MIPS指令的使用
二、实验内容
1.观察一段代码并运行,观察其中的流水线冒险,并记录统计统计信息。
2.对所给的代码进行指令序列的调整,以期避免数据相关,并记录统计信息。
3.启动forward功能,以获得性能提升,并且记录统计信息。
(选做:
用perf记录x86中的数据相关于指令序列调整后的时间统计、
调整指令,以避免连续乘法间的阻塞。
)
三、实验环境
1.硬件:
桌面PC
2.软件:
Windows,WinMIPS64仿真器
四、实验步骤及说明
首先,我们给出一段C代码,该段代码实现的是两个矩阵相加。
设有4*4矩阵A和4*4矩阵B相加,得到4*4矩阵C:
for(inti=0;i<4;i++)
For(intj=0;j<4;j++)
C[i][j]=A[i][j]+B[i][j];
根据上述的C代码,我们将其转换成MIPS语言,然后运行,并进行分析。
MIPS代码如下:
.data
a:
.word1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4
b:
.word4,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1
c:
.word0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
len:
.word4
control:
.word320x10000
data:
.word320x10008
.text
start:
daddir17,r0,0
daddir21,r0,a
daddir22,r0,b
daddir23,r0,c
ldr16,len(r0)
loop1:
sltr8,r17,r16
beqr8,r0,exit1
daddir19,r0,0
loop2:
sltr8,r19,r16
beqr8,r0,exit2
dsllr8,r17,2
daddr8,r8,r19
dsllr8,r8,3
daddr9,r8,r21
daddr10,r8,r22
daddr11,r8,r23
ldr9,0(r9)
ldr10,0(r10)
daddr12,r9,r10
sdr12,0(r11)
daddir19,r19,1
jloop2
exit2:
daddir17,r17,1
jloop1
exit1:
halt
实验前请保证winMIPS64配置中“EnableForwarding”没有选中。
将这段代码加载到WinMIPS64中,运行后观察结果(提供Statistic窗口截图)。
从Statistic窗口记录:
本程序运行过程中总共产生了多少次RAW的数据相关。
接下来,我们对产生数据相关的代码逐个分析,请列出产生数据相关的代码,并在下一步中进行分析和优化。
一、调整指令序列
在这一部分,我们利用指令调整的方法对数据相关代码进行优化,规避数据相关。
通过调整序列来规避这个数据相关,在statics窗口中记录其效果。
将此结果与初始的结果进行对比,报告RAW相关的次数减少的数量。
二、Forwarding功能开启
接下来,我们要展示Forwarding功能的优化效果。
首先,我们要知道如何开启Forwarding功能。
法如下:
点开configure下拉窗口,给EnableForwarding选项左侧点上勾。
开启了Forwarding功能之后,我们再运行,查看结果,解释哪些数据相关的问题得到解决,并以截图说明问题解决前后的差异所在。
三、结构相关优化
流水线中的结构相关,指的是流水线中多条指令在同一时钟周期内争用同一功能部件现象。
即因硬件资源满足不了指令重叠执行的要求而发生的冲突。
在WinMIPS64中,我们可以在除法中观察到这种现象。
要消除这种结构相关,我们可以采取调整指令位置的方法进行优化。
在这个部分,我们首先给出几条C代码,然后将该代码翻译成MIPS代码(为了观察的方便,我们这里MIPS代码并不是逐一翻译,而是调整代码,使得其他部分数据相关已经优化,而两条除法指令连续出现),运行并查看结果。
接着,调整代码序列,重新运行。
观察优化效果。
下面是给出的C代码:
a=a/b
c=c/d
e=e+1
f=f+1
g=g+1
h=h+1
i=i+1
j=j+1
根据上述的C代码,我们给出数据相关优化的指令如下:
.data
a:
.word12
b:
.word3
c:
.word15
d:
.word5
e:
.word1
f:
.word2
g:
.word3
h:
.word4
i:
.word5
.text
start:
ldr16,a(r0)
ldr17,b(r0)
ldr18,c(r0)
ldr19,d(r0)
ldr20,e(r0)
ldr21,f(r0)
ldr22,g(r0)
ldr23,h(r0)
ldr24,i(r0)
ddivr16,r16,r17
ddivr18,r18,r19
daddir20,r20,1
daddir21,r21,1
daddir22,r22,1
daddir23,r23,1
daddir24,r24,1
halt
上面的指令运行,在Cycle窗口结果如下(程序运行前请将configure->architecture->divisionlatency改为10):
在Statistics窗口的结果如下:
通过观察,我们可以发现,两个连续的除法产生了明显的结构相关,第二个除法为了等待上一个除法指令在执行阶段所占用的资源,阻塞了9个周期。
显然,这样的连续的除法所导致的结构相关极大的降低了流水线效率,为了消除结构相关,我们需要做的是调整指令序列,将其他无关的指令塞入两条连续的除法指令中。
给出指令序列的调整方案并给出流水线工作状态的截图,做出解释。
四、提交报告
记录实验过程,保存实验截图,给出分析结果,形成实验报告。
初始代码准备(10分),后面每个优化方法各30分。
五、实验结果
1.初始代码准备
将初始代码存为testme.s,如下图所示:
将testme.s文件load到WINMIPS64中
1.1没有调整指令序列和启用forwarding的结果,共产生了220个RAWStalls
1.2通过对代码的观察,可以找到几处产生了代码相关。
如下所示:
①
②
③
④
其中①②处均为r8被使用,第③处中r17左移两位后存入r8,而后r8被使用后再放回r8,然后再次被使用,这其中便有几处数据相关。
第④处r9,r10装载后相加放入r12,其中相加时候需从两个寄存器中取值,造成阻塞,而相加后的r12存回r11,此处又是数据相关。
调整后的③④指令:
1.3调整后RAWStalls为156个,比未调整时少了64个
2.1启用forwarding之后RAWStalls只剩26个
2.2通过观察cycle窗口,可以观察到差别(红框标出)
即通过启用forwarding,①②两个地方从两个RAW相关减少到一个,而③④中在调整指令序列后,原先还有一个RAW相关,如今也全都没有了。
1
②
2
④
3调整的主要为r20,r21,r22,r23和r24的装载以及加法。
之所以不调整r16,r17和r18,r19,是因为后面的出发会用到r16,为避免结构相关,故保留两条指令,其余的塞到两个除法中间,使得两个除法因结构相关产生的阻塞降到最低。
调整后的代码如下:
下面四张截图中,头两张为未调整指令序列的,最后两张为调整了指令序列后的。
六、实验总结与体会
虽然一开始对流水线的概念不是很清楚,但是通过这个实验,我了解了MIPS的五级流水线,和在运行过程中的所产生的各种不同的流水线冒险并且学会了通过指令顺序调整,或旁路与预测技术来提高流水线效率,同时也更加了解了流水线细节和其指令的改善方法以及对MIPS指令的使用愈加地熟悉。
指导教师批阅意见:
成绩评定:
指导教师签字:
年月日
备注:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 处理器 结构