计算机系统结构MIPS流水线

题目

其中: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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++模板编程浅析

函数模板 声明与定义函数模板 #include <iostream> using namespace std; template <class T> void swap_new(T& a, T& b);int main() {int a 1, b 2;float c 1.5, d 3.6;swap_new(a, b);swap_new(c, d);cout << a << " " &…

Redis HyperLogLog 数据结构模型统计

HyperLogLog HyperLogLog 不是一种新的数据结构 &#xff0c; 本质上是字符串类型。 是一种基数算法。 通过 HyperLogLog 可以节省内存空间&#xff0c;并完成独立总数的统计。 HyperLogLog 数据结构可用于仅使用少量恒定内存来计算集合中的唯一元素&#xff0c;具体而言&…

Centos硬盘操作合集

一、硬盘命令说明 lsblk 列出系统上的所有磁盘列表 查看磁盘列表 参数意义 blkid 列出硬盘UUID [rootzs ~]# blkid /dev/sda1: UUID"77dcd110-dad6-45b8-97d4-fa592dc56d07" TYPE"xfs" /dev/sda2: UUID"oDT0oD-LCIJ-Xh7r-lBfd-axLD-DRiN-Twa…

【coco】掩膜mask影像转coco格式txt(含python代码)

最近在做实例分割&#xff0c;遇到二值掩膜影像——coco格式txt的实例分割转换问题&#xff0c;困扰很久&#xff0c;不知道怎么转换&#xff0c;转出来的txt没法用代码成功读取。一系列问题&#xff0c;索性记录下自己的结局路程&#xff0c;方便大家python代码自取。 目录 &…

Python开发运维:Python调用K8S API实现资源管理

目录 一、实验 1.Python操作K8S API获取资源 2.Python操作K8S API创建deployment资源 3.Python操作K8S API删除k8s资源 4.Python操作K8S API修改k8s资源 5.Python操作K8S API查看k8s资源 二、问题 1.Windows11安装kubernetes报错 2.Python通过调用哪些方法实现Pod和De…

C4D云渲染怎么提升速度小技巧?C4D云渲染速度提升技巧

当许多C4D用户转向云渲染时&#xff0c;他们常常会发现渲染速度并没有预期中的提升&#xff0c;这让人产生疑问&#xff0c;为什么使用云渲染服务后&#xff0c;渲染时间依然没有显著缩短&#xff0c;C4D云渲染情况取决于多个因素&#xff0c;如&#xff1a;渲染任务特点以及所…

图的搜索(二):贝尔曼-福特算法、狄克斯特拉算法和A*算法

图的搜索&#xff08;二&#xff09;&#xff1a;贝尔曼-福特算法、狄克斯特拉算法和A*算法 贝尔曼-福特算法 贝尔曼-福特&#xff08;Bellman-Ford&#xff09;算法是一种在图中求解最短路径问题的算法。最短路径问题就是在加权图指定了起点和终点的前提下&#xff0c;寻找从…

代码上传的gitee平台

1.首先我们访问工作台 - Gitee.com进行注册和登录 2.我们创建一个仓库&#xff1a; 3.在本地创建我们的项目 在这文件夹里面我们打开git bush,执行 一下操作&#xff1a; git init &#xff1a;初始化仓库 git status&#xff1a;检查状态 git add . &#xff1a;将当前文件…

【wimdows电脑上管理员账户与管理员身份的区别】

管理员账户 在控制面板的用户账户中&#xff0c;点击更改账户类型&#xff0c;可以看到目前的账户是“管理员账户”还是“标准账户”。 管理员身份 在快捷方式上右击&#xff0c;可以看到&#xff0c;可以选择以管理员身份运行该软件。 如何查看某个应用是否以管理员身份…

6.Jetson Orin Nano 系统在NVME SSD上备份与恢复

