计算机组成原理 指令流水线
文章目录
- 指令流水线
- 指令流水线的概念
- 流水线性能分析
- 流水线的吞吐率
- 流水线的加速比
- 流水线的效率
- 影响流水线的因素
- 结构相关 (资源冲突)
- 数据相关 (数据冲突)
- 控制相关 (控制冲突)
- 流水线分类
- 超量流水线
指令流水线
指令流水线的概念
指令流水线执行方式
计算机的流水线把一个重复的过程分解为若干子过程,每个子过程与其他子过程并行执行。由于采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,因此成为计算机中普遍使用的一种并行处理技术。
顺序执行方式
取指1 | 析指1 | 执行1 | 中断1 | 取指2 | 析指2 | 执行2 | 中断2 | ... | ... | ... | ... |
---|
假设机器周期为 △ t \triangle t △t,那么顺序执行n条指令的执行时间为 4 n △ t 4n \triangle t 4n△t
流水线执行方案
执行5条指令的时间为: 5 △ t + 4 △ t 5\triangle t+4\triangle t 5△t+4△t
执行n条指令的时间为: T + ( n − 1 ) △ t T+(n-1)\triangle t T+(n−1)△t
流水线性能分析
流水线的吞吐率
在指令级流水线中,吞吐率是指在单位时间内流水线所完成的任务数量,或输出结果的数量。计算流水线吞吐率(TP) 的最基本的公式如下: n是任务数,Tk是处理完n个任务所用的时间。
T P = n T k TP=\frac{n}{T_k} TP=Tkn
T P = n ( k + n − 1 ) △ t TP=\frac{n}{(k+n-1)\triangle t} TP=(k+n−1)△tn
流水线的加速比
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比,称为流水线的加速比。设T,表示不使用流水线时的执行时间,即顺序执行所用的时间:K表示使用流水线时的执行时间,则计算流水线加速比(S)的基本公式为
T P = T 0 T k TP=\frac{T_0}{T_k} TP=TkT0
$TP=\frac{kn\triangle t}{(k+n-1)\triangle t}= \frac{kn}{k+n-1} $
流水线的效率
流水线的设备利用率称为流水线的效率。在时空图上,流水线的效率定义为完成n个任务占用的时空区有效面积与n个任务所用的时间及k个流水段所围成的时空区总面积之比。因此,流水线的效率包含了时间和空间两个因素:
n个任务占用的时空区有效面积T。
n个任务所用的时间与k个流水段所围成的时空区总面积
T P = T 0 k T k TP=\frac{T_0}{kT_k} TP=kTkT0
影响流水线的因素
流水线的问题
每个阶段的时间不一样,所以我们取得阶段周期都是最大的那个!
每个阶段都有缓冲区,这种缓冲区用于保存本阶段的结果,用于下一阶段使用
结构相关 (资源冲突)
由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关。
解决办法
- 后一相关指令暂停若干周期
- 资源重复配置: 数据存储器+指令存储器
数据相关 (数据冲突)
数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令即为数据相关
解决办法:
- 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行,可分为硬件阻塞 (stall) 和软件插入"NOP"指令两种方法。
- 设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,而直接把前一条指令的 ALU的计算结果作为自己的输入数据开始计算过程,使本来需要暂停的操作变得可以继续执行,这称为数据旁路技术。
- 通过编译器对数据相关的指令编译优化的方法,调整指令顺序来解决数据相关。
数据的基本操作: 读 ® 、写(W)
冲突的基本类型 : RAW、WAR、WAW、
RAW😦"按序发射,按序完成”时,只可能出现RAW相关)
I1: ADD R3,R2.R1: (R1)+(R1)->R3
I2: ADD R5,R3.R4: (R3)+(R4)->R5
WAR:
I1:STA M,R1: (R1)->M,M为主存单元 乱序发射,编写程序的时候希望1在2前完成但优化手段导致I2在I1前发射
I2:ADD R1,R2,R3; (R3)+(R2)->R1
WAW:(存在多个功能部件时,后一条指令可能比前一条指令先完成)
I1:ADD R3,R2, R1: (R1)+(R2)->R3
I2:SUB R3,R4, R5: (R4)-(R5)->R3
控制相关 (控制冲突)
当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关
解决办法
- 尽早判别转移是否发生,尽早生成转移目标地址
- 预取转移成功和不成功两个控制流方向上的目标指令
- 加快和提前形成条件码
- 提高转移方向的猜准率
流水线分类
- 部件功能级、处理机级和处理机间级流水线
根据流水线使用的级别的不同,流水线可分为部件功能级流水线、处理机级流水线和处理机间流水线。
部件功能级流水就是将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点加法操作分成求阶差、对阶,尾数相加以及结果规格化等4个子过程。
处理机级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回5个子过程
处理机间流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。 - 单功能流水线和多功能流水线
按流水线可以完成的功能,流水线可分为单功能流水线和多功能流水线
单功能流水线指只能实现一种固定的专门功能的流水线:
多功能流水线指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线 - 动态流水线和静态流水线
按同一时间内各段之间的连接方式,流水线可分为静态流水线和动态流水线。
静态流水线指在同一时间内,流水线的各段只能按同一种功能的连接方式工作。
动态流水线指在同一时间内,当某些段正在实现某种运算时,另一些段却正在进行另一种运算。这样对提高流水线的效率很有好处,但会使流水线控制变得很复杂。 - 线性流水线和非线性流水线
按流水线的各个功能段之间是否有反馈信号,流水线可分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算。
超量流水线
超标量技术
每个时钟周期内可 并发多条独立指令要配置多个功能部件不能调整 指令的执行顺序,通过编译优化技术,把可并行执行的指令搭配起来
超流水线技术
在一个时钟周期内再分段 (4段)
在一个时钟周期内一个功能部件使用多次 (4次)
但是不能调整指令的执行顺序靠编译程序解决优化问题
超长指令字
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位)
相关文章:

