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

21 | 面向流水线的指令设计(下):奔腾4是怎么失败的?

流水线执行效率降低
加大功耗和散热问题
不能提升吞吐率
流水线深度与CPU执行指令的吞吐率
控制冒险
结构冒险
数据冒险
增加功耗
增加时钟周期
影响性能
高通、华为麒麟和三星
Intel通过财力和市场份额战胜AMD
NetBurst架构被抛弃
课后思考
推荐阅读
实践应用中的依赖问题
过深的流水线
折衷
流水线长度与冒险问题
乱序执行
冒险和分支预测
流水线深度增加
移动时代的CPU之战
商业上的胜利
技术上的失败
主频提升
单个时钟周期时间缩短
指令操作细分
总结延伸
新的挑战
主频战争带来的超长流水线
CPU领域竞争焦点转移
Pentium 4和AMD Athlon竞争
性能提升
CPU流水线技术

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

上一讲,我给你初步介绍了 CPU 的流水线技术。乍看起来,流水线技术是一个提升性能的灵丹妙药。它通过把一条指令的操作切分成更细的多个步骤,可以避免 CPU“浪费”。每一个细分的流水线步骤都很简单,所以我们的单个时钟周期的时间就可以设得更短。这也变相地让 CPU 的主频提升得很快。
这一系列的优点,也引出了现代桌面 CPU 的最后一场大战,也就是 Intel 的 Pentium 4 和 AMD 的 Athlon 之间的竞争。在技术上,这场大战 Intel 可以说输得非常彻底,Pentium 4 系列以及后续 Pentium D 系列所使用的 NetBurst 架构被完全抛弃,退出了历史舞台。但是在商业层面,Intel 却通过远超过 AMD 的财力、原本就更大的市场份额、无所不用的竞争手段,以及最终壮士断腕般放弃整个 NetBurst 架构,最终依靠新的酷睿品牌战胜了 AMD。
在此之后,整个 CPU 领域竞争的焦点,不再是 Intel 和 AMD 之间的桌面 CPU 之战。在 ARM 架构通过智能手机的快速普及,后来居上,超越 Intel 之后,移动时代的 CPU 之战,变成了高通、华为麒麟和三星之间的“三国演义”。

“主频战争”带来的超长流水线

我们在第 3 讲里讲过,我们其实并不能简单地通过 CPU 的主频,就来衡量 CPU 乃至计算机整机的性能。因为不同的 CPU 实际的体系架构和实现都不一样。同样的 CPU 主频,实际的性能可能差别很大。所以,在工业界,更好的衡量方式通常是,用 SPEC 这样的跑分程序,从多个不同的实际应用场景,来衡量计算机的性能。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

CPU流水线技术是提升性能的重要技术,但超长流水线设计可能导致性能下降。以Intel的Pentium 4为例,其超长流水线设计导致功耗增加、散热问题,且在实际程序执行中存在指令依赖问题。这提示我们在评估CPU性能时应考虑实际体系架构和应用场景,而非仅以主频为标准。文章还介绍了流水线技术带来的吞吐率提升、依赖问题以及解决方案。总的来说,合理的流水线深度能提升CPU执行指令的吞吐率,但过深的流水线会增加功耗、散热问题,并且在实践中需要解决指令之间的依赖问题。这篇文章深入浅出地介绍了现代CPU设计的多个方面,适合读者快速了解现代CPU的设计。

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

全部留言(34)

  • 最新
  • 精选
  • 上善若水
    什么时候苹果用华为的芯片

    作者回复: 吴凌华同学你好, 这个恐怕很难了,特别是苹果有自己的ARM CPU设计团队。

    2020-01-03
    3
    5
  • -W.LI-
    老师好!所以Java在编译成机器码的时候会设计到指令重排序,就是为了把没有依赖关系的指令放一起,可以用流水线并发来提高效率是么?。然后再多线程里面就会采用一些关键字volatile禁止指令重排,保证数据在多线程之间的可见性。
    2019-06-23
    11
    66
  • H
    java的指令重排序,也是为了适应cpu的流水线技术,从而提高性能。对应的volatile是禁止指令重排,提供内存可见性,但不提供原子性。
    2020-12-28
    1
    21
  • test
    终于知道为什么要指令重排了!
    2020-05-30
    19
  • 隆隆
    配合Bilibili计算机组成原理视频讲解:https://www.bilibili.com/video/BV1c4411w7nd?p=2
    2020-04-21
    2
    16
  • skyun
    Java在编译成机器码的时候会设计到指令重排序,就是为了把没有依赖关系的指令放一起,可以用流水线并发来提高效率是。然后在多线程里面就会采用一些关键字volatile禁止指令重排,保证数据在多线程之间的可见性
    2020-07-10
    8
  • Linuxer
    条件分枝也是一种依赖吧
    2019-06-12
    6
  • Wilson
    徐老师的课讲得好,课后的延申阅读同样棒!比如今天这篇Modern Microprocessors, A 90-Minute Guide!
    2021-04-30
    5
  • A君
    流水线也讲平衡,不是级数越多越好,级数多了虽然可以提高指令吞吐率,但因为每级流水线要做的事情少了,就需要提高时钟频率才不会浪费算力,但这又带来功耗提升的问题。不仅如此,很多代码由于依赖关系也就是数据冒险(例如下调指令的输入等于上一条指令的输出)很难通过流水线来优化,需要指令乱序和预测等方法来优化,然而随着流水线的增多,这些方法的执行难度也会跟着升高,因此,流水线的数量并非越多越好。
    2020-06-28
    5
  • 殷勤的匠人
    ...单个时钟周期内能够完成的事情变少了。所以,只有提升时钟周期,CPU 在指令的响应时间... 此處筆誤。應是降低週期,提升「主頻」。
    2019-06-12
    1
    4
收起评论
显示
设置
留言
34
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部