深入浅出计算机组成原理
徐文浩
bothub 创始人
70432 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 62 讲
深入浅出计算机组成原理
15
15
1.0x
00:00/00:00
登录|注册

20 | 面向流水线的指令设计(上):一心多用的现代CPU

超长流水线的性能瓶颈
指令流水线
单指令周期处理器
CPU的流水线设计

该思维导图由 AI 生成,仅供参考

前面我们用了三讲,用一个个的电路组合,制作出了一个完整功能的 CPU。这里面一下子给你引入了三个“周期”的概念,分别是指令周期、机器周期(或者 CPU 周期)以及时钟周期。
你可能会有点摸不着头脑了,为什么小小一个 CPU,有那么多的周期(Cycle)呢?我们在专栏一开始,不是把 CPU 的性能定义得非常清楚了吗?我们说程序的性能,是由三个因素相乘来衡量的,我们还专门说过“指令数×CPI×时钟周期”这个公式。这里面和周期相关的只有一个时钟周期,也就是我们 CPU 的主频倒数。当时讲的时候我们说,一个 CPU 的时钟周期可以认为是可以完成一条最简单的计算机指令的时间。
那么,为什么我们在构造 CPU 的时候,一下子出来了那么多个周期呢?这一讲,我就来为你说道说道,带你更深入地看看现代 CPU 是怎么一回事儿。

愿得一心人,白首不相离:单指令周期处理器

学过前面三讲,你现在应该知道,一条 CPU 指令的执行,是由“取得指令(Fetch)- 指令译码(Decode)- 执行指令(Execute) ”这样三个步骤组成的。这个执行过程,至少需要花费一个时钟周期。因为在取指令的时候,我们需要通过时钟周期的信号,来决定计数器的自增。
那么,很自然地,我们希望能确保让这样一整条指令的执行,在一个时钟周期内完成。这样,我们一个时钟周期可以执行一条指令,CPI 也就是 1,看起来就比执行一条指令需要多个时钟周期性能要好。采用这种设计思路的处理器,就叫作单指令周期处理器(Single Cycle Processor),也就是在一个时钟周期内,处理器正好能处理一条指令。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

