指令调度和延迟分支
1.启动MIPSsim
2.根据预备知识中关于流水线各段操作的描述,进一步理解流水线中各段的功能,掌握各流水线的含义(用鼠标双击各段,就可以看到各流水寄存器的内容)
3.勾选配置菜单中的“流水方式”,使模拟器工作于流水方式下
4.用指令调度技术解决流水线中结构冲突和数据冲突
a) 启动MIPSsim
b) 通过“配置”菜单中的“常规配置”项把加法、乘法、除法部件的个数设置为两个,把他们的延迟时间都设置为3个时钟周期
c) 用MIPSsim的“文件”菜单中的“载入程序”来加载schedule.s(在模拟器文件夹下的“样例程序”中)
d) 关闭定向功能
e) 执行所载入的程序,通过查看统计数据和时钟周期图,找出并记录程序执行过程中各种冲突发生的次数、发生冲突的指令组合,以及程序执行的总时钟周期数:33个
答:各种冲突发生的次数:
RAW停顿: 16 ,占周期总数的百分比: 48.48485% ,其中load停顿: 6 ,占所有RAW停顿的百分比: 37.5%
自陷停顿: 1 ,占周期总数的百分比: 3.030303%
停顿周期总数: 17 ,占周期总数的百分比: 51.51515%
发生冲突的指令组合:
LW
r
2
,
0
(
r2,0(
r2,0(r1) 和 ADD
r
4
,
r4,
r4,r0,$r2
ADD
r
4
,
r4,
r4,r0,$r2 和 SW
r
4
,
0
(
r4,0(
r4,0(r1)
SW
r
4
,
0
(
r4,0(
r4,0(r1) 和 LW
r
6
,
4
(
r6,4(
r6,4(r1)
ADD
r
8
,
r8,
r8,r6,$r1 和 MUL
r
12
,
r12,
r12,r10,$r1
ADD
r
16
,
r16,
r16,r12,$r1 和 ADD
r
18
,
r18,
r18,r16,$r1
ADD
r
18
,
r18,
r18,r16,$r1 和 SW
r
18
,
16
(
r18,16(
r18,16(r1)
SW
r
18
,
16
(
r18,16(
r18,16(r1) 和 LW
r
20
,
8
(
r20,8(
r20,8(r1)
MUL
r
22
,
r22,
r22,r20,$r14 和 MUL
r
24
,
r24,
r24,r26,$r14
f) 采用指令调度技术对程序进行指令调度,消除冲突。将调度后的程序放到afterschedule.s中
g) 载入afterschedule.s
afterschedule.s指令代码如下:
ADDIU
r
1
,
r1,
r1,r0,A
MUL
r
22
,
r22,
r22,r20,$r14
LW
r
2
,
0
(
r2,0(
r2,0(r1)
MUL
r
24
,
r24,
r24,r26,$r14
ADD
r
4
,
r4,
r4,r0,$r2
LW
r
6
,
4
(
r6,4(
r6,4(r1)
SW
r
4
,
0
(
r4,0(
r4,0(r1)
ADD
r
8
,
r8,
r8,r6,$r1
MUL
r
12
,
r12,
r12,r10,$r1
ADD
r
18
,
r18,
r18,r16,$r1
ADD
r
16
,
r16,
r16,r12,$r1
SW
r
18
,
16
(
r18,16(
r18,16(r1)
LW
r
20
,
8
(
r20,8(
r20,8(r1)
TEQ
r
0
,
r0,
r0,r0
h) 执行该程序,观察程序在流水线中的执行情况,记录程序的总时钟周期数为 21 ,
ID段执行了 15 条指令。
i) 根据记录结果,比较调度前和调度后的性能。论述指令调度对于提高CPU的作用
答:调度前的执行周期为 33 ,调度后的执行周期数为 21 。指令调度可以消除部分的数据冲突,通过使用指令调度提高了CPU的使用率,大大减少了指令冲突的次数,提高了CPU性能。
5.用延迟分支减少分支指令对性能的影响
a) 启动MIPSsim
b) 载入branch.asm
c) 关闭延迟分支功能。这是通过在“配置”菜单中去选“延迟分支”来实现的
d) 执行该程序,观察并记录发生分支延迟的时刻,保存下其时钟周期图
答:分支延迟的时刻为:Cycle
时钟周期图如下:
e) 记录执行该程序所花的时钟周期数: 38
假设延迟槽为一个,对branch.asm进行指令调度,然后存到delay-branch.s中
delay-branch.s的指令代码:
ADDI
r
2
,
r2,
r2,r0,1024
ADD
r
3
,
r3,
r3,r0,$r0
ADDI
r
4
,
r4,
r4,r0,8
LW
r
1
,
0
(
r1,0(
r1,0(r2)
ADDI
r
3
,
r3,
r3,r3,4
ADDI
r
1
,
r1,
r1,r1,1
SUB
r
5
,
r5,
r5,r4,$r3
SW
r
1
,
0
(
r1,0(
r1,0(r2)
BGTZ $r5,loop
ADD
r
7
,
r7,
r7,r0,$r6
TEQ
r
0
,
r0,
r0,r0
f) 载入delayed-branch.asm
g) 打开延迟分支功能
h) 执行该程序,观察其时钟周期图,保存下其时钟周期图
i) 对比上述两种情况下的时钟周期图
j) 根据记录结果,比较没有采用延迟分支的性能和采用了延迟分支的性能。论述延迟分支对于提高CPU性能的作用
答:比较两种情况的时钟周期总数,可知:
在使用延迟槽后, 指令在运行到跳转bgezal指令,在期望概率上很大部分可能不会出现延迟等待,能够稍微提高CPU性能,本实验跳转指令过少,在跳转指令过多的情况下更为明显 。