由此可见,浮点运算部件的增减对效率无影响。比较各个数据,发现没有变化。无论怎么增加浮点运算部件,统计结果都一样。原因在于此程序中浮点计算指令没有重叠,所以并行度没有增加,性能没有提高。
3.考察增加forward部件对性能的影响。
为了对比有无forward部件的性能。需要在Configuration中勾选enable forwarding,以及不勾选enable configuration来看性能数据的对比,不使用forward部件和使用forward部件:
从上面的数据我们可以看出增加forward部件后RAW由原来占总时钟周期的26%减少至18%,RAW个数由原来的13减少至9。增加forward部件使得控制相关比例增加了。即,使用forward部件后,总的时钟周期减少,数据相关减少,流水线的性能得到一定的改善。
4.观察转移指令在转移成功和转移不成功时候的流水线开销。
我们假设,浮点部件设置Count=1,Delay=4;N=6。执行50个cycles完毕后,查看条件转移分支,如下图所示:
由上图可知,转移指令一共2条,成功转移1条(占50%),不成功为1条。所以,静态指令调度算法只能解决数据相关,条件转移结果与原来相比没有变化。即,若转移不成功,对流水线的执行无影响,流水线的吞吐率和效率没有降低;若转移成功,则要废弃预先读入的指令,重新从转移成功处读入指令,执行效率会下降。
·实验总结
通过本次试验,不仅更加熟悉了WinDLX模拟器的使用以及对其基础功能的
6
认识,而且通过单步执行程序,观察三种相关的出现,以及思考出现的原因,是我更加深入了解了流水线。
7
实验三 DLX处理器程序设计
·实验目的:
学习使用DLX汇编语言编程,进一步分析相关现象
·实验原理:
掌握向量运算算法和编程方法。
·实验内容和要求:
自编一段汇编代码,完成两双精度浮点一维向量的加法(或乘除法)运算,并输出结果。向量长度>=16。观察程序中出现的数据/控制/结构相关
·实验步骤:
一.熟悉DLX汇编语言。
(1)汇编器处理汇编文件时,数据位于内存中data指针所指向的空间,指令位于text指针所指向的空间。 (2)Trap 0是通知WINDLX模拟器程序结束,Trap 5是输出格式化到标准输出 二.编写两双精度浮点一维向量的加法运算程序。 代码清单如下: .data
V1: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16
V2: .double 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.1, 11.11, 12.12, 13.13, 14.14, 15.15, 16.16 a: .asciiz \c: .asciiz \ .align 2 d: .word c dizhi: .space 8 .text
.global main main:
addi r1,r0,a
sw dizhi,r1 ;存储字,保存a的首地址 addi r14,r0,dizhi
trap 5 ;输出字符串\ addi r10,r0,0 ;r10 = 0
addi r8,r0,20 ;r8 = 20,即向量的长度 loop:
ld f2,V1(r10) ld f4,V2(r10)
addd f2,f2,f4 ;将V1,V2的相应项依次相加,保存在f2 sd dizhi,f2 ;存储双精度浮点数f2
8
addi r14,r0,d
trap 5 ;输出结果
addi r10,r10,8 ;取V1,V2下一项 subi r8,r8,1 ;循环次数减一
bnez r8,loop ;假如r8!=0,则返回到loop trap 0 ;结束 运行完毕之后出现:
运行结果如下:
1.观察程序中出现的数据/控制/结构相关
本次实验执行过程共出现RAW数据相关80次,控制相关15次,trap54次,共有stall 149次。具体如下: 1)数据相关
2)T-stall
9
3)控制相关
2.考察增加浮点运算部件对性能的影响。 比较浮点运算部件分别为1和2时,
接下来查看Statistis进行比较,如下图
由以上两图可得,本实验增加浮点运算部件对流水线性能没有影响。
10