04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
04 | 穿越功耗墙,我们该从哪些方面提升“性能”?
讲述:徐文浩
时长15:13大小13.90M
功耗:CPU 的“人体极限”
并行优化,理解阿姆达尔定律
总结延伸
补充阅读
课后思考
赞 143
提建议
精选留言(144)
- 大熊2019-05-07重新学习后,我又来了…… 1. 加大概率事件: 缓存机制,提高平均概率下的性能; 运行时编译热点代码的机制; Spring框架使用的单例模式(个人还不确定); 2. 通过流水线提高性能: 工作中可以尝试把一个大规模的SQL分成几个规模适当的小SQL进行执行; 并发编程; 3. 通过预测提高性能: 以前有的软件安装的时候,有一秒就安装好的感觉,之前我就在想,是不是我选择完安装路径之后,就已经开始有预安装的操作了; 使用chrome在打开几个tab页的情况下,直接关闭浏览器,再次打开浏览器之前强制关闭的tab页直接默认打开的操作(不知道是否属于预测,预测我还是需要这几个页面); 在自己练习的博客中,多张图片在上传的时候,先让图片及时上传并处于“预删除”状态,待点击提交之后,才让现有的图片变成保存的状态。 热点数据、常用的固定数据,可以先保存在redis等缓存中,等到需要的时候先从缓存中获得,如果获取失败再去查询数据库展开
作者回复: 👍你学得非常认真努力,给大家做了一个好榜样。
共 9 条评论168 - 须臾即2019-05-01有两个问题没想明白: 1.增加晶体管怎么提高运算速度? 提高主频好理解,计算的频繁一些,增加晶体管是干了什么,增加计算单元么,或者说是增加流水线控制单元。 2.cpu的电压是受了什么因素限制的? 既然电压低功耗低,那么各厂商应该都想把电压做的越低越好,现实是不容易办到,是哪些因素限制的?展开
作者回复: 须臾即他9同学你好 增加晶体管可以增加硬件能够支持的指令数量,增加数字通路的位数,以及利用好电路天然的并行性,从硬件层面更快地实现特定的指令,所以增加晶体管也是常见的提升cpu性能的一种手段。 电压的问题在于两个,一个是电压太低就会导致电路无法联通,因为不管用什么作为电路材料,都是有电阻的,所以没有办法无限制降低电压,另外一个是对于工艺的要求也变高了,成本也更贵啊。
共 7 条评论109 - 莫问流年2019-05-201.加速大概率事件 各种缓存(内存缓存、CDN缓存) 2.流水线 并发编程、异步编程 音视频播放器边播放边缓冲 3.预测 小说的下一页预加载 电商大促的CDN预热展开
作者回复: 几个例子举得都很好!而且和实践应用结合得也很好!
共 3 条评论83 - Seventy、2019-05-11老师您好,有个疑问,上节课我们讲过“程序运行CPU执行时间 = 指令数 * CPI * 时钟周期时间(Clock Cycle Time)”,而这节中提到增加晶体管数量会提升CPU性能,请问"晶体管数量"与上面的公式有什么关系呢? 还是说晶体管数量会影响上面公式的三个部分中的哪一部分?? 盼老师答复。
作者回复: 增加晶体管数量,其实是通过提供更复杂的电路支持更多的“指令”。也就会减少运行同样程序需要的指令数。 打个比方,比如我们最简单的电路可以只有加法功能,没有乘法功能。乘法都变成很多个加法指令,那么实现一个乘法需要的指令数就比较多。但是如果我们增加晶体管在电路层面就实现了这个,那么需要的指令数就变少了,执行时间也可以缩短。
共 4 条评论51 - 活的潇洒2019-05-01通读三遍全文,花了3个多小时做了笔记链接如下: https://www.cnblogs.com/luoahong/p/10800379.html
作者回复: 👍感谢分享给大家
共 10 条评论44 - pyhhou2019-05-01对于思考题: * 加速大概率事件 通常我们使用 big-O 去表示一个算法的好坏,我们优化一个算法也是基于 big-O,但是 big-O 其实是一个近似值,就好比一个算法时间复杂度是 O(n^2) + O(n),这里的 O(n^2) 是占大比重的,特别是当 n 很大的时候,通常我们会忽略掉 O(n),着手优化 O(n^2) 的部分 * 通过流水线提高性能 能够想到的是任务分解,把一个大的任务分解成好多个小任务,一般来说,分的越细,小任务就会越简单,整个框架、思路也会变得更加清晰 * 通过预测提高性能 常常在计算近似值的时候,例如计算圆周率,我们可以根据条件预设立一个精确率,高过这个精确率就会停止计算,防止无穷无尽的一直计算下去;另外就是深度优先搜索算法里面的 “剪枝策略”,防止没有必要的分支搜索,这会大幅度提升算法效率展开
作者回复: 👍算法的例子举得很好,剪枝策略的例子也很好。 不过流水线和圆周率的例子不太好,可以再想想。
共 3 条评论29 - 明月2019-05-01一个问题:面积更小使得各个晶体管的距离更短,会加速响应时间吗?我印象中是光速的
作者回复: 会的,光速也不过就是3*10的八次方,意味着一纳秒也只能走30厘米的距离,所以后面我们还会看到cpu的高速缓存也不能做太大,也是受到光速的限制。
23 - 淡2019-09-09写业务代码的if else 分支时,对于大概率出现的写在前面,减少不必要的判断?这种算“通过预测提高性能”吗
作者回复: 当然算是的
20 - Sunny2019-08-20为什么增加晶体管会使计算加快?
作者回复: Sunny同学, 你好,增加晶体管通常可以做到以下这些 1. 设计了一个更复杂的电路,让原先软件执行的事情,直接通过硬件电路解决了。也就是在CPU里增加了新指令,自然同样的程序就运行得更快了。 2. 同样功能的电路更多了,比如有了更多更大的寄存器,更多的可以并行的流水线,这样同样的指令可以同时运行不受限于有限的资源,也可以让程序算得更快。
19 - ginger2019-05-23终于理解为什么很多笔记本会出低压版本了,原来是电压的平方和功耗是正比的,也就是电压的降低对于功耗来说,降低效益最好,还记得之前选笔记本时候,我发现几乎所有的超薄本,都是低压版本的.大致是因为超薄设计导致不能使用很"给力"的散热系统吧,所以通过低压来降低功耗,尽管低压也会让CPU性能有所下降.
作者回复: 👍
14 - DreamItPossible2019-06-27手机跑分能作弊吗?怎么做? 首先,要明确手机跑分的标准,即测量的是整体性能,比如响应时间,还是单项指标性能,比如文中提到的CPU时间,或者吞吐率等 其次,手机跑分能作弊,以手机跑分测量的是程序运行的CPU时间为例,应用本文的原理:程序的CPU时间等于指令数乘以CPI乘以CPU周期,逐个来分析; 由于手机跑分是用预设好的程序来运行,那么方法一:使用针对这些预设程序专门优化的编译器和汇编器,可以减少指令数;方法二:使用流水线、预测等技术,可以减小CPI;方法三:使用超频,可以在跑分时提高主频,减小CPU周期等 作弊后的手机跑分还有参考意义吗? 如果作弊的手机跑分是针对单项指标的话,而且你又关注的该单项指标,则有意义; 如果你关注的是整体性能,那么参考意义不大; 注意,要有局部视角和系统观。展开8
- 古夜2019-05-06打孔编程那里说得太简略了,而且,看题目的意思似乎是要从打孔编程讲起,然后一步步来说计算机怎么理解打孔,如何编译,如何运行的吧,感觉文章里写反了,是不是五一有点仓促了
作者回复: 古夜同学你好,谢谢反馈。对于计算机如何编译运行,是一个挺复杂的话题了,恐怕一讲之内讲不清楚。这一讲的主要目标,还是让大家明白指令和机器码是怎么回事儿。 关于计算机如何阅读指令运行的整理流程,会在17讲讲解CPU部分的时候做深入的剖析。
8 - Juexe2019-05-021. 加速大概率事件 可能如 Redis 缓存、CDN 内容分发网络、游戏开发中常用的对象池等 2. 通过流水线提高性能 可能如多线程开发、分布式系统、DDOS攻击等 3.通过预测提高性能 浏览器的一个功能:下一页自动预加载; Web 开发中用到的一个 InstantClick.js 能够预加载 hover 的链接。 不过「加速大概率事件」和「通过预测提高性能」好像有些重合,分得不是很清楚?展开
作者回复: 👍加速大概率事件,通常指在我们确定了概率的情况下做出性能优化。而预测很多时候并不要求是大概率事件,只要平均情况下比不预测要明显好就够了。
8 - 沃野阡陌2019-05-02老师,什么是缓存?需要用程序去操作吗?和内存又有什么关系?
作者回复: 沃野阡陌同学你好,答案取决于你这里指的缓存是什么。抽象的缓存,比如我们可以用redis或者memcqched作为访问数据库的缓存。具象的有时候一般我们指cpu里内置的高速缓存,也就是l1到l3 cache。前者一般都是应用程序来操作,后者不需要程序来操作。 后者内置在cpu里,比内存还要快上10到100倍。在讲解存储器的部分我们会重点讲解高速缓存以及怎么利用高速缓存的性能来写程序。
7 - KR®2019-05-02对于我这种小白来说,能啃完这些知识点要感谢初中物理老师为我打下的物理基础 哈哈, 徐老师的讲解也太清晰了吧!!! 能看懂跟得上节奏的感觉真好~ 还要感谢高阶的同学们,我没有开发经验,看文章时遇到一些专业名词会一脸懵, 好在高阶的同学会在答疑区提问互动, 看你们的提问和回答我都会有收获!展开
作者回复: 👍谢谢支持,要坚持和大家多交流
7 - JiangPQ2019-05-11关于这一课的组织结构上一点建议: 1. 在电路设计上,并行和流水线通常是相互配合同时存在的,但是老师在讲述时将这两点分离了,我个人感觉会让不懂电路设计的读者会产生困惑。 2. 切流水线的意思是在电路的关键路径中的特定位置处插入寄存器,用空间换时间,使得切分后的关键路径的每一段具有更短的执行时间,但在总体上看单条指令的总体运行时间并不会减少。在切流水线后,电路可以使用更高的时钟频率,所以其主要目的还是在于提高主频。在文中“也是现代 CPU 在主频没有办法提升那么多的情况下,性能仍然可以得到提升的重要原因之一”的表达似乎不是那么精确。 我的理解可能也有不准确的地方,还麻烦老师指正。 前两天搞毕设,天天就是并行流水的捣腾,做硬件真的使人头秃...展开共 3 条评论6
- 牧野2019-05-11老师您好,两个问题没能理解。1:程序如何自动执行的。2,二进制概念的0和1计算机又是如何对应到高电压低电压的。
作者回复: arvin你好,第一个问题我们会在讲解cpu的第一部分详细讲解。核心是一个时钟信号和一个自动计数器。 第二个问题我们在后面讲电路的时候会介绍,可以认为就是电路的开闭。
5 - Geek_fredW2019-05-01我也不明白“加速大概率事件”在文中具体含义。加速可以粗略意识到含义。为什么要提大概率?还是缓存命中?
作者回复: Geek_fredW同学你好,因为如果加速的是一个小概率事件,那么对于整体的性能提升就很有限。 缓存就是一个典型的情况,如果缓存的数据是很少被访问的,加速的就变成了一个小概率事件,那么缓存就并不能提升太多性能也就失去意义了
共 2 条评论5 - KR®2019-05-02提问, 这里说的预测是硬件cpu层面的预测吗?硬件是固定的,通过什么方式可以预测各种不同软件的下一步呢
作者回复: 计算机硬件里面有专门的分支预测电路,后面我们会有一讲专门讲到。 如果着急想要了解的话,也可以先看一下对应的wikipedia https://en.wikipedia.org/wiki/Branch_predictor
4 - 魏宇靖2019-05-01我对大概率事件的理解是大规模(一系列)即将需要处理的事件,每个个体的概率不小,而且量极大,所以文中说把这些专门交给GPU(TPU)处理可以提高性能 不知道自己有没有理解偏
作者回复: 魏宇靖同学你好,这里的大概率事件,就是指实际程序运行频繁发生的事件。比如机器学习里面大量要做矩阵向量运算,所以我们优化矩阵向量运算就能大幅度提高性能。而对于矩阵向量运算,gpu比cpu快很多,所以在这个场景下用gpu运算就比用cpu运算整体性能提升很多
4