北邮大三计算机体系结构实验三DLX管理解决方法器程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三DLX处理器程序设计
1.实验目的
学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。
2.实验原理
采用静态调度方法重排指令序列,减少相关,优化程序。
3、实验内容和要求
自编一段汇编代码,完成一维向量加法运算,并输出结果。观察程序中出现的数据/控制/结构相关。(注:使用一维数组表示一维向量。)
4.1向量加法代码清单及注释说明
1、向量加法设计源代码
.data
VectorLength: .word 16
Vector1: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Vector2: .word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 ;声明向量长度以及声明向量1、2 Printf1: .asciiz "Vector ="
Printf2: .asciiz " %f"
.align 2
PrintPrompt: .word Printf1
PrintPar: .word Printf2
Result: .space 4 ;存放打印数据的空间申请
.text
main:
addi r14,r0,PrintPrompt
trap 5
lw r20,VectorLength
addi r2,r0,0
Loop:
ld f10,Vector1(r2)
ld f12,Vector2(r2) ;循环体中读入向量
cvti2d f0,f10
cvti2d f2,f12
addd f4,f2,f0 ;加法运算
Finish:;**** Finish,write result into stdout
sd Result,f4
addi r14,r0,PrintPar
trap 5 ;系统中断,输出结果
addi r2,r2,4
subi r20,r20,1
bnez r20,Loop
;**** End
trap 0
2、运行结果
5.1程序相关性分析结果
(1)观察程序中出现的数据/控制/结构相关。指出程序中出现上述现象的指令组合。
产生34.12%的数据相关。当对当前指令的操作数寄存器进行操作的时候,前几条指令的运算结果还未写回结果寄存器,由此产生数据相关。
没有产生结构相关。
产生3.94%的控制相关。系统按照预测成功来执行指令,执行一条指令后马上将其下一条指令trap读进来。
(2)考察增加浮点运算部件对性能的影响。
1个浮点运算部件3个浮点运算部件
同一段代码执行相同步,但是经过对比发现浮点运算部件的多少对于程序执行效率并没有什么影响,浮点运算部件的多少对统计结果都不造成影响,可能是由于该程序不存在争用浮点运算部件资源的情况
(3)考察增加forward 部件对性能的影响。
不使用forward 部件 使用forward 部件
使用forward 部件之后执行相同的代码用的时钟周期比不使用forward 部件少了 大约100个时钟周期,由于没有结构相关,所以使用forward 部件主要使得RAW 相关明显减少了,占总的时钟周期比例也减少了,对控制相关没有什么影响。 总之,使用forward 部件后,总的时钟周期减少,数据相关减少,流水线的性能得到很大的改善。
(4)观察转移指令在转移成功和转移不成功时候的流水线开销。
在本次实验中转移成功的几率比较大,进行16次转移只有一次转移不成功的,因为系统按照预测成功来执行指令,当判断转移不成功时,系统对trap 指令进行的操作被全部作废,转而去执行跳转到的指令。
4.2双精度浮点加法求和代码清单及注释说明
1、双精度浮点加法求和源代码
.data
;初始化两个用于相加的一维向量(双精度浮点数),向量长度为20
a: .double 1.9, 2.1, 3.7, 4.6, 5.5, 6.4, 7.3, 8.2, 9.1, 10.1, 11.2,12.3,13.4,14.5,15.6,16.7,17.8,18.9,19.0,20.2
b: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.8, 10.9, 11.8,12.7,13.6,14.5,15.4,16.3,17.2,18.1,19.9,20.8
PrintfFormat:.asciiz "The result is \n\n%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t%f\t\n\n"
.align 2
PrintfPar: .word PrintfFormat
r: .space 200
;r为保存相加结果的向量空间
.text
.global main
main:
addi r1,r0,0 ;r1计数相加的次数
addui r4,r0,8 ;r4为常数8
loop: ;循环计算向量相加结果
subi r2,r1,20 ;r1=20时,跳转到finish
beqz r2,finish
multu r3,r1,r4;r3为当前分量相对于向量基址的偏移(每个分量占8B)
ld f0,a(r3) ;取a中第r1个分量
ld f2,b(r3) ;取b中第r1个分量
addd f4,f0,f2 ;相加结果放在f4中
sd r(r3),f4 ;将相加结果放入结果向量r中
addi r1,r1,1 ;下一分量
j loop
finish: ;输出向量相加的结果
addi r14,r0,PrintfPar
trap 5
2、运行结果: