CPU 流水线技术初识

embedded/2024/9/25 8:29:29/

在当今数字化的时代,计算机已经成为我们生活中不可或缺的一部分。而在计算机的核心部位,中央处理器(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 批衣服,流水线在开始和结束阶段没有满载。

CPU__39">3 CPU 执行指令流水线

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

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

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

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

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

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

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

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

CPU__59">4 CPU 流水线技术的优势

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

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

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

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


http://www.ppmy.cn/embedded/92700.html

相关文章

FPGA开发——IP核的介绍

一、简介 在我们在使用FPGA进行相关开发,设计涉及到复杂的开发时往往需要编写大量的代码对于想要实现的功能进行一个实现,这不仅增加了我们的工作量,往往还会增加开发难度。今天我们就来引入在FPGA开发中IP核的相关概念。 在FPGA&#xff08…

gdb上手简述

文章目录 1. gdb通用命令1.1 常用命令1.2 查看内存1.3 屏蔽信号 2. gdb跟踪调试2.1 debug版本2.2 gdb多线程调试 3. gdb内存监控3.1 watch3.2 mprotect内存保护3.3 perf_event数据断点API进行内存保护 4. 调试技巧4.1 gdb不阻塞进程运行4.2 查看传参、返回值 1. gdb通用命令 1…

【Android面试八股文】荣耀面试算法题:输出所有的水仙花数

文章目录 一、水仙花数的定义二、算法实现 一、水仙花数的定义 要输出所有的水仙花数,我们需要先了解什么是水仙花数。 水仙花数(Narcissistic number),也称为自恋数、自幂数、阿姆斯特朗数,是指一个 n 位的正整数&a…

Qt中SQLite数据库的使用

一、安装SQLite 在Qt6中,不再支持 SQLite2,只支持 SQLite3 。因此,有两种方式使用 SQLite,一种是在 SQLite 官网安装 SQLite3,另外一种是直接安装 SQLite Expert。 SQLite Expert 内置了 SQLite。这意味着用户在安装 S…

未来已来:人工智能如何重塑Facebook的用户体验?

在数字化时代的浪潮中,人工智能(AI)正成为推动技术进步和用户体验优化的核心力量。Facebook(现Meta Platforms)作为全球领先的社交媒体平台,正在充分利用人工智能技术,以重塑用户体验&#xff0…

【C语言】预处理详解(下)

文章目录 前言6. 宏和函数的对比7. #和##7.1 #运算符7.2 ##运算符(运用较少,了解即可) 8. 命名的约定9. #undef (了解即可)10. 条件编译(重点)11. 头文件的包含11.1 头文件被包含的方式&#xf…

【nginx】解决k8s中部署nginx转发不会自动更新域名解析启动失败的问题

文章目录 1. 问题2.解决办法3.扩展说明3.1 DNS解析阶段划分3.2 问题说明3.2.1 先看/etc/resolv.conf说明3.2.2 针对第一个问题3.2.3 针对第二个问题 【后端】NginxluaOpenResty高性能实践 参考: https://blog.csdn.net/u010837612/article/details/123275026 1. 问…

SpringBoot自动装配原理

SpringBoot自动装配原理 SpringBootApplication 中包含了三个核心注解 SpringBootConfiguration 声明当前的类是配置类 ComponentScan 组件扫描,默认扫描引导类所在包以及子包 EnableAutoConfiguration 实现SpringBoot自动化配置的核心注解 EnableAutoConfiguration …