当前位置: 首页 > news >正文

实验三:指令调度和延迟分支

一、实验目的

  1. 加深对指令调度技术的理解。
  2. 加深对延迟分支技术的理解。
  3. 熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。
  4. 进一步理解指令调度技术对CPU性能的改进。
  5. 进一步理解延迟分支技术对CPU性能的改进。

二、实验内容和步骤
首先要掌握MIPSsim模拟器的使用方法。见文档《MIPSsim使用手册》。

  1. 启动MIPSsim。
  2. 根据2.5节的相关知识中关于流水线各段操作的描述,进一步理解流水线窗口中各段的功能,掌握各流水寄存器的含义(双击各段,就可以看到各流水寄存器的内容)。
  3. 选择“配置”→“流水方式”选项,使模拟器工作于流水方式下。
  4. 用指令调度技术解决流水线中的结构冲突与数据冲突。
    (1)启动MIPSsim。
    (2)用MIPSsim的“文件”→“载入程序”选项来加载schedule.asm(在模拟器所在文件夹下的“样例程序”文件夹中)。
    (3)关闭定向功能。这是通过在“配置”菜单中关闭“定向”(使该项前面没有“√”号)来实现的。
    (4)执行所载入的程序。通过查看统计数据和时钟周期图,找出并记录程序执行过程中各种冲突发生的次数、发生冲突的指令组合,以及程序执行的总时钟周期数。
 执行周期总数:33RAW停顿: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)执行该程序,观察程序在流水线中的执行情况,记录程序执行的总时钟周期数;

执行周期总数:21ID段执行了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倍。
  1. 用延迟分支减少分支指令对性能的影响。
    (1)启动MIPSsim。
    (2)载入branch.asm。
    (3)关闭延迟分支功能。这是通过在“配置”→“延迟槽”选项来实现的。
    (4)执行该程序。观察并记录发生分支延迟的时刻
分支延迟发生的时刻:6913212428

(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的性能。
http://www.lryc.cn/news/261761.html

相关文章:

  • 【Oracle】PL/SQL语法、存储过程,触发器
  • 2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序
  • 保姆级 Keras 实现 YOLO v3 三
  • HPM6750系列--第十篇 时钟系统
  • 【简单总结】中断类型号 中断向量 中断入口地址
  • 【Python百宝箱】从传感器到云端:深度解析Python在物联网中的多面应用
  • weston 1: 编译与运行傻瓜教程(补充)
  • 微服务保护--线程隔离(舱壁模式)
  • 集群监控Zabbix和Prometheus
  • K8S(七)—污点、容忍
  • 新视野大学英语1 词组 12.17
  • springboot实战项目之使用AOP技术实现各种角色的鉴权功能
  • 华为配置基本QinQ示例
  • 【漏洞复现】系列集合
  • TCP报文头(首部)详解
  • 第4章-第1节-初识Java的数组
  • 大数据技术10:Flink从入门到精通
  • IDEA中工具条中的debug按钮不能用了显示灰色
  • 【MySQL内置函数】
  • C++相关闲碎记录(14)
  • 18、vue3(十八):菜单权限,按钮权限,打包,发布nginx
  • 04 在Vue3中使用setup语法糖
  • vite+ts——user.ts——ts接口定义+axios请求的写法
  • 环境搭建及源码运行_java环境搭建_mysql安装
  • Android camera的metadata
  • ElasticSearch面试题
  • C++ 数据结构知识点合集-C/C++ 数组允许定义可存储相同类型数据项的变量-供大家学习研究参考
  • 【机器学习】5分钟掌握机器学习算法线上部署方法
  • Vue3-21-组件-子组件给父组件发送事件
  • [密码学]AES