计算机系统结构MIPS流水线

news2024/9/22 13:34:17

题目

其中:R3的初值是R2+396。假设:在整个代码序列的运行过程中,所有的存储器访问都是命中的,并且在一个时钟周期中对同一个寄存器的读操作和写操作可以通过寄存器文件“定向”。问:

(1)在没有任何其它定向(或旁路)硬件的支持下,请画出该指令序列执行的流水线时空图。假设采用排空流水线的策略处理分支指令,且所有的存储器访问都命中Cache,那么执行上述循环需要多少个时钟周期?

(2)假设该流水线有正常的定向路径,请画出该指令序列执行的流水线时空图。假设采用预测分支失败的策略处理分支指令,且所有的存储器访问都命中Cache,那么执行上述循环需要多少个时钟周期?

(3)假设该流水线有正常的定向路径和一个单周期延迟分支,请对该循环中的指令进行调度,你可以重新组织指令的顺序,也可以修改指令的操作数,但是注意不能增加指令的条数。请画出该指令序列执行的流水线时空图,并计算执行上述循环所需要的时钟周期数。 

汇编代码解释

LW R1, 0(R2) ; 从地址 R2 偏移 0 处加载一个字到寄存器 R1

DADDIU R1, R1, #1 ; 将寄存器 R1 的值加上常数 1

SW R1, 0(R2) ; 将寄存器 R1 的值存储到地址 R2 偏移 0 处

DADDIU R2, R2, #4 ; 将寄存器 R2 的值加上常数 4,并将结果保存回寄存器 R2

DSUB R4, R3, R2 ; 将寄存器 R3 的值减去寄存器 R2 的值,并将结果保存到寄存器 R4 BNEZ R4, LOOP ; 如果寄存器 R4 不为零,则跳转到标签 LOOP 处继续执行

数据通路图示

第一问

寄存器读写可以定向,无其他旁路硬件支持,排空流水线

396/4 = 99

总的时钟周期数:(98×17)+18=1684

LW和DADDIU存在数据相关(R1),必须等LW将结果写回通用寄存器,才能进行ID读寄存器R1进行操作,第一条指令的WB阶段和第二条指令的ID阶段可以在同一个时钟周期内同时执行。

因为针对寄存器访问冲突,我们规定用时钟上升沿触发 Write,下降沿触发 Read,从而将这两类冲突完全分开。

其他存在数据相关的指令同理

Q:关于第i条指令的ID阶段和第i+1条指令的IF阶段在同一时钟周期执行

A:第i条指令的ID阶段执行完指令译码操作,第i+1条指令就可以通过PC从指令存储器读取指令放入IR覆盖掉原来的指令了。这样做的目的是为了尽可能充分地利用处理器资源,减少流水线的停顿时间,提高指令的执行效率。

排空流水线分支转移相关补充:

为了能够在每个时钟周期启动一条新的指令,流水线必须在IF段获得下一条指令的地址,并将其保存在PC中。但是,分支指令会改变PC的值,而且只有在Mem段结束时,这个新值才会被写入PC

第二问

有正常定向路径,预测分支失败。

定向技术:用于读后写相关情况

1.将计算结果从产生的地方(ALU出口)送到指令需要的地方(ALU入口)

2.从流水寄存器到功能部件入口(例如WB阶段的寄存器到ID阶段的寄存器)

LW R1, 0(R2) ; 从地址 R2 偏移 0 处加载一个字到寄存器 R1

DADDIU R1, R1, #1 ; 将寄存器 R1 的值加上常数 1

SW R1, 0(R2) ; 将寄存器 R1 的值存储到地址 R2 偏移 0 处

通过定向技术将LW中WB阶段更新后的R1值直接放入DADDIU中EX阶段的ALU入口,同时也可以放入SW中ID阶段供其读取(同上面的WB阶段与ID阶段的寄存器冲突)

预测分支失败:沿着失败路径处理指令(空操作),而实际分支是成功,第一次IF译码出来的是错的PC值,MEM分支转移后的才是正确的PC值 ,按分支目标地址重新获取指令执行

总的时钟周期数:(98×10)+11=991

第三问

有正常定向路径。单周期延迟分支。.

调整后的指令:

LOOP:   LW R1, 0(R2)    // 从地址R2处加载一个字到寄存器R1中
        DADDIU R2, R2, #4    // 将R2的值递增4
        DADDIU R1, R1, #1    // 将R1的值递增1
        DSUB R4, R3, R2    // 计算R4 = R3 - R2
        BNEZ R4, LOOP    // 如果R4不等于零,则跳转到标签LOOP
        SW R1, -4(R2)    // 将R1的值存储到地址(R2-4)中

单周期指令延迟分支:

延迟槽的指令为:SW R1, -4(R2)  

调度分支指令方法为从前调度(延迟槽中指令不影响程序),分支成功就接着循环重新执行一遍,不成功就是空操作,整个程序执行完成

总的时钟周期数:(98×6)+10=598 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1311683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java写个爬虫抓取汽车之家车型配置参数

前几天有个搞工程的表弟找我,问我什么车好,可以经常跑工地的,看上去又有面子。于是我挥动发财的小手,写一个爬虫程序,筛选并整理了一些数据,并附上下载的图片提供参考,看中了果断第二天提车到手…

构造以太网交换网络

VLAN技术,这种技术可以把一个LAN划分成多个逻辑的VLAN,每个VLAN是一个广播域,VLAN内的主机间通信就和在一个LAN内一样,而VLAN间则不能直接互通,这样,广播报文就被限制在一个VLAN内。 二层 vlan 实验 1.路由器固定i…

