CPU 流水线技术初识

news2024/9/21 8:03:50

在当今数字化的时代,计算机已经成为我们生活中不可或缺的一部分。而在计算机的核心部位,中央处理器(CPU)则是其重要的组成部分。CPU 的性能决定了计算机的运行速度和处理能力,而流水线技术则是 CPU 性能提升的关键所在。

1 指令执行生命周期回顾

一条指令的生命周期分为五个阶段:

取指阶段(Instruction Fetch):取指阶段是指将指令从存储器中读取出来的过程。程序指针寄存器用来指定当前指令在存储器中的位置。读取一条指令后,程序指针寄存器会根据指令的长度自动递增,或者改写成指定的地址。

译码阶段(Instruction Decode):指令译码是指将存储器中取出的指令进行翻译的过程。指令译码器对指令进行拆分和解释,识别出指令类别以及所需的各种操作数。

执行阶段(Instruction Execute):指令执行是指对指令进行真正运算的过程。例如指令是一条加法运算指令,则对操作数进行相加操作;如果是一条乘法运算指令,则进行乘法运算。在“执行”阶段最关键的模块为算术逻辑单元(Arithmetic Logical Unit,ALU),它是实施具体运算的硬件功能单元。

访存阶段(Memory Access):访存是指存储器访问指令将数据从存储器中读出,或写入存储器的过程。

写回阶段(Write-Back):写回是指将指令执行的结果写回通用寄存器的过程。如果是普通运算指令,该结果值来自于“执行”阶段计算的结果;如果是存储器读指令,该结果来自于“访存”阶段从存储器中读取出来的数据。
在这里插入图片描述

2 洗衣服流水线

什么是流水线?说的官方一点:流水线(Pipelining)是一种实现多条指令重叠的技术。通俗一点来说,跟工厂里面的流水线没有什么区别。
在这里插入图片描述

假设非流水线洗衣过程分为 4 个步骤:

  1. 清洗:用洗衣机清洗

  2. 烘干:洗衣机洗完后,放入烘干机烘干

  3. 叠放:烘干衣服后,将衣服从烘干机去除,放在桌子上叠好

  4. 取走:衣服叠好后,将衣服收好或让顾客取走

在这里插入图片描述

如果采用流水线的方法可以节省大量的时间。如果第一批衣服从洗衣机清洗完拿出来之后进行烘干,就可以把第二批衣服放入洗衣机清洗了。第一批衣服烘干了之后,第二批衣服也清洗完了,可以进行烘干了。
在这里插入图片描述

流水线的奇妙之处在于,对于单独的一批衣服来说,它的整个过程时间没有缩短,而在有多批任务并行执行时,流水线的优势就体现了出来。因为任务在并行执行,单位时间内完成的工作量就大大增加了。流水线实际上是改善了洗衣系统的吞吐率,使得工作效率大大提升。

可以试想一下,如果所有步骤所需时间一致,并且衣服足够多,那么采用流水线的速度将会是非流水线的 4 倍,正好等于步骤数。在图中的洗衣速度只提高了 2.3 倍的原因是图中只展示了清洗 4 批衣服,流水线在开始和结束阶段没有满载。

3 CPU 执行指令流水线

如果流水线各阶段操作平衡,那么在流水线上的指令执行时间为(理想情况下):

流水线指令执行时间 = 非流水线指令执行时间 / 流水线级数

假设指令执行所需要的执行时间如下:
在这里插入图片描述
在非流水线方式中,第一条指令与第四条指令之间的时间差是 3*800 = 2400ps

在流水线方式中,第一条指令与第四条指令之间的时间差是 3*200 = 600ps
在这里插入图片描述

在图中的加速比2400ps /1400ps,并不等于 4。这是为什么呢?这是因为执行指令的数量不够多。

如果在上面流水线中增加 1000000 条指令,每一条指令都将使得整个执行时间增加 200ps,因此整个执行时间变成了 1000000 * 200ps + 1400ps = 200001400ps

在非流水线方式下,执行时间将变成 1000000 * 800ps + 2400ps = 800002400ps

二者比值即无限接近于 4。

4 CPU 流水线技术的优势

从上面这两个例子,可以看到流水线技术是很有优势的:

  1. 提高执行效率:通过并行处理多条指令,流水线技术大大提高了 CPU 的执行效率。

  2. 降低延迟:由于指令可以在多个阶段同时进行,因此可以减少等待时间,降低指令执行的延迟。

  3. 提高吞吐量:流水线技术使得 CPU 可以在单位时间内处理更多的指令,从而提高系统的吞吐量。

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

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

相关文章

SCAU华南农业大学 高级程序语言设计(C语言)OJ实验题解

有错漏/建议/意见 欢迎在评论区提出!!! 实验1 C语言程序初步 堂前习题 6567 第一个C程序 描述: 将下列程序输入Visual C,编译、连接和运行该程序,运行通过后,提交程序。 输入: …

不同环境下RabbitMQ的安装-3 操作RabbitMQ

前面两篇从不同环境下RabbitMQ的安装-1 为什么要使用消息服务 到同环境下RabbitMQ的安装-2 ARM架构、X86架构、Window系统环境下安装RabbitMQ介绍了关于如何在ARM架构、X86架构和Window系统下如何安装,各位小伙伴可以根据自己的实际开发场景参考安装。 到本篇是一些…

宿主机与容器(docker)之间的数据共享

目录 一台宿主机上的容器和宿主机之间的数据共享 创建卷 进入Docker的卷的存储位置 进入卷ep1的数据存储位置 创建容器并挂载至卷ep1上 测试: 进入容器内部查看 一台宿主机上的多个容器之间的数据共享 挂载新的docker容器在该卷上 查看修改的数据是否一致…

