【计算机组成原理】学习笔记——总目录

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

  • 引言
  • 一、重要知识点
    • 1、CPU及计算机整机性能衡量标准【SPEC跑分程序】:
    • 2、大家判断CPU性能的标准【主频(错误的)】
    • 3、日常 手机/电脑CPU的流水线深度【14级】
    • 4、奔腾4的流水线深度【20级、31级】
    • 5、Pentium 4失败的原因【功耗大、性能差】
  • 二、总结【个人总结的重点】

引言

本节内容直接总结最重要的部分,原文里有很多故事。

一、重要知识点

1、CPU及计算机整机性能衡量标准【SPEC跑分程序】:

我们其实并不能简单地通过 CPU 的主频,就来衡量 CPU 乃至计算机整机的性能。因为不同的 CPU 实际的体系架构和实现都不一样。同样的 CPU 主频,实际的性能可能差别很大。所以,在工业界,更好的衡量方式通常是,用 SPEC 这样的跑分程序,从多个不同的实际应用场景,来衡量计算机的性能

2、大家判断CPU性能的标准【主频(错误的)】

但是,跑分对于消费者来说还是太复杂了。在 Pentium 4 的 CPU 面世之前,绝大部分消费者并不是根据跑分结果来判断 CPU 的性能的。大家判断一个 CPU 的性能,通常只看 CPU 的主频。而 CPU 的厂商们也通过不停地提升主频,把主频当成技术竞赛的核心指标

3、日常 手机/电脑CPU的流水线深度【14级】

Pentium 4 之前的 Pentium III CPU,流水线的深度是 11 级,也就是一条指令最多会拆分成 11 个更小的步骤来操作,而 CPU 同时也最多会执行 11 条指令的不同 Stage。随着技术发展到今天,你日常用的手机 ARM 的 CPU 或者 Intel i7 服务器的 CPU,流水线的深度是14 级。

4、奔腾4的流水线深度【20级、31级】

为了达到这个 10GHz,Intel 的工程师做出了一个重大的错误决策,就是在 NetBurst 架构上,使用超长的流水线:
2000 年发布的 Pentium 4 的流水线深度是多少呢?答案是 20 级,比 Pentium III 差不多多了一倍,而到了代号为 Prescott 的 90 纳米工艺处理器 Pentium 4,Intel 更是把流水线深度增加到了 31 级

要知道,增加流水线深度,在同主频下,其实是降低了 CPU 的性能。因为一个 Pipeline Stage,就需要一个时钟周期。那么我们把任务拆分成 31 个阶段,就需要 31 个时钟周期才能完成一个任务;而把任务拆分成 11 个阶段,就只需要 11 个时钟周期就能完成任务。在这种情况下,31 个 Stage 的 3GHz 主频的 CPU,其实和 11 个 Stage 的 1GHz 主频的 CPU,性能是差不多的。事实上,因为每个 Stage 都需要有对应的 Pipeline 寄存器的开销,这个时候,更深的流水线性能可能还会更差一些。

5、Pentium 4失败的原因【功耗大、性能差】

Pentium 4 最终成为 Intel 在技术架构层面的大失败的原因:
第一个,自然是我们在第 3 讲里讲过的功耗问题。提升流水线深度,必须要和提升 CPU 主频同时进行。因为在单个 Pipeline Stage 能够执行的功能变简单了,也就意味着单个时钟周期内能够完成的事情变少了。所以,只有提升时钟周期,CPU 在指令的响应时间这个指标上才能保持和原来相同的性能。

同时,由于流水线深度的增加,我们需要的电路数量变多了,也就是我们所使用的晶体管也就变多了。

主频的提升和晶体管数量的增加都使得我们 CPU 的功耗变大了。这个问题导致了 Pentium 4 在整个生命周期里,都成为了耗电和散热的大户。而 Pentium 4 是在 2000~2004 年作为 Intel 的主打 CPU 出现在市场上的。这个时间段,正是笔记本电脑市场快速发展的时间。在笔记本电脑上,功耗和散热比起台式机是一个更严重的问题了。即使性能更好,别人的笔记本可以用上 2 小时,你的只能用 30 分钟,那谁也不爱买啊!更何况,Pentium 4 的性能还更差一些。

第二个,就是上面说的流水线技术带来的性能提升,是一个理想情况。在实际的程序执行中,并不一定能够做得到
还回到我们刚才举的三条指令的例子。如果这三条指令,是下面这样的三条代码,会发生什么情况呢?

int a = 10 + 5; // 指令1
int b = a * 2; // 指令2
float c = b * 1.0f; // 指令3

我们会发现,指令 2,不能在指令 1 的第一个 Stage 执行完成之后进行。因为指令 2,依赖指令 1 的计算结果。同样的,指令 3 也要依赖指令 2 的计算结果。这样,即使我们采用了流水线技术,这三条指令执行完成的时间,也是 200 + 300 + 600 = 1100 ps,而不是之前说的 800ps。而如果指令 1 和 2 都是浮点数运算,需要 600ps。那这个依赖关系会导致我们需要的时间变成 1800ps,和单指令周期 CPU 所要花费的时间是一样的。

依赖问题:数据冒险(后一条指令的输入依赖前一条指令的输出)、结构冒险、控制冒险。

对应这些冒险问题,我们也有在乱序执行、分支预测等相应的解决方案。我们在后面的几讲里面,会详细讲解对应的知识。

但是,我们的流水线越长,这个冒险的问题就越难一解决。这是因为,同一时间同时在运行的指令太多了。如果我们只有 3 级流水线,我们可以把后面没有依赖关系的指令放到前面来执行。这个就是我们所说的乱序执行的技术。比方说,我们可以扩展一下上面的 3 行代码,再加上几行代码。

int a = 10 + 5; // 指令1
int b = a * 2; // 指令2
float c = b * 1.0f; // 指令3
int x = 10 + 5; // 指令4
int y = a * 2; // 指令5
float z = b * 1.0f; // 指令6
int o = 10 + 5; // 指令7
int p = a * 2; // 指令8
float q = b * 1.0f; // 指令9

我们可以不先执行 1、2、3 这三条指令,而是在流水线里,先执行 1、4、7 三条指令。这三条指令之间是没有依赖关系的。然后再执行 2、5、8 以及 3、6、9。这样,我们又能够充分利用 CPU 的计算能力了。

但是,如果我们有 20 级流水线,意味着我们要确保这 20 条指令之间没有依赖关系。这个挑战一下子就变大了很多。毕竟我们平时撰写程序,通常前后的代码都是有一定的依赖关系的,几十条没有依赖关系的指令可不好找。这也是为什么,超长流水线的执行效率发而降低了的一个重要原因。

二、总结【个人总结的重点】

  • 奔腾4是失败的原因:

    • 1)提升流水线深度(20级、31级)—>增大主频(10G)—>晶体管增加—>功耗变大,用户使用时间变短;
    • 2)由于有指令 依赖问题【数据冒险、结构冒险、控制冒险】的存在—>流水线深度的增加,会使解决依赖问题又会是一个大问题—>超长流水线的 执行效率降低,性能更差了。
  • CPU 乃至计算机整机的性能: 不能简单地通过 CPU 的主频来衡量。因为不同的 CPU 实际的体系架构和实现都不一样。同样的 CPU 主频,实际的性能可能差别很大。

  • 在工业界,更好的衡量方式通常是:用 SPEC 这样的跑分程序,从多个不同的实际应用场景,来衡量计算机的性能

【计算机组成原理】学习笔记——总目录

