CPU的流水线指令设计

CPU的流水线指令设计为什么小小一个 CPU 有那么多周期 Cycle 程序的性能 是由三个因素相乘来衡量的 指令数 CPI 时钟周期 和周期相关的只有一个时钟周期 即 CPU 主频的倒数 一个 CPU 的时钟周期可以认为是可以完成一条最简单的计算机指令的时间 那为何构造 CPU 时 有那么多周期 单指令周期处理器一条 CPU 指令的执行 由 FDE 三步组成 这个执行过程 至少需花费一个时钟周期 因为在取指令的时候 我们需要通过时钟周期的信号 来决定计数器的自增 很自然 我们希望能确保让这样一整条指令的执行 在一个时钟周期内完成

为什么小小一个CPU,有那么多周期(Cycle)?

那为何构造CPU时,有那么多周期?

单指令周期处理器

一条CPU指令的执行,由FDE三步组成。这个执行过程,至少需花费一个时钟周期。因为在取指令的时候,我们需要通过时钟周期的信号,来决定计数器的自增。

不同指令执行时间不同,但要让所有指令都在一个时钟周期内完成,只好把时钟周期和执行时间最长的那个指令一样。不然就会导致快速执行完成的指令,需等待满一个时钟周期,才能执行下一条指令。

虽然CPI能够保持在1,但时钟频率却没法太高。太高,有些复杂指令没法在一个时钟周期内完成。在下个时钟周期到来,开始执行下条指令时,前一条指令执行结果可能还没写入寄存器。下一条指令读取的数据就不准确了。

  • 前一条指令的写入,在后一条指令的读取之前
    CPU的流水线指令设计
    一个CPU时钟周期,可认为是完成一条简单指令的时间。
    为什么单指令周期处理器,反而变成执行一条最复杂的指令的时间?
    无论是Intel CPU or ARM CPU,都不是单指令周期处理器,而是采用一种叫作指令流水线(Instruction Pipeline)的技术。



现代处理器的流水线设计

CPU的指令执行过程,其实也是由各电路模块组成:

  • 取指令时,需要译码器,把数据从内存取出来,写入寄存器
  • 指令译码时,需要另外一个译码器,把指令解析成对应控制信号、内存地址和数据
  • 指令执行时,需要一个完成计算工作的ALU。这些都是一个一个独立的组合逻辑电路,我们可以把它们看作一个团队里面的产品经理、后端工程师和客户端工程师,共同协作来完成任务。
  • 流水线执行示意图
    CPU的流水线指令设计
    这就不用把时钟周期设置成整条指令执行的时间,而是拆分成完成这样的一个一个小步骤需要的时间。同时,每一个阶段的电路在完成对应的任务之后,也不需要等待整个指令执行完成,而是可以直接执行下一条指令的对应阶段。
    这样的协作模式,就是指令流水线。这里每个独立步骤,称为流水线阶段或流水线级(Pipeline Stage)。


超长流水线的性能瓶颈

  • 20级流水线,则流水线寄存器写入就要400ps,占超过10%
  • 50级流水线,就要多花费1ns在流水线寄存器上,占到25%

这意味着,单纯增加流水线级数,不仅不能提升性能,反而会有更多overhead开销。所以,设计合理的流水线级数也是现代CPU中非常重要的一点。

总结

为不浪费CPU性能,通过把指令执行过程,切分成一个个流水线级,提升CPU吞吐率。而CPU设计,又是由一个个独立的组合逻辑电路串接起来形成,适合这样采用流水线“专业分工”的工作方式。

参考

  • 《深入理解计算机系统》的4.4章节
  • 《计算机组成与设计 硬件/软件接口》的4.5章节
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/228225.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午7:31
下一篇 2026年3月16日 下午7:31


相关推荐

  • OpenClaw(原Clawdbot)2026简易部署:新手快速入门教程

    OpenClaw(原Clawdbot)2026简易部署:新手快速入门教程

    2026年3月13日
    2
  • win7系统opc服务器配置,win7 设置opc服务器

    win7系统opc服务器配置,win7 设置opc服务器win7设置opc服务器内容精选换一换创建媒体处理服务配置项。媒体处理服务配置项用于媒体处理服务中获取相关授权。参数和对应说明如表1。MpcConfigmpcConfig=newMpcConfig();mpcConfig.setEndPoint(“endPoint”);//设置转码节点地址mpcConfig.setProjectId(华为云帮助中心,为用户提供产品简介、价格说明、购买…

    2022年6月20日
    27
  • “龙虾”卸载指南,来了!

    “龙虾”卸载指南,来了!

    2026年3月13日
    1
  • python实现sorted函数_Python sorted函数及用法

    python实现sorted函数_Python sorted函数及用法sorted 作为 Python 内置函数之一 其功能是对序列 列表 元组 字典 集合 还包括字符串 进行排序 sorted 函数的基本语法格式如下 list sorted iterable key None reverse False 其中 iterable 表示指定的序列 key 参数可以自定义排序规则 reverse 参数指定以升序 False 默认 还是降序 True 进行

    2026年3月17日
    2
  • PostgreSQL 临时表[通俗易懂]

    PostgreSQL 临时表[通俗易懂]转载自: http://blog.163.com/digoal@126/blog/static/1638770402012101575032326/SQL标准中临时表是一次创建,以后使用的时候无须再次创建的.并且每个会话保持各自的数据.但是在PostgreSQL中,临时表的使用有所改变.1.临时表在会话结束后会自动删除(或者在事务结束后删除oncommitdrop)

    2025年7月27日
    4
  • web UI自动化之PO模式

    web UI自动化之PO模式PO是什么:PO模式,PageObject的缩写,页面对象,设计框架的思想,分层思想在PO下,应用程序的每一个页面都有一个对应的pageclass每一个pageclass维护着该web页的元素集和操作这些元素的方法pageclass中的方法命名最好根据对应的业务场景进行,例如通常登录后我们需要等待几秒钟PO的优势:PO提供了一种业务流程与页面元素操作分离的模式,这使得测试代码变得更加清晰页面对象与用例分离,使得我们更好的复用对象可复用的页面方法代码会变得更加优化更加有效的命名

    2022年6月3日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号