左图为使用forwading技术的统计结果。 通过对比可以看出,使用forwarding技术之后执行周期少了316-283=33个时钟周期,在这些时钟周期中,forwarding技术主要在于消除了执行过程中的数据相关(由65个中断减少至32个)。因此,代码执行效率改善很多。
5)转移指令在转移成功和转移不成功时候的流水线开销。 由统计结果中的Conditional Branches(如下图)可以看出,
优化前和优化后的Conditional Branches都为上图显示,优化对于转移指令并无影响。
在本代码运行过程中,成功几率为93.75%,在进行一共16次转移中,taken一共15次。分析原因可以知道,预测成功执行指令,当判断转移不成功是,系统
36
对trap指令不再执行,进行跳转。
·实验总结+实习体会
本次试验主要是对上一个实验中的代码进行优化,使我在做实验的过程中掌握了进行代码优化的方法,以及相关性的分析。而相关性分析在我看来是重点,它关系到能否进行优化以及怎么优化。
首先需要分析程序中产生的相关性,代码优化的目的就是减少相关性的发生,提高流水线的效率。通过上述的实验报告和数据对比,可以看到,代码优化我做到了。
实习体会:
其实总的来说这几次试验难度不大,主要还是将课上老师所讲的融入实验当中。其中forwarding技术和预测技术都是课上老师详细讲过的,所以对于实验的理解起来更容易一些。理解之后,通过实验结果的统计数据可以客观的看到这些技术对于流水线性能的影响。这对于我来说收获颇多。
37
实验五 循环展开
·实验目的
进一步学习DLX汇编语言编程方法,学习循环展开编译优化方法,观察采用循环展开编译优化方法所带来的性能的提高。
·实验环境
Win XP操作系统 DLX汇编语言环境
·实验原理
对循环程序采用循环展开(loop unrolling)方法进行优化,减少相关。
·实验步骤
1.编写矩阵相乘程序
2.重复实验二中(1)(2)(3)(4)工作。 3.使用循环展开手工优化程序
4.对优化程序,重复实验二中(2)工作。
5.对优化程序,将浮点部件的延迟改为8个时钟周期,再重复实验二中(2)工作。观察实验现象并分析原因。
6. 比较Intel X86汇编语言程序与DLX汇编语言程序的风格的不同。
·实验过程
矩阵乘程序代码清单及注释说明 1)输入部分声明
2)输出部分声明
38
3)初始化矩阵A和矩阵B,包括初始化他们的行数、列数(因为是矩阵相乘,A的列数=B的行数;并且要将A元素个数保存下来)。并最终指向A的首地址。
4)循环嵌套,读入矩阵A的元素值。
5)接下来,需要读出A元素,并指向A首地址。
6)对矩阵A做行数变换
39
7)对矩阵B做变换
40