1. 功耗

我们的 CPU,一般都被叫作超大规模集成电路(Very-Large-Scale Integration,VLSI)。这些电路,实际上都是一个个晶体管组合而成的。CPU 在计算,其实就是让晶体管里面的“开关”不断地去“打开”和“关闭”,来组合完成各种运算和功能。

想要计算得快,一方面,我们要在 CPU 里,同样的面积里面,多放一些晶体管,也就是增加密度;另一方面,我们要让晶体管“打开”和“关闭”得更快一点,也就是提升主频。而这两者,都会增加功耗,带来耗电和散热的问题。

在 CPU 里面,能够放下的晶体管数量和晶体管的“开关”频率也都是有限的。一个 CPU 的功率,可以用这样一个公式来表示:

功耗 ~= 1/2 ×负载电容×电压的平方×开关频率×晶体管数量

那么,为了要提升性能,我们需要不断地增加晶体管数量。同样的面积下,我们想要多放一点晶体管,就要把晶体管造得小一点。这个就是平时我们所说的提升“制程”。从 28nm 到 7nm,相当于晶体管本身变成了原来的 1/4 大小。这个就相当于我们在工厂里,同样的活儿,我们要找瘦小一点的工人,这样一个工厂里面就可以多一些人。我们还要提升主频,让开关的频率变快,也就是要找手脚更快的工人。


但是,功耗增加太多,就会导致 CPU 散热跟不上,这时,我们就需要降低电压。这里有一点非常关键,在整个功耗的公式里面,功耗和电压的平方是成正比的。这意味着电压下降到原来的 1/5,整个的功耗会变成原来的 1/25。

事实上,从 5MHz 主频的 8086 到 5GHz 主频的 Intel i9,CPU 的电压已经从 5V 左右下降到了 1V 左右。这也是为什么我们 CPU 的主频提升了 1000 倍,但是功耗只增长了 40 倍。比如说,我写这篇文章用的是 Surface Go,在这样的轻薄笔记本上,微软就是选择了把电压下降到 0.25V 的低电压 CPU,使得笔记本能有更长的续航时间。

2. 并行优化,理解阿姆达尔定律

虽然制程的优化和电压的下降,在过去的 20 年里,让我们的 CPU 性能有所提升。但是从上世纪九十年代到本世纪初,软件工程师们所用的“面向摩尔定律编程”的套路越来越用不下去了。“写程序不考虑性能,等明年 CPU 性能提升一倍,到时候性能自然就不成问题了”,这种想法已经不可行了。

多核并行,提高性能。如果想要使用这种思想,需要满足这样几个条件。

  1. 需要进行的计算,本身可以分解成几个可以并行的任务。好比上面的乘法和加法计算,几个人可以同时进行,不会影响最后的结果。
  2. 需要能够分解好问题,并确保几个人的结果能够汇总到一起。
  3. 在“汇总”这个阶段,是没有办法并行进行的,还是得顺序执行,一步一步来。

这就引出了我们在进行性能优化中,常常用到的一个经验定律,阿姆达尔定律(Amdahl’s Law)。这个定律说的就是,对于一个程序进行优化之后,处理器并行运算之后效率提升的情况。具体可以用这样一个公式来表示:

优化后的执行时间 = 受优化影响的执行时间 / 加速倍数 + 不受影响的执行时间

3. 总结延伸

我们可以看到,无论是简单地通过提升主频,还是增加更多的 CPU 核心数量,通过并行来提升性能,都会遇到相应的瓶颈。仅仅简单地通过“堆硬件”的方式,在今天已经不能很好地满足我们对于程序性能的期望了。于是,工程师们需要从其他方面开始下功夫了。

在“摩尔定律”和“并行计算”之外,在整个计算机组成层面,还有这样几个原则性的性能提升方法。

  1. 加速大概率事件。最典型的就是,过去几年流行的深度学习,整个计算过程中,99% 都是向量和矩阵计算,于是,工程师们通过用 GPU 替代 CPU,大幅度提升了深度学习的模型训练过程。本来一个 CPU 需要跑几小时甚至几天的程序,GPU 只需要几分钟就好了。Google 更是不满足于 GPU 的性能,进一步地推出了 TPU。后面的文章,我也会为你讲解 GPU 和 TPU 的基本构造和原理。
  2. 通过流水线提高性能。现代的工厂里的生产线叫“流水线”。我们可以把装配 iPhone 这样的任务拆分成一个个细分的任务,让每个人都只需要处理一道工序,最大化整个工厂的生产效率。类似的,我们的 CPU 其实就是一个“运算工厂”。我们把 CPU 指令执行的过程进行拆分,细化运行,也是现代 CPU 在主频没有办法提升那么多的情况下,性能仍然可以得到提升的重要原因之一。我们在后面也会讲到,现代 CPU 里是如何通过流水线来提升性能的,以及反面的,过长的流水线会带来什么新的功耗和效率上的负面影响。
  3. 通过预测提高性能。通过预先猜测下一步该干什么,而不是等上一步运行的结果,提前进行运算,也是让程序跑得更快一点的办法。典型的例子就是在一个循环访问数组的时候,凭经验,你也会猜到下一步我们会访问数组的下一项。后面要讲的“分支和冒险”、“局部性原理”这些 CPU 和存储系统设计方法,其实都是在利用我们对于未来的“预测”,提前进行相应的操作,来提升我们的程序性能。