【21】面向流水线的指令设计(下):奔腾4是怎么失败的?相关推荐

  1. 深入计算机组成原理(二十)面向流水线的指令设计(上):一心多用的现代CPU

    前面我们用了三讲,用一个个的电路组合,制作出了一个完整功能的CPU.这里面一下子给你引入了三个"周期"的概念,分别是指令周期.机器周期(或者CPU周期)以及时钟周期. 你可能会有点 ...

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

     00:00 1.0x  讲述:徐文浩 大小:9.48M 时长:10:20 前面我们用了三讲,用一个个的电路组合,制作出了一个完整功能的 CPU.这里面一下子给你引入了三个"周期&quo ...

  3. 深入浅出计算机组成原理21-面向流水线的指令设计(下):奔腾4是怎么失败的?

    "主频战争"带来的超长流水线 我们在第 3 讲里讲过,我们其实并不能简单地通过 CPU 的主频,就来衡量 CPU 乃至计算机整机的性能.因为不同的 CPU 实际的体系架构和实现都不 ...

  4. 深入浅出计算机组成原理20-面向流水线的指令设计(上):一心多用的现代CPU

    愿得一心人,白首不相离:单指令周期处理器 学过前面三讲,你现在应该知道,一条 CPU 指令的执行,是由"取得指令(Fetch)- 指令译码(Decode)- 执行指令(Execute) &q ...

  5. DFX:面向产品生命周期的设计

    第一章 引言 DFX方法和技术是当前设计方法论和设计支持技术的重要研究内容之一,DFX是产品开发的有效方法和技术.下面为DFX的一般思想和步骤,对部分DFX进行详细说明和比较. 自80年代以来,市场化 ...

  6. 【数据分发服务DDS】软件定义汽车【二】- 面向服务的架构设计

    引言 上一篇文章主要介绍了电子电气架构.车载操作系统.基础软件平台等之间的关系,以及软件定义汽车的基本概念,本篇将继续深入,重点阐述三个问题: 智能电动汽车软件范畴 软件+硬件升级的基础 面向服务的软 ...

  7. 【计算机组成原理】流水线式指令执行

    文章目录 前言 一.处理器的构成 二.数据通路 1. 流水线工作 2. 冒险 3. 流水线寄存器 三.FPGA相比于CPU的速度优势 总结 前言 最近在阅读<计算机组成与设计 硬件/软件接口(原 ...

  8. 面向过程的软件设计方法

    面向过程的软件设计方法 前面主要是对系统的分析,从而明确我们系统的逻辑模型.也就是说,通过前面几章我们清楚了"系统需要做什么?".而软件设计阶段主要任务则是要实现系统逻辑模型向物流 ...

  9. 区别 和esc 打印指令tsc_Linux 下的这些高效指令,是你快速入门运维的神器

    欢迎大家一起学习交流 正在跳转​jq.qq.com Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要 ...

最新文章

  1. R语言ggplot2可视化:绘制堆叠的密度图(Stacked Area Chart)
  2. Centos中基于IP,域名,端口的虚拟主机搭建图文教程
  3. Squid 反向代理服务器配置
  4. SAP新总账 凭证分割
  5. Linux 浏览网址汇集
  6. 定时自动刷新网页在线工具分享
  7. 百度 Serverless 架构揭秘与应用实践
  8. SpringBoot加载静态资源
  9. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_1 回顾Mybatis的环境搭建-实现查询所有功能
  10. 关于Excel导入SQLServer的说明
  11. 使用js实现简单的注册验证
  12. ThinkPad T430i黑苹果Yosemite 10.10.3成功显卡驱动
  13. PGP加密并签名电子邮件
  14. 智慧城市、智慧工地、平安城市、雪亮工程等监控项目中应用SkeyeVSS国标GB28181流媒体服务
  15. 解密 RubyEncoder
  16. 金融 数据库 mysql_MySQL 和 PostgreSQL 哪个更适合做金融数据库
  17. 树莓派与win10主机传输文件方式(未完,占坑)
  18. ip-guard如果服务器 IP 地址或机器名变更之后对客户端或控制台会有影响吗?
  19. 项目管理之敏捷开发总结
  20. 关于移动端适配100vh的问题

热门文章

  1. date 减去固定时长_如何使用 dateadd函数从日期减去一年
  2. 新手操作PS技巧 - photoshop切片导出格式默认为gif的修改方法
  3. 国浩视点 | 互联网数据中心(IDC)与智算中心的发展趋势及行业监管
  4. 解决桌面图标标签变得不透明
  5. c++遍历文件夹下所有图片
  6. 1019: 谁是老二(结构体)
  7. Python界面编程第十一课:Pyside2 (Qt For Python)创建进度条
  8. pyecharts做柱形图(简)
  9. 2021-2027全球及中国平板电脑支架行业研究及十四五规划分析报告
  10. C语言——计算时间差、求平均值