计算机组成与设计04——处理器
系列文章目录
本系列博客重点在深圳大学计算机系统(3)课程的核心内容梳理,参考书目《计算机组成与设计》(有问题欢迎在评论区讨论指出,或直接私信联系我)。
第一章 计算机组成与设计01——计算机概要与技术_@李忆如的博客-CSDN博客
第二章 计算机组成与设计02——指令:计算机的语言_@李忆如的博客-CSDN博客
第三章 计算机组成与设计03——计算机的算术运算_@李忆如的博客-CSDN博客
第四章 计算机组成与设计04——处理器
梗概
本篇博客主要介绍深入计算机组成与设计第四章处理器的相关知识。
一、引言
1.计算机性能因素
计算机性能因素与其决定因素如下:
2.基本的MIPS实现(指令部分)
一个基本的MIPS的实现方式如下:
指令的执行步骤如下:
3.CPU 抽象视图
算术逻辑指令、存储访问指令、分支指令的CPU抽象视图分别如下:
Tips:某个操作的数有多个来源时,需要加入复选器调整视图(如bne、lw、sw)
4.MIPS子集的基本实现
加入后一个MIPS子集的基本实现如下,包含控制信号与复选器。
二、逻辑设计基础
1.组合单元
2.时钟方法
三、数据通路的建立
数据通路:CPU中处理数据和地址的单元部件 Registers ALUs Mux’s Memories …
数据通路部件(datapath element):一个用来操作或保存处理器中数据的单元
程序计数器PC:存放下一条指令地址的寄存器
1.R型指令
2.存取指令
Tips:符号扩展不能漏(为增加数据项长度,将原数据项最高位复制到新数据项多出来的高位)。
3.分支指令
Tips:beq需要左移两位,MIPS中连续字的地址相差4,且字的起始地址为4的倍数(一个地址为8位,即一个字节,一个字有4个字节)。所以,需要将offset_value左移2位,使其表示为字的地址,确保其能正确跳转到正确地址。
4.简单的数据通路(R型/存取)
初步的数据通路在1个时钟周期内完成指令
每个数据通路部件在一个时钟周期内只能处理一条指令 因此需要独立的数据和指令存储器
当不同指令的数据来源不同时,需要使用多选器
5.完整的数据通路(单周期)
Tips:数据通路必须有独立的指令存储器和数据存储器,因为处理器在一个周期内只能操作每个部件一次,而在一个周期内不可能对一个单端口存储器进行两次存取。
四、简单的实现机制
核心:以MIPS核心指令子集为目标,为数据通路设计控制单元
核心指令: lw, sw, beq, add, sub, and, or, slt, j
1.ALU控制信号
设计单元表示真值表如下:
2.主控单元设计
Tips:增加了指令判断的复选器与ALU控制单元,并标识出了所有控制信号。
控制信号及其含义如下:
加入控制单元后的简单数据通路如下:
各类指令的控制信号如下:
五、流水线概述
单周期处理器缺点:无法应对不同指令路径(处理时间)长短的差异,最慢的路径决定时钟周期,不符合“加快经常性实事件”设计原则。
0.MIPS指令流水
IF: 从内存中取指令
ID: 指令解码& 读寄存器
EX: 执行运算或计算地址
MEM: 访问内存操作
WB: 将结果写回寄存器
Tips:流水线每一步的流水线周期(Tc)一致,取决于最慢处理步骤。
1.流水线的性能
对上述例题(lw)进行分析,性能对比如下:
2.流水线的加速比及分析
流水线vs单周期如下:
流水线vs多周期指令如下:
流水线分析:n个段(以5为例)构成了一个指令流水线,一条指令经过每个段
CPI(平均执行周期数)减少到1,平均每个时钟周期发射或完成一条指令
在任意时钟周期,在每个流水段正执行一条指令的一部分
3.流水线冒险
冒险现象:下一周期不能按时执行下一条指令
①结构冒险(结构相关):所需的部件忙,暂不可用
②数据冒险(数据相关):需要前面某条指令的计算结果,用于本次计算输入
③控制冒险(控制相关):需要根据前面某条指令的结果来确定分支的选择执行
3.1 结构冒险
定义:缺乏硬件支持导致指令不能在预定的时钟周期内执行的情况
以data access与instruction fecth的冒险为例:
Tips:因此,流水实现的MIPS中指令和数据内存必须是分离独立的 两个独立的L1 cache
3.2 数据冒险
定义:一条指令依赖于前面某条执行的计算结果,缺少指令执行所需数据而导致指令无法在预期的时钟周期内执行。
解决方法如下:
(1)前推
(2)前推+停顿
3.3 数据冒险样例
Tips:时钟周期即横轴数,本题为13个。
调整后指令如下(减少时钟周期):
3.4 控制冒险
定义:取到的指令不是所需要的(地址变化不是预期)而导致指令不能在预定的时钟周期内执行。
出现原因:决策依赖于一条指令的结果,而其他指令正在执行中(例:下一条指令IF阶段时,分支指令仍在 ID阶段)。
解决控制冒险的方法如下:
(1)阻塞
在分支指令后立即阻塞流水线,避免地址未被计算,样例如下:
分析:在较长流水线中,往往不能在第二级完成分支决策,停顿会带来更大的速度下降。
(2)预测
根据“通过预测提高性能”的设计原则对分支地址进行预测预测,预测错误才需要阻塞。
Ⅰ、恒预测不跳转
一种简单的预测方法就是总预测分支未发生(不跳转),样例如图:
Ⅱ、静态分支预测
一种更成熟的分支预测是基于典型的行为,预测一些分支发生而预测另一些分支不发生,样例如下:
Tips:这种分支预测依赖始终不变的行为,没有考虑特定分支指令的特点。
Ⅲ、动态硬件预测
定义:预测取决于每一步分支的行为,并且在整个程序的生命周期内可能改变分支的预测结果。
实现:保存每次分支的历史记录,利用历史记录来预测。
Tips:较长的流水线会恶化预测的性能(各种方法),并提高错误预测的概率。
3.5 流水线冒险样例
六、MIPS流水化的数据通路
在单时钟周期中,流水线最多五条指令,因此要把之前的数据通路分为五部分,如图:
图中从左到右的指令流中有两个例外:
(1)写回阶段是写回数据通路中间的寄存器(可能导致数据冒险)
(2)选择PC的下一个值的时候,在自增PC与MEM的分支地址间进行选择(可能导致控制冒险)
1.流水线寄存器
通过增加保存中间数据(记录前一时钟周期产生的结果)的寄存器,使得指令过程中可以共享部分数据通路,故需要流水线寄存器,确保一条数据通路实现流水线,加入流水线寄存器如图所示:
Tips:流水线寄存器宽度要足够大(64、128、97、64)
补充:每条指令都会更新PC,PC可以看作是一个流水线寄存器:给IF级提供数据,发生异常时必须保存它的内容。
2.流水线工作方式
以lw与sw为例介绍流水线的工作方式与数据通路实现,红圈为数据传输与存储,供之后的指令使用,如图所示:
2.1 lw/sw指令的流水操作——IF
2.2 lw/sw指令的流水操作——ID
Tips:由于处理器并不知道当前是哪一条指令在被译码,因此它把符号扩展后的常量及两个寄存器的值都读入ID/EX寄存器中,简化控制。
2.3 lw指令的流水操作——EX
2.4 lw指令的流水操作——MEM
2.5 lw指令的流水操作—— WB
其中,写回寄存器的值是IF/ID流水线寄存器(之前lw的目标寄存器没保存)提供的,但现在的指令是lw后的指令,故写回寄存器的值有问题,需要修正,如图所示:
2.6 sw指令的流水操作——EX
Tips:只有在Sw中才将第二个寄存器的数据写入EX/MEM寄存器。
2.7 sw指令的流水操作—— MEM
2.8 sw指令的流水操作—— WB
3.流水线图形化
3.1 多时钟周期流水线图
多时钟周期流水线图简单但不包括所有细节,构成了资源(部件)的使用情况图。样例如图所示:
Tips:上图描述的是每个步骤使用的物理资源
3.2 传统图示
3.3 单时钟周期流水线图
单时钟周期流水线图表示的是一个时钟周期内整个数据通路的状态,样例如图:
3.4 流水线性能与时钟周期回顾
3.5 流水线例题
Ⅰ、几个学生在讨论五级流水线的效率问题。有一个学生指出并非所有流水级中的指令都是活动的。在忽略冒险的情况下,他们做出了以下几个断言,其中哪一个是正确的?
1)允许跳转、分支、ALU指令使用比5级(装载指令需要的级数)更少的级数将在所有情况下增加流水线的性能。
错误,由2)解释。
2)允许一些指令使用更少的级数并不能提高性能,因为吞吐率(单位时间流出的指令数)是由时钟周期决定的。每条指令所需的流水线级数仅影响它的延迟时间,而不影响吞吐率。
正确
3)不可能减少ALU指令所需的时钟周期数,因为他们需要写回结果。不过分支和跳转指令是可以减少时钟周期数的,因此存在改善性能的机会。
错误
4)相对于尝试减少指令所需的时钟周期数,我们可以延长流水线的级数,虽然每条指令花费更多的时钟周期数,但时钟周期的长度变短了,这样才能提高性能(吞吐率 = 单位时间 / 时钟周期的长度)。
正确
Ⅱ、流水线对时钟周期的影响
1.流水线处理器与非流水线处理器的时钟周期分别是多少?
流水线处理器时钟周期取决于最慢的流水线级:350ps
非流水线时钟周期为一条指令(单周期):1250ps
2.lw指令在流水线处理器和非流水线处理器中的总延迟分别是多少?
流水线总延迟:max (250, 350, 150, 300, 200) * 5 = 350ps * 5 = 1750ps
非流水线:250 + 350 + 150 + 300 + 200 = 1250ps
3.如果可以将原流水线数据通路的一级划分为两级,每级的延迟是原级的一半,那么你会选哪一级进行划分?划分后的时钟周期是多少?
选择最长的一级划分,即ID
划分后时钟周期为:300ps
4.假设没有阻塞和冒险,数据存储器的利用率是多少(占总周期数的百分比)?
lw与sw使用数据存储器,故利用率为20+15=35%
5.假设没有阻塞和冒险,寄存器堆的写寄存器端口的利用率是多少?
alu与lw使用写寄存器端口,故利用率为45+20=65%
6.假设一种多周期的处理器设计,其中每条指令需要多个时钟周期完成。但上一条指令完成前不取下一条指令。在这种设计中,指令仅经过其所需的阶段(例如,存储指令仅需4个时钟周期,因为其不需要WB阶段)。比较单周期设计、多周期设计和流水线设计三者的时钟周期和总执行时间。
Tips:beq因为branch在mem中,所以有控制信号,无WB,所以在多周期中为4。
4.流水线控制信号
流水线控制信号(简化)如图:
Tips:输入ALU control的六位字段为指令立即数的低六位(符号扩展时无变化)。
EX过程中控制信号有:RegDst、ALUOp、ALUSrc,根据这些信息选择结果寄存器(R、I型指令)、ALU操作、并为ALU读取data2或符号扩展后的立即数。
4.1 控制信号说明
ALUOp信号如下:
其他信号如下:
Tips:控制信号与非流水方式相同的意义,各种指令如下:
4.2 控制信号与数据通路
流水线控制信号根据指令产生:与单周期实现一样,如图:
Tips:ALUOp分为ALUOp1与ALUOp0,为两个控制信号。
流水线数据通路如图:
总结
以上便是绍深入计算机组成与设计第四章处理器的相关知识。在第四章中,主要以计算机系统处理器与流水线的数据通路介绍与实现为主。
相关文章:
计算机组成与设计04——处理器
系列文章目录 本系列博客重点在深圳大学计算机系统(3)课程的核心内容梳理,参考书目《计算机组成与设计》(有问题欢迎在评论区讨论指出,或直接私信联系我)。 第一章 计算机组成与设计01——计算机概要与技…...
IT行业那么辛苦,我们为什么还要选择它?
疫情三年,我们学会了什么?工作诚可贵,技能价更高。 搞IT辛苦?有啥辛苦的?说什么辛苦?能有工作,工资又高,还要什么自行车,有啥搞啥吧!每次看到网络上有人问有…...
PyTorch学习笔记:nn.CrossEntropyLoss——交叉熵损失
PyTorch学习笔记:nn.CrossEntropyLoss——交叉熵损失 torch.nn.CrossEntropyLoss(weightNone, size_averageNone, ignore_index-100, reduceNone, reductionmean, label_smoothing0.0)功能:创建一个交叉熵损失函数: l(x,y)L{l1,…,lN}T&…...
【VictoriaMetrics】什么是VictoriaMetrics
VictoriaMetrics是一个快速、经济、可扩展的监控解决方案和时间序列数据库,有单机版和集群版本,基础功能及集群版本基本功能不收费,VictoriaMetrics有二进制安装版本、Docker安装版本等多种安装方式,其源码及部署包更新迭代很快,VictoriaMetrics具有以下突出特点: 它可以作…...
(第五章)OpenGL超级宝典学习:统一变量(uniform variable)
统一变量 前言 本篇在讲什么 本篇记录对glsl中的变量uniform的认知和学习 本篇适合什么 适合初学Open的小白 适合想要学习OpenGL中uniform的人 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 …...
数据存储技术复习(四)未完
1.什么是NAS。一般用途服务器与NAS设备之间有何不同。NAS是一个基于IP的专用高性能文件共享和存储设备。—般用途服务器可用于托管任何应用程序,因为它运行的是一般用途操作系统NAS设备专用于文件服务。它具有专门的操作系统,专用于通过使用行业标准协议…...
Rust编码的信息窃取恶意软件源代码公布,专家警告已被利用
黑客论坛上发布了一个 用Rust编码的信息窃取恶意软件源代码 ,安全分析师警告,该恶意软件已被积极用于攻击。 该恶意软件的开发者称,仅用6个小时就开发完成,相当隐蔽, VirusTotal的检测率约为22% 。 恶意软件开发者在…...
diffusers编写自己的推理管道
英文文献:Stable Diffusion with 🧨 Diffusers 编写自己的推理管道 最后,我们展示了如何使用diffusers. 编写自定义推理管道是对diffusers库的高级使用,可用于切换某些组件,例如上面解释的 VAE 或调度程序。 例如&a…...
计算机操作系统 左万利 第二章课后习题答案
计算机操作系统 左万利 第二章课后习题答案 1、为何引进多道程序设计,在多道程序设计中,内存中作业的道数是否越多越好?说明原因。 引入多道程序设计技术是为了提高计算机系统资源的利用率。在多道程序系统中,内存中作业的道数并…...
CODESYS开发教程10-文件读写(SysFile库)
今天继续我们的小白教程,老鸟就不要在这浪费时间了😊。 前面一期我们介绍了CODESYS的文件操作库CAA File。这一期主要介绍CODESYS的SysFile库所包含的文件读写功能块,主要包括文件路径、名称、大小的获取以及文件的创建、打开、读、写、拷贝…...
Linux安装redis
Linux安装redis一.下载二.解压配置1.创建文件夹2.上传文件3.解压4.编译配置三.启动测试1.启动2.防火墙配置3.测试四.设置开机自启1.配置脚本2.添加服务3.测试一.下载 redis官网:https://redis.io/ redis官方下载地址:http://download.redis.io/releases…...
计算机组成与体系结构 性能设计 William Stallings 第2章 性能问题
2.1 优化性能设计例如,当前需要微处理器强大功能的桌面应用程序包括:图像处理、三维渲染、语音识别、视频会议、多媒体创作、文件的声音和视频注释、仿真建模从计算机组成与体系结构的角度来看,一方面,现代计算机的基本组成与50多…...
anaconda详细介绍、安装及使用(python)
anaconda详细介绍、安装及使用1 介绍1.1 简介1.2 特点1.3 版本下载2 Anaconda管理Python包命令3 安装3.1 windows安装4 操作4.1 Conda 操作4.2 Anaconda Navigator 操作4.3 Spyder 操作4.4 Jupyter Notebook 操作5 示例参考1 介绍 1.1 简介 Anaconda是用于科学计算(…...
雅思经验(6)
反正我是希望遇到的雅思听力section 4.里面填空的地方多一些,之后单选的部分少一些。练了一下剑9 test3 的section 4,感觉还是不难的,都是在复现,而且绕的弯子也不是很多。本次考试的目标就是先弄一个六分,也就是说&am…...
CentOS9源码编译libvirtd工具
卸载原有版本libvirt [rootcentos9 ~]# yum remove libvirt Centos9配置网络源 [rootcentos9 ~]# dnf config-manager --set-enabled crb [rootcentos9 ~]# dnf install epel-release epel-next-release 安装依赖包 [rootcentos9 ~]# yum install -y libtirpc-devel libxml2-de…...
搭建内网穿透
文章目录摘要npsfrp服务提供商摘要 内网穿透是一种方便的技术,可以让用户随时随地访问内网设备。有两种方式可以使用内网穿透:自己搭建,使用nps/frps软件;购买服务,快速享受内网穿透带来的便利。 nps 内网穿透。参考…...
vue3组件库项目学习笔记(八):Git 使用总结
目前组件库的开发已经接近尾声,因为这次是使用 git 进行协作的开发模式,在团队协作的时候遇到很多的问题,开发过程中发现小伙伴们对于 git 的使用还不是很熟练,这里就简单总结一下常用的 git 的操作,大致有:…...
ISO7320FCQDRQ1数字隔离器LMG1025QDEETQ1半桥GaN驱动器
1、数字隔离器 DGTL ISO 3000VRMS 2CH 8SOIC型号:ISO7320FCQDRQ1批次:新技术:容性耦合类型:通用隔离式电源:无通道数:2输入 - 侧 1/侧 2:2/0通道类型:单向电压 - 隔离:30…...
openmmlab 语义分割算法基础
本文是openmmlab AI实战营的第六次课程的笔记,以下是我比较关注的部分。简要介绍语义分割:如下图,左边原图,右边语义分割图,对每个像数进行分类应用语义分割在个各种场景下都非常重要,特别是在自动驾驶和医…...
2023年深圳/东莞/惠州CPDA数据分析师认证报名入口
CPDA数据分析师认证是中国大数据领域有一定权威度的中高端人才认证,它不仅是中国较早大数据专业技术人才认证、更是中国大数据时代先行者,具有广泛的社会认知度和权威性。 无论是地方政府引进人才、公务员报考、各大企业选聘人才,还是招投标加…...
RabbitMQ-客户端源码之AMQChannel
AMQChannel是一个抽象类,是ChannelN的父类。其中包含唯一的抽象方法: /*** Protected API - called by nextCommand to check possibly handle an incoming Command before it is returned to the caller of nextCommand. If this method* returns true…...
注意力机制(SE,ECA,CBAM) Pytorch代码
注意力机制1 SENet2 ECANet3 CBAM3.1 通道注意力3.2 空间注意力3.3 CBAM4 展示网络层具体信息1 SENet SE注意力机制(Squeeze-and-Excitation Networks):是一种通道类型的注意力机制,就是在通道维度上增加注意力机制,主要内容是是…...
Vue2笔记03 脚手架(项目结构),常用属性配置,ToDoList(本地存储,组件通信)
Vue脚手架 vue-cli 向下兼容可以选择较高版本 初始化 全局安装脚手架 npm install -g vue/cli 创建项目:切换到项目所在目录 vue create xxx 按照指引选择vue版本 创建成功 根据指引依次输入上面指令即可运行项目 也可使用vue ui在界面上完成创建&…...
Java程序的执行顺序、简述对线程池的理解
点个关注,必回关 文章目录一、Java程序是如何执行的二、合理利用线程池能够带来三个好处一、Java程序是如何执行的 我们日常的工作中都使用开发工具(IntelliJ IDEA 或 Eclipse 等)可以很方便的调试程序,或者是通 过打包工具把项目…...
【前言】嵌入式系统简介
随手拍拍💁♂️📷 日期: 2022.12.01 地点: 杭州 介绍: 2022.11.30下午两点时,杭州下了一场特别大的雪。隔天的12月路过食堂时,边上的井盖上发现了这个小雪人。此时边上的雪已经融化殆尽,只有这个雪人依旧维持着原状⛄…...
React设计原理—1框架原理
阅读前须知 本文是笔者学习卡颂的《React设计原理》的读书笔记,对书中有价值内容以Q&A方式进行呈现,同时结合了自己的理解🤔阅读时推荐先看问题,想想自己的答案,再和答案比对一下本文属于前端框架科普,…...
(C00034)基于Springboot+html前后端分离技术的宿舍管理系统-有文档
基于Springboothtml技术的宿舍管理系统-有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于Springboothtml的前后端分离技术的宿舍管理系统项目为了方便对学生宿舍进行管理而设计,分为后勤、宿管、学生三种用户,后勤对整体宿舍进行管理、宿管…...
Flink面试题
一 基础篇Flink的执行图有哪几种?分别有什么作用Flink中的执行图一般是可以分为四类,按照生成顺序分别为:StreamGraph-> JobGraph-> ExecutionGraph->物理执行图。1)StreamGraph顾名思义,这里代表的是我们编写…...
Python学习笔记
前言:又从仓库翻出来了一些以前总结的文档,以下内容是我初学Python时网上找的或是图书馆借书抄写的笔记,现在再看有点零散不成体系,但是也还是纪念一下子吧。 Python学习笔记 对于初学编程的人来说,Python可以缩短编…...
最适合入门的100个深度学习实战项目
🚨注意🚨:最近经粉丝反馈,发现有些订阅者将此专栏内容进行二次售卖,特在此声明,本专栏内容仅供学习,不得以任何方式进行售卖,未经作者许可不得对本专栏内容行使发表权、署名权、修改…...
如何做视频网站流程图/国外免费推广平台有哪些
1 volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明&…...
沈阳网站搜索排名/百度广告登录入口
最后贴一张小米官方拆机零件汇总图片:软件篇:小米路由器的系统是在开源OpenWRT的基础上进行了定制。界面交互更加友好。经过几天的试用,《假装是极客》感受最深的是,小米路由的APP与小米系列硬件已经深度集成,如果是米…...
有哪些做网站的公司/运营网站
大致题意:有N个木桩,和M个木桩对之间的高度差(从x跳到y需要往上跳的高度)。从x跳跃到y的路径消耗的体力值是路径中的一个最大高度差。求一条消耗体力最小的路径。 思路:-和POJ 1797类似,只是这道题的没有固定起点和终点࿰…...
做网站开店/千度seo
DHT11简介 DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。 传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机 DHT11 的技术参数如下: 工作电压范围: 3.3V-5.5V 工作电流 :平均 0.5mA …...
wordpress主题简约博客/培训课程网站
描述: 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象 int get(int key) - 如果键存在于缓存中,则获取键的值,否则返回 -1。 void put(int key, int value) - 如果键已存在,则变更…...
哈尔滨网站开发需要多少钱/最近的国际新闻热点
前言 本文是在笔者做深度学习相关研究的时候需要高算力GPU去运行代码因而选择去租借GPU云服务器,这里记下自己所接触的一些GPU服务器网站和使用技巧 一、推荐站点 1、极链AI云,首当其冲的一定是这家,这家是我用过认为较为好用而且相对价格…...