当前位置: 首页 > 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的性能。

相关文章:

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

一、实验目的 加深对指令调度技术的理解。加深对延迟分支技术的理解。熟练掌握用指令调度技术来解决流水线中的数据冲突的方法。进一步理解指令调度技术对CPU性能的改进。进一步理解延迟分支技术对CPU性能的改进。 二、实验内容和步骤 首先要掌握MIPSsim模拟器的使用方法。见…...

【Oracle】PL/SQL语法、存储过程,触发器

一、Oracle数据类型 Orcle数据类型说明类比MySQL数据类型字符型CHAR固定长度的字符类型CHAR字符型VARCHAR2可变长度的字符类型VARCHAR字符型LONG大文本类型,最大2G数值型NUMBER数值类型,整数小数都可以,number(5)表示长度5的整数&#xff0c…...

2020年第九届数学建模国际赛小美赛C题亚马逊野火解题全过程文档及程序

2020年第九届数学建模国际赛小美赛 C题 亚马逊野火 原题再现: 野火是指发生在乡村或荒野地区的可燃植被中的任何不受控制的火灾。这样的环境过程对人类生活有着重大的影响。因此,对这一现象进行建模,特别是对其空间发生和扩展进行建模&…...

保姆级 Keras 实现 YOLO v3 三

保姆级 Keras 实现 YOLO v3 三 一. 分配 anchor box二. 正负样本匹配规则三. 为每一个 anchor box 打标签3.1 anchor box 长什么样?3.2 每一个 anchor box 标签需要填充的信息有哪些?3.3 ( Δ x , Δ y , Δ w , Δ h ) (\Delta x, \Delta y, \Delta w, \Delta h) (Δx,Δy,…...

HPM6750系列--第十篇 时钟系统

一、目的 上一篇中《HPM6750系列--第九篇 GPIO详解(基本操作)》我们讲解了HPM6750 GPIO相关内容,再进一步讲解其他外设功能之前,我们有必要先讲解一下时钟系统。 时钟可以说是微控制器系统中的心脏,外设必须依赖时钟才…...

【简单总结】中断类型号 中断向量 中断入口地址

通过中断类型号可以计算出中断向量的地址。 然后根据该地址可以在中断向量表中取出中断服务程序的入口地址(中断向量)。 而中断向量就是中断服务程序入口地址。 做个不严谨的图: 1:通过中断类型号找到中断向量 2:通…...

【Python百宝箱】从传感器到云端:深度解析Python在物联网中的多面应用

迈向智能未来:Python与物联网生态系统的完美融合 前言 随着物联网技术的不断发展,Python作为一种灵活且强大的编程语言,逐渐成为物联网开发的重要工具之一。本文将深入探讨物联网领域中常用的Python库和框架,涵盖了从轻量级通信…...

weston 1: 编译与运行傻瓜教程(补充)

系统kubuntu23.10 git clone https://gitlab.freedesktop.org/wayland/wayland.git 86588fbdebe7f6ac9363d98f524e4ae14bd4b019 meson build/ --prefix$WLD ninja -C build/ install git clone https://gitlab.freedesktop.org/wayland/wayland-protocols.git c4f559866f13…...

微服务保护--线程隔离(舱壁模式)

一、线程隔离的实现方式 线程隔离有两种方式实现: 线程池隔离 信号量隔离(Sentinel默认采用) 如图: 线程池隔离:给每个服务调用业务分配一个线程池,利用线程池本身实现隔离效果 信号量隔离&#xff1a…...

集群监控Zabbix和Prometheus

文章目录 一、Zabbix入门概述1、Zabbix概述2、Zabbix 基础架构3、Zabbix部署3.1 前提环境准备3.2 安装Zabbix3.3 配置Zabbix3.4 启动停止Zabbix 二、Zabbix的使用与集成1、Zabbix常用术语2、Zabbix实战2.1 创建Host2.2 创建监控项(Items)2.3 创建触发器&…...

K8S(七)—污点、容忍

目录 污点、容忍污点(Taints):容忍(Tolerations):如何一起使用污点和容忍:操作符(Equal、Exists)例子基于污点的驱逐基于节点状态添加污点 污点、容忍 官网地址&#xf…...

新视野大学英语1 词组 12.17

embarrassment和awkwardness的区别以及各自的组词。 "Embarrassment" 和 "awkwardness" 都可以用来描述一种尴尬或不舒服的感觉,但它们有一些微妙的区别。 "Embarrassment" 指的是由于尴尬、困窘或难堪的情况而产生的感觉。 这种感觉…...

springboot实战项目之使用AOP技术实现各种角色的鉴权功能

前言 项目开发需求,会员有不同的角色,不同的角色被赋予不同的权限,这就需要对会员的操作进行鉴权处理。 方案 采用aop,可实现满足这种需求,创建匿名类。对外提供接口的时候都会拦截,这种会有弊端&#x…...

华为配置基本QinQ示例

组网需求 如图1所示,网络中有两个企业,企业1有两个分支,企业2有两个分支。这两个企业的各办公地的企业网都分别和运营商网络中的SwitchA和SwitchB相连,且公网中存在其它厂商设备,其外层VLAN Tag的TPID值为0x9100。 现…...

【漏洞复现】系列集合

该篇文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作 Apache Apache_HTTPD_未知后缀名解析Apache_HTTPD_换行解析(CVE-2017-15715)Apache_HTTPD_多后缀解析Apache_HTTP_2.4.50_路径穿越(CVE-2021-42013)Apache_HTTP_2.4.49_路径穿越(CVE-2021-41…...

TCP报文头(首部)详解

本篇文章基于 RFC 9293: Transmission Control Protocol (TCP) 对TCP报头进行讲解,部分内容会与旧版本有些许区别。 TCP协议传输的数据单元是报文段,一个报文段由TCP首部(报文头)和TCP数据两部分组成,其中TCP首部尤其重…...

第4章-第1节-初识Java的数组

1、数组 属于Java内存层面的一款容器(crud操作)。 概念: 内存中的一块存储区域(空间),内部有一组连续的小区域(元素空间),有数据类型的限定,可以存入一组匹配类型的数据,并且根据需要可以改动元素空间中的数据内…...

大数据技术10:Flink从入门到精通

导语:前期入门Flink时,可以直接编写通过idea编写Flink程序,然后直接运行main方法,无需搭建环境。我碰到许多初次接触Flink的同学,被各种环境搭建、提交作业、复杂概念给劝退了。前期最好的入门方式就是直接上手写代码&…...

IDEA中工具条中的debug按钮不能用了显示灰色

IDEA中工具条中的debug按钮不能用了显示灰色 1. 问题描述 IDEA上的DEBUG按钮突然变成了灰色: 2. 解决办法 一通搜索,终于找到解决办法 点击 File -> Project Structure如下图操作 3. 重启,解决 4. 参考 https://www.cnblogs.com…...

【MySQL内置函数】

目录: 前言一、日期函数获取日期获取时间获取时间戳在日期上增加时间在日期上减去时间计算两个日期相差多少天当前时间案例:留言板 二、字符串函数查看字符串字符集字符串连接查找字符串大小写转换子串提取字符串长度字符串替换字符串比较消除左右空格案…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...