logo资料库

北邮计算机系统结构实验4.doc

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
课程名称: 实验名称: 班 姓 学 日 级: 名: 号: 期: 计算机系统结构 代码优化实验 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 软件,实验过程中,我感觉一个最重要 的步骤就是分析相关性。如果没有分析好相关性,是不知道从什么地方下手优化代码 的。代码优化所提高的效率时十分明显的,所以以后要注重对代码优化的一些问题的 研究,这样会对整个程序效率的提高有很大的保证。
分享到:
收藏