计算机组成原理 指令流水线
文章目录 指令流水线指令流水线的概念流水线性能分析流水线的吞吐率流水线的加速比流水线的效率 影响流水线的因素结构相关 (资源冲突)数据相关 (数据冲突)控制相关 (控制冲突) 流水线分类超量流水线 指令流水线 #mermaid-svg-sWaRASMFAvh8sLJk {font-family:"trebuchet m…...
macOS - md5 | md5sum
文章目录 简单使用介绍文档Linux - md5summacOS - md5 大文件传输是否完整,你可以使用 md5 进行校验 linux 上使用 md5sum 命令,在macOS 上 md5 命令是和 md5sum 等效的 简单使用介绍 参考:https://blog.csdn.net/cnds123321/article/detail…...

Tomcat快速入门
1.Tomcat介绍 Apache Tomcat 是由 Apache Software Foundation(ASF)开发的一个开源 Java WEB 应用服务器,如apache处理静态HTML能力突出不同,tomcat处理动态HTML能力相当强大,因此一般项目都是部署apachetomcat&#…...
如何结合antd design pro 5 结合express 上传多个文件
在Ant Design Pro 5(基于React)的前端界面结合Express后端实现上传整个文件夹的文件,实际上是在前端进行多文件选择,并通过POST请求将文件列表发送到后端,然后由后端处理上传。由于浏览器API限制,直接上传整…...

Django随笔
关于Django的admin 1. 在url中把 from django.contrib import admin 重新解开 把path(admin/,admin.site.urls), 解开 2. 注册app,在配置文件中写 django.contrib.admin, 3.输入命令进行数据库迁移 Django国际化 配置文件中(改成中文) LA…...

线程和进程的区别(从JVM角度出发)
进程与线程的区别 线程具有许多传统进程所具有的特征,故又称为轻型进程(Light—Weight Process)或进程元;而把传统的进程称为重型进程(Heavy—Weight Process),它相当于只有一个线程的任务。在引入了线程的操作系统中,通常一个进…...

