一、实验目的
二、实验内容和步骤
首先要掌握MIPSsim模拟器的使用方法。见文档《MIPSsim使用手册》。
执行周期总数:33
RAW停顿:16 占周期总数的百分比:48.48485%
其中:
load停顿:6 占所有RAW停顿的百分比:37.5%
自陷停顿:1 占周期总数的百分比:3.030303%
停顿周期总数:17 占周期总数的百分比:51.51515%
发生冲突的指令组合:
ADDIU $r1,$r0,56,LW $r2,0($r1)
LW $r2,0($r1) ,ADD $r4,$r0,$r2
ADD $r4,$r0,$r2 ,SW $r4,0($r1)
SW $r4,0($r1) ,LW $r6,4($r1)
LW $r6,4($r1),ADD $r8,$r6,$r1
MUL $r12,$r10,$r1,ADD $r16,$r12,$r1
ADD $r16,$r12,$r1 ,ADD $r18,$r16,$r1
ADD $r18,$r16,$r1 , SW $r18,16($r1)
LW$r20,8($r1),MUL $r22,$r20,$r14
MUL $r22,$r20,$r14 , MUL $r24,$r26,$r14
(5)采用指令调度技术对程序进行指令调度,消除冲突。将调度后的程序保持到 after-schedule.asm中。
(6)载入after-schedule.asm。
.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)执行该程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;
执行周期总数:21
ID段执行了15条指令
硬件配置:
内存容量:4096 B
加法器个数:1 执行时间(周期数):6
乘法器个数:1 执行时间(周期数)7
除法器个数:1 执行时间(周期数)10
定向机制:不采用
停顿(周期数):
RAW停顿:4 占周期总数的百分比:19.04762%
其中:
load停顿:1 占所有RAW停顿的百分比:25%
浮点停顿:0 占所有RAW停顿的百分比:0%
WAW停顿:0 占周期总数的百分比:0%
结构停顿:0 占周期总数的百分比:0%
控制停顿:0 占周期总数的百分比:0%
自陷停顿:1 占周期总数的百分比:4.761905%
停顿周期总数:5 占周期总数的百分比:23.80952%
(8)根据记录结果,比较调度前和调度后的性能。论述指令调度对于提高CPU性能的作用。
指令调度可以消除部分的数据冲突,提高了CPU的使用率,减少了指令冲突的次数,提高了CPU性能,性能提高为调度前的33/21=1.57倍。
分支延迟发生的时刻:6、9、13、21、24、28
(5)记录执行该程序所花的总时钟周期数。
执行周期总数:38
(6)假设延迟槽为一个,对branch.asm进行指令调度,然后保存到“delayed-branch.asm”中。
.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
(7)载入delayed-branch.asm。
(8)打开延迟分支功能。
(9)执行该程序,观察其时钟周期图。
(10)记录执行该程序所花的总时钟周期数。
执行周期总数:26
(11)对比上述两种情况下的时钟周期图。
(12)根据记录结果,比较没采用延迟分支和采用了延迟分支的性能。论述延迟分支对于提高CPU性能的作用。
通过比较两者时钟周期数,可得:在使用延迟槽后,时钟周期数比没有使用延迟槽情况耗费得少。指令在运行到BGEZAL跳转指令时很可能不会出现延迟等待,能够在一定程度上提高CPU的性能。