计算机组成原理讲解:功耗与性能 台式机功率计算公式

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) 。这个定律说的就是 , 对于一个程序进行优化之后 , 处理器并行运算之后效率提升的情况 。具体可以用这样一个公式来表示:

推荐阅读