手把手教你如何快速定位bug,如何编写测试用例,快来观摩......
手把手教你如何快速定位bug,如何编写测试用例,快来观摩......手把手教你如何快速定位bug,如何编写测试用例,快来观摩......作为一名测试人员如果连常见的系统问题都不知道如何分析,频繁将前端人员问题指派给后端人员,后端人员问题指派给前端人员…...
计算矩阵边缘元素之和(c++)
题目描述 输入一个整数矩阵,计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素,就是第一行和最后一行的元素以及第一列和最后一列的元素。 输入格式 第一行分别为矩阵的行数 和列数 (m<100,n<100),…...

java使用jsch处理软链接判断是否文件夹
前言 这一次主要是碰到一个问题。因为使用jsch去读取文件的时候,有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹?因为他没有提供可以直接读取的方法,用权限信息去判断…...

【2023】java使用WebClient实现chatGPT调用建立web socket连接
💻目录 一、介绍1、使用技术2、效果 二、代码1、前端代码2、后端代码2.1、maven依赖2.2、model2.2.1、请求接口的格式2.2.2、响应数据对象 2.3、工具类2.3.1、🔴使用WebClient调用chatgpt方法2.3.2、🟠 webSocket连接对话方法 2.4、Controlle…...

力扣【四数之和】
一、题目描述 18. 四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复&#x…...

IMX6LL|linux设备驱动模型
linux设备驱动模型 为什么需要设备驱动模型 早期内核(2.4之前)没有统一的设备驱动模型,但照样可以用2.4~2.6期间使用devfs,挂载在/dev目录。 需要在内核驱动中创建设备文件(devfs_register),命名死板 2.6以后使用sys…...

2023年的技术总结和工作反思
一、回顾2023年 回顾自己的2023年,还是发生了很多的变化。在大学毕业,就来到了芯翼参加工作,在这里也遇到了很多的前辈和小伙伴,收获工作的同时也收获了友情。但是,随着公司发展战略的变化,公司的人员架构…...
Stable Diffusion中的Embeddings
什么是Embeddings? Embeddings是一种数学技术,它允许我们将复杂的数据(如文本或图像)转换为数值向量。这些向量是高维空间中的点,可以捕捉数据的关键特征和属性。在文本处理中,例如,embeddings可…...

如何快速打开github
作为一个资深码农,怎么能不熟悉全球最大的同性交友社区——github呢,但头疼的是github有时能打开,有时打不开,这是怎么回事? 其实问题出在github.com解析DNS上,并不是需要FQ。下面提供一个方法,…...

【sql/python】表中某列值以列表聚合
需求背景: 有一个表含有两个字段 “ID”,“VALUE” 1,香蕉 1,苹果 2,橘子 3,香蕉 3,苹果 3,橘子 目标要求:将每个ID的VALUE列聚合成一个字符串列表 “ID”,“VALUE” 1,[香蕉,苹果] 2,[橘子] 3,[香蕉,苹果,橘子] 一、SQL使用 LISTAGG函数聚合方式 ---将…...

大模型实战营Day6 作业
基础作业 使用 OpenCompass 评测 InternLM2-Chat-7B 模型在 C-Eval 数据集上的性能 环境配置 conda create --name opencompass --clone/root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/opencompass cd openco…...

C#,入门教程(20)——列表(List)的基础知识
上一篇: C#,入门教程(19)——循环语句(for,while,foreach)的基础知识https://blog.csdn.net/beijinghorn/article/details/124060844 List顾名思义就是数据列表,区别于数据数组(arr…...

【蓝桥杯日记】复盘篇一:深入浅出顺序结构
🚀前言 本期是一篇关于顺序结构的题目的复盘,通过复盘基础知识,进而把基础知识学习牢固!通过例题而进行复习基础知识。 🚩目录 前言 1.字符三角形 分析: 知识点: 代码如下 2. 字母转换 题目分析: 知…...

尚无忧【无人共享空间 saas 系统源码】无人共享棋牌室系统源码共享自习室系统源码,共享茶室系统源码
可saas多开,非常方便,大大降低了上线成本 UNIAPPthinkphpmysql 独立开源! 1、定位功能:可定位附近是否有店 2、能通过关键字搜索现有的店铺 3、个性轮播图展示,系统公告消息提醒 4、个性化功能展示,智能…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...

React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...