参考链接:https://time.geekbang.org/column/article/93246

计算机组成原理-入门篇-04功耗与性能相关推荐

  1. 深入浅出计算机组成原理-入门篇

    通过你的CPU主频,我们来谈谈性能究竟是什么? 什么是性能?时间的倒数 响应时间/执行时间:跑的更快 吞吐率/带宽:搬得更多 和搬东西来做对比,如果我们的响应时间短,跑得快,我们可以来回多跑几趟多搬几 ...

  2. 计算机组成原理-入门篇-01冯·诺依曼体系结构

    1. 冯·诺依曼体系结构 计算机祖师爷之一冯·诺依曼(John von Neumann)提出的冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机.什么是存储程序 ...

  3. 《计算机组成原理》第04章在线测试

    <计算机组成原理>第04章在线测试 答题须知:1.本卷满分20分.            2.答完题后,请一定要单击下面的"交卷"按钮交卷,否则无法记录本试卷的成绩. ...

  4. Java架构师成长之道之计算机组成原理组成篇

    Java架构师成长之道之计算机组成原理组成篇 Java架构师成长之道 2.1 计算机总线 2.1.1 总线概述 以通用串行总线USB(Universial Serial Bus)为例子来理解什么是总线 ...

  5. CCF中学生计算机程序设计入门篇练习题讲解

    CCF中学生计算机程序设计入门篇练习题讲解 全部代码下载地址在文末链接 1.温度转换(10001) 2.三角形面积(1002) 3. 猜数游戏(1003) 4.矩形填充(1004) 5.存款收益(10 ...

  6. 【计算机组成原理】计算机组成原理——计算篇

    计算机组成原理--计算篇                   进制运算的基础 定义: 进位制是一种计数方式,又称进位计数法或位值计数法 用有限种数字符号来表示无限的数值 进位制的基数或底数:使用的数字 ...

  7. 计算机组成原理——组成篇

    文章目录 计算机组成原理 -- 组成篇 1. 计算机的总线与I/O设备 a.计算机的总线(Bus) 1.为什么要使用总线? 2.总线的两大基本特征是什么? 3.总线分为几类? 分类: 4.系统总线按照 ...

  8. 详解计算机组成原理组成篇(磁盘调度算法,cache命中率,效率,平均访问时间,以及FIFO、LFU、LRU算法。拒绝挂科)

    计算机组成原理组成篇 文章目录 计算机组成原理组成篇 一.计算机的总线与IO设备 1.1计算机的总线 总线的概述 总线的分类 总线仲裁 1.2计算机的输入.输出设备 常见的输入输出设备分 输入输出接口 ...

  9. 计算机组成原理入门了解

    计算机的基本硬件 计算机三大件:cpu(中央处理器),内存,主板 cpu是一个超级精细的印刷电路板 内存:编写的程序,打开的浏览器,运行的游戏都是要加载到内存中才能运行,包括程序读取的数据,计算得到的 ...

最新文章

  1. mui ios中form表单中点击输入框头部导航栏被推起及ios中form表单中同时存在日期选择及输入框时,日历选择页面错乱bug...
  2. bug4 导入新工程时报 Target runtime com.genuitec.runtime.generic.jee60 is not defined
  3. gRPC源码分析(c++)
  4. Map的putAll方法踩坑实记(对象深拷贝浅拷贝)
  5. Boost:bind绑定右值的测试程序
  6. 风雨彩虹,铿锵玫瑰——女足夺冠
  7. php pjax数据返回,如何将Pjax整合进网站,实现全站无刷新加载?
  8. Java调用python的程序
  9. linux-mptcp调度算法,NS-3实现MPTCP的轮询调度算法
  10. api 文件长度_上传下载API
  11. sql优化的N种方法_持续更新
  12. cocos2dx +vs2012安装教程
  13. MMKV_高性能MMKV数据交互分析-MMKV初始化
  14. 按键精灵定义全局变量_按键精灵全局环境变量
  15. KS0108控制的12864液晶屏的反白显示办法
  16. redis报错 Error getaddrinfo ENOTFOUND
  17. 在 iPad和 iPhone的浏览器上查看网页源代码
  18. 整理iOS 错误警告
  19. Python变量,常量,基础数据类型,input用户交互
  20. 《人人都是项目经理V2.0》读书笔记——第3章 需求管理——筛选干系人的需求

热门文章

  1. 打开/关闭 HP超极本鼠标触摸板
  2. 重磅!阿里云时空数据库正式免费公测
  3. 十九、文章内容展示页面设计
  4. python爬取网站上所有诗句(第三版)
  5. 概率论在实际生活的例子_概率论中几个有趣的例子
  6. 酷我音乐播放(html、css)
  7. windows恶意软件删除工具(MRT.exe)检查计算机是否感染病毒使用图解
  8. Qt获取当前时间日期或时间戳QDateTime
  9. 【图形学与游戏编程】开发笔记-基础篇1:熟悉开发环境
  10. Windows检测到一个硬盘问题解决参考