# 1.5 集成电路的功耗与能耗趋势
<!-- source: p0041 -->

今天，对几乎所有类别的计算机而言，能耗都是设计者面临的最大挑战。首先，电力必须送入芯片并分配到各处；现代微处理器仅电源和接地就要占用数百个引脚和多层互连。其次，消耗的电能会转化为热量，必须将这些热量导出。

<!-- source: p0042 -->

## 从系统角度看功率与能耗 {#system-perspective}

系统体系结构设计者或用户，应如何看待性能、功率和能耗？从系统设计者的角度来看，主要有三个问题需要考虑。

第一，处理器可能需要的**最大功率**是多少？满足这一需求，可能是确保处理器正确运行的重要条件。例如，如果处理器试图从供电系统汲取超过其供给能力的功率，即所需电流超过系统能够提供的电流，通常就会引起电压下降，进而导致器件工作异常。现代处理器的功耗变化范围很大，峰值电流也很高；因此，它们提供了 voltage indexing 方法，使处理器能够降低运行速度，并在更大的余量内调节电压。显然，这会降低性能。

第二，处理器的**持续功耗**是多少？这一指标通常称为**热设计功耗（thermal design power，TDP）**，因为它决定了散热要求。TDP 既不是峰值功耗——峰值往往可达到它的 1.5 倍——也不是某次计算实际消耗的平均功率；后者很可能更低。系统的电源通常按超过 TDP 的容量配置，散热系统的设计能力一般应达到或超过 TDP。如果散热不足，处理器的结温可能超过上限，导致器件失效，甚至造成永久性损坏。由于最高功耗以及由此产生的热量和温升，可能超过 TDP 所规定的长期平均水平，现代处理器提供了两种辅助热管理机制。首先，当温度接近结温上限时，电路会降低时钟频率，以降低功耗；如果这一措施无效，第二级热过载保护就会触发，关闭芯片电源。

设计者和用户应考虑的第三个因素是**能耗与能效**。回想一下，功率就是单位时间内的能量：1 W＝每秒 1 J。比较处理器时，应当采用能耗还是功率？一般来说，能耗始终是更合适的指标，因为它与某项具体任务以及完成任务所需的时间相关。具体而言，完成一项工作负载的能耗，等于平均功率乘以该工作负载的执行时间。

因此，要判断两个处理器中哪一个完成某项任务的效率更高，就需要比较执行该任务的能耗，而不是功率。例如，处理器 A 的平均功耗可能比处理器 B 高 20%，但如果 A 只需 B 所用时间的 70% 就能完成任务，它的能耗便是 B 的 \(1.2\times0.7=0.84\)，显然更好。

有人可能认为，在大型服务器或云环境中，工作负载通常可以假定为无穷无尽，所以只考虑平均功率就足够了；这种看法会产生误导。如果云中的处理器全是 B 而不是 A，那么在消耗相同能量的情况下，它完成的工作会更少。用能耗比较不同方案，就能避免这一陷阱。只要工作负载固定，无论是仓库规模的云，还是一部智能手机，比较能耗都是比较计算机方案的正确方法。

<!-- source: p0043 -->

这是因为，云的电费和智能手机的续航时间，都由消耗的能量决定。

那么，功耗何时是有用的度量？它最主要的合理用途是作为**约束**：例如，一颗采用风冷的芯片可能被限制在 300 W 以内。在工作负载固定时，功耗也可以作为指标，但这不过是“每项任务的能耗”这一真正指标的另一种表现形式。

## 微处理器内部的能耗与功耗 {#microprocessor-energy}

对于 CMOS 芯片，传统上最主要的能量消耗来自晶体管开关，也称为**动态能耗（dynamic energy）**。每个晶体管所需的能量，与它所驱动的电容负载以及电压平方的乘积成正比：

$$
\mathrm{Energy}_{\mathrm{dynamic}}
\propto \mathrm{Capacitive\ load}\times\mathrm{Voltage}^{2}
$$

这里，Energy 为能量，Capacitive load 为电容负载，Voltage 为电压。上式表示一次 \(0\to1\to0\) 或 \(1\to0\to1\) 逻辑转换脉冲的能量。一次单独转换，即 \(0\to1\) 或 \(1\to0\)，其能量为：

$$
\mathrm{Energy}_{\mathrm{dynamic}}
\propto \mathrm{Capacitive\ load}\times\mathrm{Voltage}^{2}
$$

每个晶体管所需的功率，就是单次转换能量与转换频率的乘积。原书此处列出的公式为：

$$
\mathrm{Energy}_{\mathrm{dynamic}}
\propto \mathrm{Capacitive\ load}\times\mathrm{Voltage}^{2}
$$

> **译注：** 原页确实将上式印成了能量关系，并未出现前一句所说的“功率”与“转换频率”。由功率＝单次转换能量×每秒转换次数，可直接得到相应关系 \(P_{\mathrm{dynamic}}\propto CV^2f_{\mathrm{switch}}\)。上式不是完整的动态功率公式。前两式使用的是比例符号，未写出完整脉冲与单次转换之间的常数因子。

对于固定任务，降低时钟频率可以降低功率，但不能降低能耗。

显然，降低电压能够大幅降低动态功耗和能耗，因此，二十年间电压从 5 V 降到了略低于 1 V。电容负载取决于输出端连接的晶体管数量，以及所用工艺；工艺决定了连线和晶体管的电容。

### 例：降低电压与频率 {#example-dvfs}

**问题。** 当今一些微处理器采用可调电压设计，电压降低 15% 时，频率也可能降低 15%。这对动态能耗和动态功耗会有什么影响？

**解答。** 电容保持不变，因此，能耗的变化由电压平方之比决定：

$$
\frac{\mathrm{Energy}_{\mathrm{new}}}{\mathrm{Energy}_{\mathrm{old}}}
=\frac{(\mathrm{Voltage}\times0.85)^2}{\mathrm{Voltage}^2}
=0.85^2=0.72
$$

也就是动态能耗降至原来的约 72%。计算功率时，还要乘上转换频率之比：

<!-- source: p0044 -->

$$
\frac{\mathrm{Power}_{\mathrm{new}}}{\mathrm{Power}_{\mathrm{old}}}
=0.72\times
\frac{\mathrm{Frequency}_{\mathrm{switched}}\times0.85}
{\mathrm{Frequency}_{\mathrm{switched}}}
=0.61
$$

因此，动态功耗降至原来的约 61%。

工艺从一代演进到下一代时，参与开关的晶体管数量和开关频率的增加，超过了负载电容与电压降低所带来的收益，导致总体功耗和能耗上升。最早的微处理器功耗不到 1 W，最早的 32 位微处理器，例如 Intel 80386，功耗约为 2 W，而一颗 2.4 GHz 的 Intel Xeon Platinum 8380 消耗 270 W。这些热量必须从边长约 2.5 cm 的芯片上散出，因此我们已经接近风冷所能达到的极限，并且在这个位置停留了将近十年。Intel 和 NVIDIA 最近公布的芯片中，有些 TDP 接近 1000 W，需要液冷。

根据前面的公式，如果不能降低电压，也不能增加每颗芯片的功率，那么时钟频率的增长理应放缓。图 1.11 表明，自 2003 年以来，事实正是如此；即使是图 1.1 中每年性能最高的微处理器，也不例外。注意，时钟频率趋平的这一时期，正好对应图 1.1 中性能提升较慢的阶段。

配电、散热和防止局部热点，已经成为日益艰巨的挑战。如今，限制晶体管使用的主要因素是能耗；过去则是硅片面积。因此，尽管时钟频率停滞、供电电压不再下降，现代微处理器仍采用多种技术来努力提高能效：

1. **把“无事可做”这件事做好。** 现在，大多数微处理器都会关闭非活动模块的时钟，以节省能量、降低动态功耗。例如，没有浮点指令执行时，就关闭浮点单元的时钟；某些核心空闲时，就停止这些核心的时钟。
2. **动态电压频率调节（DVFS）。** 第二种技术直接来自前面的公式。PMD、笔记本电脑，甚至服务器，都有活动较少的时段，不必始终运行在最高时钟频率和电压下。现代微处理器通常提供几个可选的时钟频率和电压工作点，以降低功率和能耗。图 1.12 绘出了工作负载下降时，服务器在 2.4、1.8 和 1 GHz 三种时钟频率下通过 DVFS 所能获得的功耗节省。每降低一级，整个服务器的功耗约可节省 10%–15%。
3. **面向常见情况设计。** PMD 和笔记本电脑经常处于空闲状态，因此，内存和存储设备提供低功耗模式来节省能量。例如，DRAM 提供一系列功耗逐级降低的模式，以延长 PMD 和笔记本电脑的电池续航；磁盘方面也曾有人提出，让磁盘在不使用时进入降低转速的模式，以节省功耗。

   <!-- source: p0045 -->

   然而，处于这些模式时，DRAM 和磁盘都无法被访问；不论访问频率多低，要读写都必须先恢复到完全活动状态。如前所述，PC 微处理器则是按高工作温度下的重负载使用来设计的，并依赖片上温度传感器判断何时应自动减少活动，以防过热。这种“紧急降速”机制，使制造商能够按更常见的情况进行设计；如果用户确实运行了远比通常情况耗电的程序，再由这一安全机制提供保护。

4. **超频。** Intel 从 2008 年开始提供 Turbo 模式：芯片判断短时间内以更高时钟频率运行是安全的，就提高频率，可能只加速少数几个核心，直到温度开始上升。例如，2.8 GHz 的 Xeon E-2378G 可以短时间运行在 5.1 GHz，见图 1.11。

   <!-- source: p0046 -->

   事实上，图 1.1 中自 2008 年起每年性能最高的微处理器，都提供临时超频功能。到 2016 年为止，超频频率通常比标称值高约 10%；此后，Turbo 频率则高出 30%–80%。对于单线程代码，这些微处理器可以只保留一个核心工作、关闭其他核心，并让该核心运行得更快。注意，虽然操作系统能够关闭 Turbo 模式，但开启后，并不会在实际进入加速状态时通知程序员；因此，他们可能惊讶地发现，程序性能竟会随室温而变化！

5. **异构核心。** 手机早已同时采用速度快、功耗高的核心，以及速度较慢、能效更高的核心。例如，Apple iPhone 14 Pro 智能手机的芯片有两个高性能核心和四个高能效核心。目标是在维持用户所期望响应能力的前提下，用能效最高的处理器运行应用，以节省能量。智能手机甚至还配备了面向狭窄领域的专用处理器，以进一步提高这些任务的能效。

<!-- source: p0045 -->