现代CPU的设计采用了指令流水线技术,通过将指令执行过程拆分成多个独立的阶段,实现了多条指令的并行执行,从而提高了CPU的吞吐率。文章详细解释了指令流水线的设计原理和优势,比喻CPU执行指令的过程类似于软件开发过程中的任务分配和协作。通过将指令执行过程拆分成多个流水线阶段,CPU可以在同一时间执行多条指令的不同阶段,从而提高了CPU的吞吐率。同时,文章也提到了现代CPU流水线级数的增加,以及通过拆分步骤来解决性能瓶颈的方法。总的来说,指令流水线技术使得现代CPU能够更高效地处理指令,提高了整体性能,同时也为读者解释了CPU设计中的技术特点和优势。文章还指出了增加流水线深度的性能成本,以及合理设计流水线级数的重要性。文章鼓励读者深入了解CPU的流水线设计,并推荐了相关章节供进一步阅读。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入浅出计算机组成原理》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(43)

  • 最新
  • 精选
  • 易儿易
    一个 CPU 的时钟周期,可以认为是完成一条简单指令的时间。 两个错误: 1简单:不是简单是复杂(耗时最长) 2指令:不是指令时间,而是指令拆分后线级执行时间 简单线级需要等待以补齐时间然后与上下流水线一起牵手步入下一线级 线级分的多的话,这个时钟周期应该就可以固定是IF取指令的时间了 如果把IF取指令看做是最简单的指令的话,这句话就没毛病了 但一般说指令应该是指令集的一个命令吧? 但是指令集是提供给开发者视角的,在CPU内部IF取指令才是一个原子化操作,从CPU视角来看又觉得这句话是靠谱的……

    作者回复: 易儿易同学, 你说得很好啊!👍

    2019-06-10
    62
  • cc
    随着流水线设计的引入,一个指令被拆分为14个子流程。一个CPU的时钟时间,应该是14个子流程中最长的那条的耗时时间

    作者回复: 回答正确!👍

    2019-06-10
    46
  • DreamItPossible
    如果从单条指令的执行来看,这句话显然是错的,因为即使最简单的无条件跳转指令都至少需要3个时钟周期; 在了解CPU的流水线设计之后,这句话从吞吐率的角度来讲,是正确的:以5级流水线为例,当过了5个时钟周期后,可以保证每个时钟周期都有一条指令执行完成,即实现了一个CPU的时钟周期;由于取指阶段肯定是所有5个阶段里耗时最长的,即一个CPU的时钟周期可以设置为取指阶段的花费时间; 注意,这里的5个时钟周期后,才有这种现象,意味着即使引入了流水线操作,这5个时钟周期的开销也是不可避免的,突然想到了之前讲到的Amdahl定律

    作者回复: 👍能够前后联系起来,很好啊

    2019-08-21
    3
    24
  •        鸟人
    这个不知道跟多线程 多进程是否有关系?

    作者回复: 这个和多线程多进程没有太大关系,那个更多是操作系统调度的问题,这个是CPU在硬件层面的实现。

    2019-06-11
    13
  • 喜欢吃鱼
    每个流水线级的执行时间应该不一定相同吧,所以一个CPU执行周期是不是执行时间最久的流水线级所需要的时间?

    作者回复: 喜欢吃鱼同学,你好 准确地说,每一个流水线级的时间都是一个时钟周期,但是其中实际操作的时间,可能短于一个时钟周期。比如我们译码器其实就是一个组合逻辑电路,门延迟很低,就不需要一个完整的时钟周期就能完成自己的任务。那么在这个之后,它其实是在“等待”。

    2019-06-10
    6
  • Only now
    一个 CPU 的时钟周期,可以认为是完成一条简单指令的时间。 这个应该是依据于吞吐量来理解的吧。 实际指令不能在一个时钟周期完成, 但是流水线的引入使吞吐量更高。

    作者回复: 没错,这是一个很好的角度,从吞吐率的角度来讲,如果没有superscalar这样的指令集并行,那么流水线没有遇到任何冒险问题的情况下。按吞吐率算下来相当于一个时钟周期完成了一条指令。

    2019-06-10
    5
  • 斐波那契
    这句话不正确 哪怕再简单的指令都要经过划分好的阶段。首先我们要明确那几个周期的概念 所谓时钟周期(或叫做震荡周期)是指cpu一次晶体震动的时间 是计算机最小的时间单位 就拿我们补码来说 取反加1 这实际上就至少需要2个脉冲也就是两个时钟周期了 对于一条指令来说我们把执行过程划分成好几个阶段(具体几个由厂商工艺设计决定) 每个阶段的时间就是一个机器周期 所以一般情况下执行一条指令的时间是由多个机器周期决定的而一个机器周期又由多个时钟周期决定的 这样一条流水线就是由最多时钟周期的机器周期时间决定的 显然一个时钟周期执行不完一条指令

    作者回复: Single-Cycle Processor就可以在一个时钟周期完成一条指令呀。虽然Single-Cycle Processor已经并不在现代CPU设计中使用了,但是并不代表这个是不可行的啊。

    2019-06-11
    4
  • softpower2018
    引入了流水线技术,一个时钟周期执行一条简单指令应该完全没问题吧!期待多指令并行执行带来的问题及其解决!

    作者回复: softpower2018同学,你好, 其实现代流水线下的CPU,一个时钟周期已经不能执行完一条指令了。因为一般来说,取指令就要一个时钟钟周期……

    2019-06-11
    3
  • 南山
    无条件跳转这样的简单指令三个流水级应该可以在一个时钟周期完成,换句话说就是一个指令在一个时钟周期完成。但是稍微复杂的指令往往是超过一个时钟周期的。 这里有一点疑惑:在流水线设计的CPU中,一个时钟周期只会执行一个流水级吗?对于很简单的流水级,可能执行时间只占时钟周期的一半,那另一半就是什么也不干吗?

    作者回复: 一个流水线级就需要一个时钟周期,所以即使是无条件跳转这样的简单指令,也需要三个时钟周期。 是的,可能特定的流水线级的操作需要的时间很少,那么其他时间本质上是在“等待”。

    2019-06-10
    1
  • 活的潇洒
    老师的比喻使我们理解起来非常容易、给老师点赞 day20 笔记:https://www.cnblogs.com/luoahong/p/11434290.html

    作者回复: 谢谢支持👍

    2019-09-01
收起评论
显示
设置
留言
43
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部