Jetson Orin Nano 系统在NVME SSD上备份与恢复 刚开始我也参考其它博主写的系统备份与恢复&#xff0c;由于我Jetson 的系统盘是1t的&#xff0c;用dd命令拷贝的到另外一个1t的硬盘里面时&#xff0c;总会出现硬盘空间不足的情况出现。只能从小硬盘容量往大硬盘容量拷贝&#…

单通道led线性驱动芯片推荐:SM2082EGS

单通道LED线性驱动芯片是一种用于控制LED灯的芯片&#xff0c;它能够提供恒定的电流输出&#xff0c;从而实现LED灯的稳定亮度调节。这种芯片主要由输入端、控制电路、放大器和输出端构成&#xff0c;通过控制输入端的电压和信号来调节LED的亮度。 单通道led线性驱动芯片推荐&a…

JAVA:乘除窗体的实现

目录 题目要求&#xff1a; 窗口的实现&#xff1a; try 和 catch 的用法&#xff1a; 思路大意&#xff1a; 关键代码的实现&#xff1a; 题目要求&#xff1a; 使用 try 和catch 方法完成乘法除法的异常处理和窗体的实现&#xff0c;如下图所示&#xff1a; 窗口的实…

国际著名书画艺术家敖特:连续三届荣获世界美术大赛金奖

敖特 敖特是一位备受国际认可的蒙古族书画艺术家&#xff0c;以其卓越的才华和杰出的艺术成就而脱颖而出。他的艺术简历显示了他在国内外艺术大赛中多次荣获金奖&#xff0c;并获得了白俄罗斯、俄罗斯等国的最高艺术成就奖项&#xff0c;进一步证明了他在国际艺术界的卓越地位…

MidJourney笔记(7)-Seeds

我相信很多人在使用MidJourney的时候,都会遇到一个问题,就是如何保持生成图像的一致性,或者相对一致性,差异性不是很大。此时,我们就需要引入一个seed值,类似给这个提示词生成的图片做一个id标识。 那这个seed值怎么使用? 其实,在我们每次生成的图片,都有有一个seed值…

【Spring教程27】Spring框架实战:一文教你轻松掌握PostMan工具的安装与使用技巧!轻松搞定API测试!!!

目录 1 PostMan简介2 PostMan安装3 PostMan使用3.1 创建WorkSpace工作空间3.2 发送请求3.3 保存当前请求 4 发送步骤总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博…

【C语言:文件操作】

文章目录 1. 什么是文件1.1为什么有文件&#xff1f;1.2什么是文件1.3文件的分类1.4文件缓冲区 2.文件的打开与关闭2.1文件的打开(fopen)2.2文件的关闭(fclose) 3.顺序读写数据文件3.1读写字符3.2读写字符串3.3格式化读写3.4二进制读写 4.文件的随机读写4.1fseek4.2ftell4.3rew…

【docker】镜像使用(Nginx 示例)

查看本地镜像列表 docker images删除本地镜像 # docker rmi [容器 ID]docker rmi a6bd71f48f68 查找镜像 docker search nginx 参数介绍 NAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否 docker 官方发布STARS: 点赞、喜欢AUTOMATED: 自动构建。 拉去镜像 …

shopify商城开发 引用谷歌字体库 fonts.google.com

引用谷歌字体库 https://fonts.google.com/ <link rel"preconnect" href"https://fonts.googleapis.com"> <link rel"preconnect" href"https://fonts.gstatic.com" crossorigin> <link href"https://fonts.goo…

C语言——K /C语言内存函数

一、memcpy 使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数 memcpy 从 source 的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果source和destination有…

了解一下DHCP

DHCP的工作原理 本质&#xff1a; 1、物理网卡自身集成了DHCP的功能&#xff0c;为了请求获取合法、可用的IP 2、DHCP服务端核心功能在于&#xff1a;通过自定义的网段的地址池&#xff0c;来给与新加入的网络环境的设备以租约的方式分配合法IP 1.什么是DHCP 1.1DHCP定义 …