![从 1978 年到 2022 年的微处理器时钟频率曲线，2003 年后标准频率基本趋平](/figures/ch01/fig-1-11.png)
{#fig-1.11 num="1.11" caption="图 1.1 所列微处理器的时钟频率增长。"}

**图 1.11（续）。** 1978–1986 年，时钟频率每年提高不到 15%，性能则每年提高 22%。在 1986–2003 年这个性能年增 52% 的“复兴时期”，时钟频率以每年近 40% 的速度猛增。此后，时钟频率几乎停滞。自 2008 年起，Intel 提供 Turbo 模式，使芯片能够暂时以更高频率运行，直到温度过高。即便是 Turbo 频率，2011–2022 年的年增幅也只有约 2%。

图内术语：Clock rate＝时钟频率；year＝年；turbo＝Turbo 模式。图中的产品名称保留英文，年份与 MHz 数值均为原书数据。

<!-- source: p0046 -->

![服务器在 2.4、1.8 和 1 GHz 下的功耗与计算负载关系，以及 DVS 节省比例](/figures/ch01/fig-1-12.png)
{#fig-1.12 num="1.12" caption="服务器在三种电压与频率级别下的功耗、计算负载，以及相应的能量节省。"}

**图 1.12（续）。** 在 1.8 GHz 下，服务器最多只能处理约三分之二的工作负载，才能不违反服务水平要求；在 1 GHz 下，则只能安全地处理三分之一。引自 Barroso、Hölzle 和 Ranganathan（2019）的图 5.11。

图内术语：Power (% of peak)＝功耗占峰值的百分比；Compute load (%)＝计算负载百分比；Idle＝空闲；DVS savings (%)＝动态电压调节带来的节省百分比。

虽然传统上认为动态功耗是 CMOS 功耗的主要来源，**静态功耗**如今也成为一个重要问题，因为即使晶体管处于关闭状态，仍会有漏电流流过。原书此处列出的公式为：

$$
\mathrm{Energy}_{\mathrm{dynamic}}
\propto \mathrm{Capacitive\ load}\times\mathrm{Voltage}^{2}
$$

> **译注：** 原页在静态功耗段落中再次印出了动态能量公式。根据电功率定义，这里应讨论 \(P_{\mathrm{static}}=I_{\mathrm{leakage}}V\)，其中 \(I_{\mathrm{leakage}}\) 为漏电流。上面的原式仅为忠实呈现源文，不能用来计算静态功耗。

也就是说，静态功耗与器件数量成正比。

因此，即使晶体管闲置，增加晶体管数量也会增加功耗；晶体管尺寸更小的处理器，漏电流还会增大。于是，超低功耗系统甚至会切断非活动模块的供电，即采用**电源门控（power gating）**，以控制漏电造成的损耗。

<!-- source: p0047 -->

2011 年，设计目标是将漏电功耗控制在总功耗的 25%；高性能设计的漏电功耗有时远高于这一目标，可达到总功耗的 50%。部分原因是它们拥有大型 SRAM 缓存，而 SRAM 必须持续供电，才能保持所存储的值——SRAM 中的 S 就是 static。要阻止漏电，唯一的办法是关闭芯片部分区域的电源。

最后，处理器仅占整个系统能耗的一部分。因此，采用速度更快、处理器自身能效较低的方案，使系统其余部分更早进入休眠状态，有时反而是合理的。这一策略称为 **race-to-halt**。

功率和能耗的重要性，促使人们更严格地审视创新方案的效率。如今，主要评价指标是每焦耳完成的任务数，或每瓦性能；过去则关注每平方毫米硅片所提供的性能。这种新指标会影响利用并行性的方式，第 4 章和第 5 章将进一步说明。

## 能耗限制带来的计算机体系结构转变 {#energy-driven-architecture}

随着晶体管技术的进步放缓，体系结构设计者必须从其他方面寻找提高能效的办法。事实上，在给定的能耗预算下，如今很容易设计出这样一种微处理器：它包含的晶体管太多，无法全部同时开启。这种现象称为 **dark silicon（暗硅）**，因为在热约束下，芯片中很大一部分在任何时刻都不能被使用，只能保持“黑暗”。这一认识促使设计者重新审视处理器设计的基本原则，以寻求更高的单位能耗性能。

图 1.13 列出了现代计算机基本构件的能耗，其中一些比值大得令人惊讶。例如，一次 32 位浮点加法消耗的能量，是一次 8 位整数加法的 50 倍。

![TSMC 7 nm 工艺下算术运算、SRAM 访问和 DRAM 访问的能耗表及相对能耗柱形图](/figures/ch01/fig-1-13.png)
{#fig-1.13 num="1.13" caption="TSMC 7 nm 工艺节点下，算术运算以及 SRAM、DRAM 访问的能耗比较（Jouppi et al., 2021）。"}

图内术语：Operation＝操作；Energy (pJ)＝能量（pJ）；Relative Energy＝相对能耗。右图编号与下表第一列一一对应，以 8 位整数加法为基准。

| 编号 | 操作 | 能量（pJ） | 相对能耗 |
| --- | --- | ---: | ---: |
| 1 | 8 位整数加法 | 0.007 | 1 |
| 2 | 32 位整数加法 | 0.030 | 4 |
| 3 | BFloat16 加法 | 0.110 | 16 |
| 4 | IEEE FP16 加法 | 0.160 | 23 |
| 5 | IEEE FP32 加法 | 0.380 | 54 |
| 6 | 8 位整数乘法 | 0.070 | 10 |
| 7 | 32 位整数乘法 | 1.480 | 211 |
| 8 | BFloat16 乘法 | 0.210 | 30 |
| 9 | IEEE FP16 乘法 | 0.340 | 49 |
| 10 | IEEE FP32 乘法 | 1.310 | 187 |
| 11 | 从 8 KB SRAM 读取 32 bit | 7.500 | 1071 |
| 12 | 从 1 MB SRAM 读取 32 bit | 14.000 | 2000 |
| 13 | 从 DDR4 DRAM 读取 32 bit | 1300.000 | 185,714 |
{.wide .expand}

<!-- source: p0048 -->

不过，最大的差异来自内存：一次 32 位 DRAM 访问的能耗，几乎是一次 8 位加法的 200,000 倍。小型 SRAM 的能效是 DRAM 的 175 倍，这表明，谨慎使用缓存和内存缓冲区至关重要。

“尽量降低每项任务的能耗”这一新设计原则，结合图 1.13 所示的相对能耗，启发了计算机体系结构的一条新方向，第 7 章将加以介绍。领域专用处理器通过减少宽位浮点运算，并配置专用存储器以减少 DRAM 访问，来节省能量；再把节省下来的能量用于支持比传统处理器多 10–1000 个、位宽较窄的算术单元。尽管这种处理器只能完成有限的一组任务，但在这些任务上，它们的速度和能效都远高于通用处理器。

正如医院既有全科医生，也有专科医生一样，在这个重视能耗的世界里，计算机已经成为两类核心的组合：一类是可以承担任何任务的通用核心，另一类是能把少数几件事做得极好、而且效率更高的专用核心。

## 计算机能耗对全球气候变化的影响 {#climate-impact}

全球气候变化是当今社会面临的一项巨大挑战。计算的快速增长，也理所当然地引发了人们对其碳足迹的担忧。

排放可以分为：

- **运行排放（operational）**：来自硬件运行所消耗的能量；对服务器而言，也包括数据中心的额外开销。
- **隐含排放（embodied）**：还计入相关各个组成部分在制造过程中产生的碳排放，从芯片制造一直到数据中心建筑施工。

隐含排放成本更难计算，因为必须逐层追溯至最初的制造来源，核算各阶段排放，再把中间各环节直至最终产品的排放累加起来。

运行能耗为：

$$
\text{能耗}
=\text{执行时间}\times\text{计算机数量}
\times\text{每台计算机的平均功率}
$$

对数据中心而言，还有一个反映能量送达内部计算机时效率的因素，称为**电能使用效率（Power Usage Effectiveness，PUE）**，第 6 章将加以介绍。

<!-- source: p0049 -->

能耗以千瓦时（kWh）计量，排放以千克二氧化碳当量（CO₂e）计量；CO₂e 也把甲烷等温室气体计算在内。排放量的计算公式为：

$$
\mathrm{CO_2e}
=\text{能耗（kWh）}\times\text{每 kWh 对应的 }\mathrm{CO_2e}\text{ 排放}
$$

能耗相对容易计算，但最后一项很难确定：根据主要能源来源的不同，各地之间可能相差 5–10 倍（Patterson et al., 2022）。煤炭是最不清洁的能源，天然气较清洁，但仍含碳；太阳能、风能、核能和水电则是无碳能源的例子。以 Google 的能源来源为例，2020 年，其新加坡数据中心所用能源中只有 4% 是无碳能源，而芬兰数据中心的比例达到 94%。即使在同一国家，差异也可能很大：在美国，内华达州数据中心的这一比例为 19%，爱荷华州则达到 93%。Google 之所以能够达到如此高的比例，是通过签约采购可再生能源，降低本地电网供电所对应的碳排放。以爱荷华州为例，那里昼夜都有充足的风能。

计算机体系结构设计者可以通过提高所设计计算机的运行能效，并学习如何降低其制造过程中的隐含碳足迹，帮助减少信息技术的碳足迹。