Monkey工具之fastbot-iOS实践

背景 目前移动端App上线后 crash 率比较高, 尤其在iOS端。我们需要一款Monkey工具测试App的稳定性,更早的发现crash问题并修复。 去年移动开发者大会上有参加 fastbot 的分享,所以很自然的就想到Fastbot工具。 Fastbot-iOS安装配置 准备工…

编译Sqlite3记录

下载源文件: 下载地址:SQLite Download Page 打开QtCreator创建新的工程,选择纯C工程,将main.c删除,将下载的源码解压后的文件复制到并添加到工程中,其中的文件包括:sqlite3ext.h、sqlite3.h、…

阿里云SLS日志服务之数据导入与加工处理

一、背景 采集vm虚拟机上的Log日志文本,如果需要经过特殊的加工处理,在本文主要讲述如何在SLS把kafka采集上来的数据经导入并加工后存储。 二、数据流转图 三、数据导入 服务地址:填写kafka集群的地址数据格式:json字符串&#…

【一起学Rust | 框架篇 | Tauri2.0框架】Tauri App开启远程调试功能

文章目录 前言一、搭建PageSpy环境二、接入SDK三、进行远程调试调试控制台网络抓包审查元素 四、延伸 前言 Tauri在Rust圈内成名已久,凭借Rust的可靠性,使用系统原生的Webview构建更小的App 以及开发人员可以灵活的使用各种前端框架而一战成名。 然而&…

吴恩达《机器学习》12-2-12-3:大边界的直观理解、大边界分类背后的数学

一、大边界的直观理解 1. 大间距分类器的背景 支持向量机的大间距分类器着眼于构建一个能够在正负样本之间划定最大间距的决策边界。为了理解这一点,首先观察支持向量机的代价函数,其中涉及到正负样本的代价函数cos𝑡1(𝑧)和cos…

力扣二叉树--总结篇(2)

前言 总体回顾:11.18-12.14,中间有一个星期左右因为考试没有写题。37道题。 内容 这是第二阶段刷的题 从路径到构造二叉树,合并二叉树,再到二叉搜索树,公共祖先问题 看到二叉树,看到递归 都会想&#…

智慧工地源码(微服务+Java+Springcloud+Vue+MySQL)

智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三…

计算机毕业设计 基于SpringBoot的社区医院信息管理平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

modelbox线程爆满宕机bug

序 该bug的解决需要特别感谢张同学。有了大佬的帮助,这个bug才得以解决。 问题现象 modelbox可以进行模型推理,但压测一段时间后,modelbox会宕机,并发生段错误。 “libgomp: Thread creation failed: Resource temporarily una…

kafka学习笔记--Topic 数据的存储机制

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

Vue 按键修饰符

常用按键修饰符:enter【回车】、delete【删除】、esc【退出】、space【空格】、tab【缩进】、up【上】、down【下】、left【左】、right【右】 。 系统按键修饰符:ctrl、alt、shift、meta【四个小方块】 。 鼠标修饰符:left【左键】、right…

阿里云RDS MySQL 数据如何快速同步到 ClickHouse

云数据库 RDS MySQL 和 云数据库 ClickHouse 是阿里云推出的两个备受欢迎的数据库解决方案,它们为用户提供了可靠的数据存储方案、分析数仓方案,本文介绍如何快速将 RDS MySQL 的数据同步到云数据库 ClickHouse。 如何快速将RDSMySQL的数据同步到云数据库…

系统架构设计师教程(五)软件工程基础知识

软件工程基础知识 5.1 软件工程5.1.1 软件工程定义5.1.2 软件过程模型5.1.3 敏捷模型敏捷开发的特点敏捷方法的核心思想主要敏捷方法简介 5.1.4 统一过程模型 (RUP)RUP的生命周期RUP中的核心概念RUP的特点 5.1.5 软件能力成熟度模型 5.2 需求工程5.2.1 需求获取需求获取的基本步…

常见的设计模式以及实现方法总结

目录 代码中使用的设计模式总结 前言常见的23种设计模式Singleton模式(单例模式)理论Spring中创建的Bean Prototype模式(原型模式)理论Spring中创建的Bean Builder模式(构造器模式)理论Builder实现了构造器…

Tekton 基于 gitlab 触发流水线

Tekton 基于 gitlab 触发流水线 Tekton EventListener 在8080端口监听事件,Gitlab 提交代码产生push 事件,gitlab webhook触发tekton流水线执行。 前置要求: kubernetes集群中已部署 tekton pipeline、tekton triggers以及tekton dashboa…

分布式解决方案与实战

分布式多线程性能调优 使用多线程优化接口 //下单业务public Object order( long userId){long start System.currentTimeMillis();//方法的开始时间戳&#xff08;ms&#xff09;JSONObject orderInfo remoteService.createOrder(userId);Callable<JSONObject> calla…

如何看待「前端已死论」?

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

Xcode编写基于C++的动态连接库(dylib)且用node-ffi-napi测试

创建一个dylib工程示例 在 Xcode 中创建一个动态链接库&#xff08;.dylib 文件&#xff09;的步骤如下&#xff1a; 打开 Xcode&#xff1a; 打开 Xcode 应用程序。 创建新的工程&#xff1a; 选择 "Create a new Xcode project"&#xff0c;或者使用菜单 File &g…