您的位置:首页 > 理论基础

计算机组成原理之指令调度和延迟分支

2016-06-13 14:01 489 查看
一.实验目的

(1)加深对指令调度技术的理解。

(2)加深对延迟分支技术的理解。

(3)熟练掌握用指令调度技术解决流水线中的数据冲突的方法。

(4)进一步理解指令调度技术对CPU性能的改进。

(5)进一步理解延迟分支技术对CPU性能的改进。

MIPS 360云盘分享https://yunpan.cn/cRLzwTkYc3TEt 访问密码 f9a6

二.实验内容和步骤:

(1)、启动MIPSsim。

(2)、根据前面的相关知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌握各流水寄存器的含义。

(3)、选择“配置”->“流水方式”选项,使模拟器工作于流水方式下。

(4)、用指令调度技术解决流水线中的数据冲突。

1)启动MIPSsim。

2)加载schedule.s。

3)关闭定向功能。

4)执行所载入的程序。通过查看统计数据和时钟周期图,找出并记录程序执行过程中各种冲突发生的次数、发生冲突的指令组合以及程序执行的总时钟周期数。

.text
main:
ADDIU  $r1,$r0,A
LW     $r2,0($r1)

ADD    $r4,$r0,$r2
SW     $r4,0($r1)
LW     $r6,4($r1)
ADD    $r8,$r6,$r1
MUL    $r12,$r10,$r1
ADD    $r16,$r12,$r1
ADD    $r18,$r16,$r1
SW     $r18,16($r1)
LW     $r20,8($r1)

MUL    $r22,$r20,$r14
MUL    $r24,$r26,$r14
TEQ $r0,$r0
.data
A:
.word 4,6,8


第1对指令组合
LW  $r2,0($r1)
ADD $r4,$r0,$r2
第2对指令冲突
ADD $r4,$r0,$r2
SW  $r4,0($r1)
第3对指令冲突
SW  $r4,0($r1)
LW  $r6,4($r1)
第4对指令冲突
ADD $r8,$r6,$r1
MUL $r12,$r10,$r1
第5对指令冲突
ADD $r16,$r12,$r1
ADD $r18,$r16,$r1
第6对指令冲突
ADD $r18,$r16,$r1
SW  $r18,16($r1)
第7对指令冲突
SW $r18,16($r1)
LW $r20,8($r1)
第8对指令冲突
MUL $r22,$r20,$r14
MUL $r24,$r26,$r14




5)采用指令调度技术对程序进行指令调度,消除冲突。将调度后的程序存到after-schedule.s中。

6)载入after-schedule.s。

.text
main:
ADDIU  $r1,$r0,A
MUL    $r22,$r20,$r14
LW     $r2,0($r1)
MUL    $r24,$r26,$r14
ADD    $r4,$r0,$r2
LW     $r6,4($r1)
SW     $r4,0($r1)
ADD    $r8,$r6,$r1
MUL    $r12,$r10,$r1
ADD    $r18,$r16,$r1
ADD    $r16,$r12,$r1
SW     $r18,16($r1)
LW     $r20,8($r1)
TEQ $r0,$r0
.data
A:
.word 4,6,8


7)执行该程序。观察程序在流水线中的执行情况,记录程序执行的总时钟周期数。



8)根据记录结果,比较调度前和调度后的性能。论述指令调度对于提高CPU性能的作用。



<2>:用延迟分支减少分支指令对性能的影响。

1)启动MIPSsim。

2)载入branch.s。

3)关闭延迟分支功能。

4)执行该程序。观察并记录发生分支延迟的时刻。

6 9 13 21 24 28

5)记录执行该程序所用的总时钟周期数。



6)假设延迟槽有1个,对branch.s进行指令调度,然后保存到“delayed-branch.s”中。

没有调度前:

.text
main:
ADDI  $r2,$r0,1024
ADD   $r3,$r0,$r0
ADDI  $r4,$r0,8
loop:
LW    $r1,0($r2)
ADDI  $r1,$r1,1
SW    $r1,0($r2)
ADDI  $r3,$r3,4
SUB   $r5,$r4,$r3
BGTZ  $r5,loop
ADD   $r7,$r0,$r6
TEQ   $r0,$r0


7)载入delayed-branch.s。

.text
main:
ADDI  $r2,$r0,1024
ADD   $r3,$r0,$r0
ADDI  $r4,$r0,8
loop:
LW    $r1,0($r2)
ADDI  $r3,$r3,4
ADDI  $r1,$r1,1
SUB   $r5,$r4,$r3
SW    $r1,0($r2)
BGTZ  $r5,loop
ADD   $r7,$r0,$r6
TEQ   $r0,$r0


8)打开延迟分支功能。

9)执行该程序。观察其时钟周期图。

10)记录执行该程序所用的总时钟周期数。



11)对比上述两种情况下的时钟周期图。

调度前:



调度后



12)根据记录结果,比较没采用延迟分支和采用了延迟分支的性能之间的不同。论述延迟分支对于提高CPU性能的作用。

在没有采用延迟分支之前



采用延迟分支之后



使用延迟槽后,指令在运行到跳转bgezal指令,在期望概率上很大部分可能不会出现延迟等待,能够稍微提高CPU性能,本实验跳转指令过少,在跳转指令过多的情况下更为明显;

三.结果分析

通过本次实验的对比,知道了对于一些代码的调度,可以使得引起的冲突相对减少,在分支实验中,增加了一些延迟槽的延迟技术也可以使得使得cpu效率更加好;在很多跳转指令的代码中,引用这种技术确实可以增加效率;

所以在以后的过程中除了在计算机组成原理之流水线及流水线中的冲突中解决问题之外,我们可以对其进行延迟与调度改进;

四.实验总结

在还没有深研究实验之前,通过计算机组成原理之流水线及流水线认识了数据结构冲突,本课题研究的是调度技术延迟分支技术;当看到代码调度时候,知道了对于一些相互影响不大的代码在逻辑结构不变的情况下可以进行顺序的变动;这样数据冲突、结构冲突会有所减少,并且也提高的cpu的效率;对于一些分支比较多的执行代码中,除了应用调度之外,增加量延迟槽这一技术,使得cpu也有了提高,不过这是针对分支比较多的情况下,分支较小的差距并不是很大;

文档
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: