计算机组成原理 指令流水线
文章目录
- 指令流水线
- 指令流水线的概念
- 流水线性能分析
- 流水线的吞吐率
- 流水线的加速比
- 流水线的效率
- 影响流水线的因素
- 结构相关 (资源冲突)
- 数据相关 (数据冲突)
- 控制相关 (控制冲突)
- 流水线分类
- 超量流水线
指令流水线
指令流水线的概念
指令流水线执行方式
计算机的流水线把一个重复的过程分解为若干子过程,每个子过程与其他子过程并行执行。由于采用流水线技术只需增加少量硬件就能把计算机的运算速度提高几倍,因此成为计算机中普遍使用的一种并行处理技术。
顺序执行方式
| 取指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、个性化功能展示,智能…...
告别手动填表!用Python脚本5分钟搞定DSSAT模型批量模拟(附源码)
Python自动化DSSAT模型:从Excel到批量模拟的高效科研实践 在农业科研和气候情景分析中,DSSAT模型作为全球主流的作物生长模拟工具,其价值早已被广泛认可。但真正使用过它的研究者都深有体会:当面对数十种管理方案、上百个气象场景…...
手把手教你用UE5 C++为角色添加动态攀爬:支持移动平台与高度自适应
手把手实现UE5动态攀爬系统:移动平台与高度自适应全解析 在当代3A级动作游戏中,角色与环境的动态交互已成为沉浸感的核心要素。想象一个场景:玩家在摇晃的空中浮岛上追逐目标,需要连续攀爬移动中的平台;或是潜入敌方基…...
ESP8266透传总失败?手把手教你用Arduino IDE和串口助手搞定Blinker配网(避坑大全)
ESP8266透传配置终极指南:从AT指令到Blinker配网全解析 物联网开发者们,是否曾被ESP8266模块的透传配置折磨得焦头烂额?当你在深夜调试AT指令却只收到一堆乱码时,那种挫败感我深有体会。本文将带你彻底攻克这个物联网入门的第一道…...
3步解决Android Studio英文界面困扰:完整中文插件配置指南
3步解决Android Studio英文界面困扰:完整中文插件配置指南 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 还在为Andr…...
MindCluster集群调度实践-通用超节点调度算法
作者:昇腾实战派 一、超节点的重要性 随着模型参数量的上升,训练任务运行所需的芯片数量也达到了万卡、十万卡级别。如何将如此庞大的芯片链接起来,并且做到通信带宽和成本的平衡,成为硬件层面的一大难题。 图1.资源扩展方式示…...
搞懂对数收益率:为什么金融圈都在悄悄用它?
搞懂对数收益率:为什么金融圈都在悄悄用它?如果你曾经被“涨10%再跌10%,怎么还亏了?”这个问题困扰过,那么读完这篇文章,你会豁然开朗。一、一个让你“感觉不对”的小实验 假设朋友向你推荐一只期货合约&am…...
Taotoken Token Plan套餐如何帮助初创团队控制AI调用成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken Token Plan套餐如何帮助初创团队控制AI调用成本 对于预算有限的初创团队和独立开发者而言,将大模型能力集成到…...
RAG检索体系①【第十一篇】:混合检索架构(BM25+向量+过滤),工业级召回落地方案
生产级 RAG 避坑实战合集【第十一篇】文章简介:前十篇我们彻底打通数据层改写层:文档清洗、Chunk切块、元数据、生命周期、Query双层改写。绝大多数人做完这些,直接无脑上单向量检索。线上投产全部翻车。本文直击行业痛点:纯向量检…...
挑选专业语音工具不会选?这5个实用标准帮到你
日常工作生活中,不少人会遇到会议纪要整理、课堂录音梳理、嘉宾访谈整理等场景,这类场景往往需要耗费大量时间抠语音内容,挑选语音转写工具时,也常面临准确率差、速度慢等问题,结合多款主流AI工具实测,整理…...
别再点那个小箭头了!手把手教你用自定义按钮控制ElementUI表格展开行(Vue3 + Element Plus版)
用文字按钮重构Element Plus表格交互:让展开行操作更符合用户直觉 后台管理系统中最常见的交互痛点之一,就是默认的表格展开箭头设计。当用户面对密密麻麻的数据表格时,那个小小的三角形图标往往成为操作盲区。我曾参与过一个电商后台系统的用…...
