【计算机体系结构实验】指令调度和延迟分支

指令调度和延迟分支

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性能,本实验跳转指令过少,在跳转指令过多的情况下更为明显 。

上一篇:从0开始的ucosii学习(二) 什么是临界区


下一篇:汇编指令-MOV与ldr区别