课程名称:
实验名称:
班
姓
学
日
级:
名:
号:
期:
计算机系统结构
代码优化实验
09211311
heifrank
2012 年 4 月 21 日
一、实验目的:
学习简单编译优化方法,观察采用编译优化方法所带来的性能的提高。
二、实验原理:
采用静态调度方法重排指令序列,减少相关,优化程序
三、 实验核心思想
通过观察实验二中的代码,我们发现程序中主要的几个 stalls 发生的地方为程序
初始化的部分以及进行阶乘计算的过程中。因此我们主要在前一段初始化的代
码上实现优化。
四、 优化程序代码清单及注释说明:
;---------------------------------------------------------------------------------
;*********** coded by heifrank
*************
;---------------------------------------------------------------------
;Program begin at symbol
;requires module INPUT
;read two vectors from stdin and calculate the sum
;(type: double,vectorLength 16)
;the result is written to stdout
;---------------------------------------------------------------------
.data
VectorLength:
Vector1:
Vector2:
.word16
.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
Printf1:
Printf2:
.asciiz
.asciiz
"Vector ="
" %f"
.align2
PrintPrompt:
PrintPar:
.
Result:
.wordPrintf1
word Printf2
.space 4
.text
main:
;**** Print prompt "Vector ="
addi
trap
addi
r14,r0,PrintPrompt
5
r2,r0,0
Loop:
lw
r20,VectorLength
ld
ld
addi
cvti2d
cvti2d
subi
addd
f10,Vector1(r2)
f12,Vector2(r2)
r2,r2,4
f0,f10
f2,f12
r20,r20,1
f4,f2,f0
;**** Finish,write result into stdout
sd
addi
trap
;addi
;subi
bnez
Result,f4
r14,r0,PrintPar
5
r2,r2,4
r20,r20,1
r20,Loop
;**** End
trap
0
四、实验分析:
;add D2=D0+D1
1) 观察成寻中出现的数据/结构/控制相关,指出程序中出现上述现象的指令
组合。
(FORWARD 技术关闭,浮点运算部件各一个,延迟为 4)
Cvti2d
Subi
Addd
Sd
f2,f12
r20,r20,0x1
f4,f2,f0
Result(r0),f4
; RAW 相关
; RAW 相关
和优化之前相比,总花费时钟周期为 348(优化前为 413),总执行指令数为 181(不
变),RAW 相关:97 stalls(优化前为 162 stalls),WAW 相关:0 stall,结构相关:0 stall,
控制相关:15 stalls(不变)。
由此可得出优化后效率提高了约 15.7%。
2)
考察增加浮点运算部件对性能的影响。
(FORWARD 技术关闭,浮点运算部件各两个,延迟为 4)
总花费时钟周期:348(不变),总执行指令数:181(不变),RAW 相关:97 stalls
(不变),WAW 相关:0 stall(不变),结构相关:0 stall(不变),控制相关:15 stalls
(不变)
虽然增加浮点运算器,但系统性能并未提升。究其原因在于程序中不存在结构相关,
所以添加运算部件后不能提升其性能。
3) 考察增加 FORWARD 部件对性能的影响。
(FORWARD 技术打开,浮点运算部件各一个,延迟为 4)
总 花 费 时 钟 周 期 :299 ( 优 化 后 不 使 用 FORWARD 技 术 为 348 , 优 化 前 使 用
FORWARD 技术时结果是 315),总执行指令数:181,RAW 相关:48 stalls(优化后不
使用 FORWARD 技术为 97,优化前使用 FORWARD 技术时结果是 64 stalls),WAW 相
关:0 stall,结构相关:0 stall,控制相关:15 stalls(不变)
再开启 FORWARD 技术之后,RAW 相关大量减少,但是静态代码优化的作用依然
明显,比之前未开启效果要好上约 15.0%,比使用 FORWARD 技术的未优化代码的效
率要提升 5.0%。
4) 观察转移指令在转移成功和转移不成功时候的流水线开销。
(FORWARD 技术关闭,浮点运算部件各一个,延迟为 4)
当转移成功时:
当转移不成功时:
1.若转移成功,则原先读入的指令全部作废,重新从转移成功处读入指令,执行效率低下.
2.若转移不成功,则对流水线的效率没有影响。统计结果转移成功与否各占 50%。
五、实验总结:
这次实验过后,我已经可以熟悉运用 dlx 软件,实验过程中,我感觉一个最重要
的步骤就是分析相关性。如果没有分析好相关性,是不知道从什么地方下手优化代码
的。代码优化所提高的效率时十分明显的,所以以后要注重对代码优化的一些问题的
研究,这样会对整个程序效率的提高有很大的保证。