JA EN
体系スケーリングと電力
·★ 会員·12分で読めます

電力の物理 — なぜ電圧を下げると劇的に効くのか

スイッチ1回に払うエネルギーを導出するところから始めて、動的電力の式で電圧だけが2乗で効く理由、Dennardスケーリングとその終焉、60 mV/decadeという熱力学の壁、ダークシリコン、そして専用回路と低精度演算へ向かった必然までを1本の線でつなぎます。最後に推論の電力コストを自分で計算します。

対象textタスクhardware

スイッチ1回に、いくら払っているか

CMOS回路は、止まっているとき電気をほとんど使いません。使うのは状態が切り替わる瞬間です。だから消費電力の話は「1回の切り替えにいくら払うか」から始めるのが筋です。

論理ゲートの出力には、次の段のゲート容量と配線容量が付いています。これを合わせて CC とします。出力を0から1に変えるとは、この CC を電源電圧 VV まで充電することです。電源が押し出した電荷は Q=CVQ = CV、電源がした仕事は QV=CV2QV = CV^2。ところがコンデンサに蓄えられるのは

Estore=12CV2E_{\text{store}} = \tfrac{1}{2} C V^2
(1)

だけです。差額の半分は、充電経路のトランジスタの抵抗で熱になって消えます。そして0に戻すときは、蓄えた 12CV2\tfrac{1}{2}CV^2 が今度は放電経路で熱になる。上げて下げて1往復すると、CV2CV^2 がまるごと熱になります。 抵抗値をどれだけ下げてもこの半分は減りません(ゆっくり充電すれば減らせますが、それは遅くするということです)。

つまりこの式は、「コンデンサに実際に残るエネルギー=容量 × 電圧の2乗 ÷ 2」と言っているだけです。電圧を2倍にすると、1回の充電で動かすエネルギーは4倍になる——この2乗が、以降の話をずっと支配します。

動的電力の式

1秒あたりの熱を出すには、1往復ぶんのエネルギーに「1秒間に何回切り替わるか」を掛けます。クロック周波数を ff、1クロックあたりに実際に切り替わる割合を α\alpha(活動率)とすると

P=αCV2fP = \alpha C V^2 f
(2)

つまりこの式は、「1秒あたりの発熱は、動いた回路の数 × 1回ぶんの熱 × 1秒あたりの回数の掛け算だ」と読めます。どれかを半分にすれば熱もそのぶん減る——ただし1つだけ例外があります。

α\alpha は「無駄に動いている回路の多さ」、CC は駆動する容量の総量、VV は電源電圧、ff はクロックです。この式で決定的なのは、4つの項のうち電圧だけが2乗で入っていることです。周波数を半分にすれば電力は半分ですが、電圧を半分にできれば4分の1になります。

だから省電力設計では、まず電圧を下げられないかを考えます。ただし話はここで終わりません。

電圧を下げると、回路は遅くなる

容量 CC を電流 II で充電するのにかかる時間は tdCV/It_d \approx C V / I。分子に VV がいるので、電圧を下げれば充電すべき電荷が減って速くなりそうに見えます。ところが分母の駆動電流のほうが強く効きます。MOSFETがONのときに流せる電流はおおよそ

Ion(VVth)βI_{\text{on}} \propto (V - V_{th})^{\beta}
(3)

つまり、電流の蛇口を開けているのは電圧そのものではなく、電圧がしきい値からどれだけはみ出しているか。しかも指数が1より大きいので、そのはみ出しが半分になると、電流は半分よりさらに強く絞られる、ということです。

VthV_{th} はチャネルができ始める電圧(しきい値電圧)、指数 β\beta は微細なトランジスタで1.2〜1.3、大きなもので2程度です。電流を決めるのは VV ではなく VVthV - V_{th} の余裕分で、VVVthV_{th} に近づけると電流が急速に痩せ、遅延が跳ね上がります。

したがって電圧を下げたら周波数も落とさざるを得ません。負荷に応じて両方を動かす仕組みがDVFS(動的電圧・周波数制御)で、スマートフォンからサーバまで広く入っています。ここで ffVV にほぼ比例して動く領域を考えると、

PV2fV3P \propto V^2 \cdot f \propto V^3

つまり、電圧を下げると「1回ぶんの熱が2乗で減る」のと「1秒あたりの回数も減る」が同時に起きるので、2つの効き目が掛け合わさる、ということです。3乗は新しい物理ではなく、この重ね掛けの結果です。

電圧はおよそ3乗で効く。 電圧を2割下げるだけで電力はほぼ半分になります。逆に言えば、クロックを絞り出すために電圧を上げると、電力は3乗で跳ね返ってくる。ターボブーストの代償がこれです。

FIG 1縦軸の伸び方を決めるのは係数ではなく指数だ、という一点だけを見てほしい。O(n) の直線を周波数、O(n²) の放物線を電圧と読み替えると、同じ割合だけ削っても2乗の項のほうが桁で効いてくる理由が目で分かる。スライダーを右へ送るほど、線形と2乗の差は開いていく

電力とエネルギーを混同しない

ここで混乱しやすい点を整理します。PP は毎秒の熱ですが、私たちが電気代として払うのは仕事を1つ終えるまでの総エネルギーです。周波数を半分にすると電力は半分になりますが、同じ仕事に2倍の時間がかかるので、総エネルギーは変わりません。

Eop=αCV2E_{\text{op}} = \alpha C V^2
(4)

つまり、1回の演算に払うエネルギーは「動いた回路の数 × 駆動する容量 × 電圧の2乗」だけで決まり、それを何秒で終えたかは値札に書かれていない、ということです。

演算1回あたりのエネルギーには ff が現れません。周波数を落としてもエネルギーは減らない。減るのは電圧を下げたときだけ(そして電圧を下げるために周波数を落とす)。この区別を持っていないと、「クロックを下げたのに電気代が変わらない」という現象が理解できません。

さらにリーク電流は時間に比例して積み上がるので、遅くすればするほど漏れの総量は増えます。ここから「さっさと終わらせて眠らせる(race-to-idle)」ほうが得な領域と、「電圧を下げてゆっくり動かす」ほうが得な領域の境目が生まれます。最適な動作点はどこかにあり、端ではありません。

では、なぜ電圧を下げ続けられなかったのか。ここから先が本題です。

かつて微細化には、面倒な副作用のない黄金律がありました。寸法を にするのと同時に電圧も にし、不純物濃度を 倍にすると、各量は次のように動きます。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

コメント

コメントにはログインが必要です