WinDLX 实验报告
一、实验目的:
1)熟悉计算机流水线基本概念
2)了解 DLX 基本流水线的各段的功能
3) 了解各种不同指令在流水线中的实际流动情况
4) 对流水线做性能分析
5) 了解影响流水线效率的因素——数据相关、结构相关、控制相关,了解相关
的种类
6) 了解解决数据相关的方法
二、实验内容及结果分析:
实验 2
1. 实验内容:
用 WinDLX 运行程序 structure_d.s,通过模拟:
找出存在结构相关的指令对以及导致结构相关的部件;
记录由结构相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百
分比;
论述结构相关对 CPU 性能的影响,讨论解决结构相关的方法。
2.实验结果:
1)Addd f0,f0,f4 指令译码时需要对指令寄存器 IR 进行操作,而同时 addd f2,f0,f2
取指周期需要将指令存到 IR 中,所以发生冲突,冲突部件是指令寄存器 IR。停顿一周期
2)Addd f2,f0,f2 指令译码时需要对指令寄存器 IR 进行操作,而同时 addd r2,r2,
ox8 取指周期需要将指令存到 IR 中,所以发生冲突,冲突部件是指令寄存器 IR。停顿一周
期
3)Addd f2,f0,f2 在执行浮点数运算时占用 ALU 两个周期,addd r2,r2,ox8 执行时
不能使用 ALU,所以发生冲突,冲突部件是 ALU。停顿一周期
4)第二条指令在译码周期需要将 r3 的内容存到 alu 的 A 寄存器中,而此时第一条指令
的执行周期正在占用 A 寄存器,所以发生结构冲突,冲突部件是 ALU,停顿一周期。
5)第一条指令译码时需要对指令寄存器 IR 进行操作,而同时第二条指令取指周期需要将指
令存到 IR 中,所以发生冲突,冲突部件是指令寄存器 IR。停顿一周期
3、实验总结:
由结构相关引起的暂停周期数为:55
总执行周期数为:139
暂停周期数占总执行周期数的百分比:39.6%
4、实验分析:
结构相关会使流水线停顿,降低 cpu 的效率
解决办法Ⅰ: 插入暂停周期(“流水线气泡” )
解决方法Ⅱ: 设置相互独立的指令存储器和数据存储器或设置相互独立的指令 Cache 和数
据 Cache
实验 3
1、实验内容:
在不采用定向技术的情况下(去掉 Configuration 菜单中 Enable Forwarding 选项前的勾选
符),用 WinDLX 运行程序 data_d.s。记录数据相关引起的暂停时钟周期数以及程序执行
的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比。
1)LHI
R2, (A>>16) & 0xFFFF
ADDUI R2, R2, 0x134
Lhi 指令在译码时未完成对 r2 的写回,而 addui 指令在取指阶段需要读取 r2 的数据,
所以发生数据冲突,停顿两周期
2)LHI
R3, 0x0
ADDUI R3, R3, 0x15c
Lhi 指令在译码阶段未完成对 r3 的写操作,addui 在取指阶段需要读取 r3 的数据,所以
发生数据冲突,停顿两周期。
3)LW
ADD
R1, 0 (R2)
R1, R1, R3
LW 指令在译码阶段未完成对 r1 的写操作,add 在取指阶段需要读取 r1 的数据,所以发
生数据冲突,停顿两周期。
4) ADD
SW
R1, R1, R3
0(R2), R1
ADD 指令在译码阶段未完成对 r1 的写操作,SW 在取指阶段需要读取 r1 的数据,所以
发生数据冲突,停顿两周期。
5) LW
ADDI
R5, 0 (R1)
R5, R5, #10
LW 指令在译码阶段未完成对 r5 的写操作,ADDI 在取指阶段需要读取 r5 的数据,所以
发生数据冲突,停顿两周期。
6) ADDI
SUB
R2, R2, #4
R4, R3, R2
ADDI 指令在译码阶段未完成对 r2 的写操作,SUB 在取指阶段需要读取 r2 的数据,所
以发生数据冲突,停顿两周期。
7) SUB
BNEZ
R4, R3, R2
R4, loop
sub 指令在译码阶段没有完成对 r4 的写操作,而 bnez 指令在取指阶段需要读取 r4 中的数据,
所以发生数据冲突,停顿一周期
2、实验总结:
由数据相关引起的暂停周期数为:104
总执行周期数为:202
暂停周期数占总执行周期数的百分比:51.48%
实验 4:
1、实验内容
在采用定向技术的情况下(勾选 Enable Forwarding),用 WinDLX 再次运行程序 data_d.s。
重复上述 2 中的工作,并计算采用定向技术后性能提高的倍数。
1)LW
ADD
R1, 0 (R2)
R1, R1, R3
LW 指令在译码阶段未完成对 r1 的写操作,add 在取指阶段需要读取 r1 的数据,所以发生
数据冲突,停顿两周期。
2)LW
ADDI
R5, 0 (R1)
R5, R5, 0xa
LW 指令在译码阶段未完成对 r5 的写操作,ADDI 在取指阶段需要读取 r5 的数据,所以发
生数据冲突,停顿两周期。
3)SUB
BNEZ
R4, R3, R2
R4, loop
sub 指令在译码阶段没有完成对 r4 的写操作,而 bnez 指令在取指阶段需要用到 r4 中的数据,
所以发生 raw 冲突,停顿一周期
2、实验总结:
由数据相关引起的暂停周期数为:30
总执行周期数为:128
暂停周期数占总执行周期数的百分比:23.44%
采用定向技术后性能提高的倍数为 202/128=1.72 倍。