CocosCreator使用 ProtoBuf WebSocket与服务器对接方法

在 Cocos Creator 中使用 .proto 文件和转换成 TypeScript(TS)两者各有其优缺点,具体选择取决于你的项目需求和团队的开发习惯。以下是两者的一些比较: 1、使用 .proto 文件的优点: 跨语言支持:Protocol B…

对目录的操作

1.fileno:获得文件流指针里的文件描述符 int fd fileno(FILE *fp) 成功返回文件描述符 失败返回-1 2.fdopen:与fileno相反,将文件描述符转换为文件流指针 FILE *fp fdopen(int fd) 成功返回文件流指针 失败返回-1 一、目录&#x…

药物研发企业专属项目管理系统案例(PMS)分享:丽珠医药集团上线瑞杰 SuperProject 系统

丽珠医药集团股份有限公司与北京瑞杰科技达成合作,丽珠医药集团选择瑞杰科技自主研发的 SuperProject 系统来打造一套专业的医药研发项目管理平台,帮助丽珠医药更好地规划、执行和监控药物研发项目,确保项目按时、按质、按量完成,…

数学规划模型|线性规划|整数规划

规划模型的概念 如何来分配有限资源,从而达到人们期望目标的优化分配数学模型,它在数学建模中处于中心地位。 这类问题一般可以归结为数学规划模型,规划模型的应用极为广泛,其作用已为越来越多的人所重视 规划模型是数学建模竞赛…

翰德恩赋能中国邮政信息科技产品创新系列培训

为了增强中邮信科公司需求分析工程师的专业素养,提升其业务需求和业务价值的挖掘能力,进而设计并交付满足用户期望的产品,提升用户体验,运营管理部于2024年4月至6月成功举办了六期需求分析工程师能力提升系列培训。 本次系列培训…

Maven依赖管理【后端 2】

Maven依赖管理详解 在Java项目开发中,依赖管理是一个至关重要的环节。Maven作为Java世界中最流行的项目管理工具之一,通过其强大的依赖管理机制,极大地简化了项目构建和依赖管理的复杂性。本文将详细介绍Maven的依赖配置、依赖传递以及依赖范…

QT生成.exe文件无法在未安装QT的电脑上运行的解决办法

在没有安装qt的电脑上运行qt生成的exe文件,提示: The application failed to start because no Qt platform plugin could be initialized 在网上找了很多办法,我尝试了 手动: 1、修改环境变量,2,添加pla…

Hadoop未授权访问漏洞

Hadoop是一个由Apache基金会所开发的分布式系统基础架构,由于服务器直接在开放了Hadoop 机器 HDFS 的 50070 web 端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执…

【密码学】网络攻击类型:窃听攻击、假冒攻击、欺骗攻击和重放攻击

一、窃听攻击、假冒攻击、欺骗攻击和重放攻击的定义 这些攻击从名字中就大概能知道他们的攻击原理,我就不赘述了,直接用一个表格来一次性介绍四种攻击方式。 攻击类型攻击原理窃听攻击攻击者监听网络中的数据传输以获取敏感信息。示例:在未加…

docker 部署 mysql8

命令 docker run --restartalways --name mysql8 -v /data/mysql/conf:/etc/mysql -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log -v /data/mysql/mysql-files:/var/lib/mysql-files -p 3308:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:8 \解释 --rest…

基于单片机的瓦斯浓度检测报警装置的设计与仿真

摘 要: 针 对 煤矿 安全 生产 实际 , 文章首先 介绍 了采用 单 片 机 的煤矿 瓦斯 浓 度检 测 报 警 装 置的整 体 构 架 , 然 后 对 煤矿 瓦斯 浓 度检 测 报 警 装 置 的 各 个 部 分 硬 件 进 行 了 详细 的设计, 给 出了煤矿瓦斯浓 度检…

JavaEE-多线程编程定时器(多线程完结篇)

定时器就是闹钟的效果,指定要一个任务(runnable),指定一个时间,此时这个任务不会立马去执行,而是时间到了才会去执行,这个过程称为——定时执行/延时执行。 日常开发中定时执行是一个非常重要的…

Ubuntu 22.04.4LTS 安装 Docker

更新Ubuntu: sudo apt-get update添加Docker库信息: sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release运行下列命令添加Docker官方GPG密钥: sudo curl -fsSL https://mirrors.ustc.edu.cn/d…

Mybatis的基础配置解读,并简单实现增删改查

首先,在了解mybatis的内容之前,我们先学习了解一下mybatis的主配置文件,主配置文件(Mybatis-config.xml)是我们构建SqlSessionFactory的依据。作为Mybatis的核心内容,其内部标签的顺序,一系列配…

谷粒商城实战笔记-140-商城业务-nginx-搭建域名访问环境二(负载均衡到网关)

文章目录 一,通过域名访问商城架构设计1,为什么nginx要将请求转发给网关2,架构设计 二,配置1,nginx配置1.1 nginx.conf1.2 gulimall.conf1.3 配置原理 2,网关配置 三,记录2个问题1,网…

qt的项目结构

目录 创建新的项目 第一个hell0程序,qt的项目结构 main函数 Widget头文件: pro文件 命名规范 QtCreator 常用快捷键 Qt里边绝大部分的类都是继承自QObject是一个顶层类 父子关系 Qt坐标系 QT常用API函数 对象树 信号和槽机制 自定义信号和槽 自定义信号…

PHP企业培训考试系统小程序源码

🚀企业培训考试系统,赋能员工成长新引擎📚 🌱 开篇:解锁企业培训新篇章 在快速变化的商业环境中,员工的能力提升是企业持续发展的关键。🚀 传统的培训方式已难以满足现代企业的需求&#xff0…