
デナードスケーリングをPythonで検証する|"微細化=省電力"が崩れた日
2026-09-21 ・ 実践
「トランジスタを小さくすれば速く・省電力になる」——2000年代半ばまで、これは魔法のように成り立っていました。デナードスケーリングです。しかしこの法則は崩れ、それが今のCPU設計を決定づけました。Pythonでその崩壊を数値で追います。ムーアの法則と対になる話です。
デナードスケーリングとは
トランジスタの寸法を係数 k で小さくすると、電圧も 1/k にでき、結果として チップの電力密度(単位面積あたりの電力)が一定に保たれる——これがデナードの法則。だから微細化するほど、同じ発熱で性能を上げられました。
準備
pip install numpy
① 理想のデナードスケーリング
寸法を0.7倍ずつ微細化したとき、電力密度が一定に保たれる様子を計算します。
import numpy as np
k = 0.7 # 1世代あたりの縮小率
V0, f0, area0 = 1.0, 1.0, 1.0
print("世代 | 電圧 | 周波数 | 面積 | 電力密度")
for gen in range(5):
scale = k ** gen
V = V0 * scale # 電圧も一緒に下げられる(理想)
f = f0 / scale # 速くなる
area = area0 * scale**2 # 面積は小さく
# 電力 ∝ C·V²·f、C ∝ 寸法, なので密度は…
power_density = (scale * V**2 * f) / area
print(f"{gen:^4} | {V:.2f} | {f:5.2f} | {area:.3f} | {power_density:.2f}")
出力では 電力密度がほぼ 1.0 のまま一定。微細化しても発熱が増えない——これが黄金時代でした。
② 電圧が下げられなくなると崩れる
ところが電圧はある限界より下げられません(トランジスタが動かなくなる)。電圧を固定したまま微細化するとどうなるか。
print("世代 | 周波数 | 電力密度(電圧下げられず)")
V_fixed = 1.0 # 電圧はこれ以上下げられない
for gen in range(5):
scale = k ** gen
f = f0 / scale
area = area0 * scale**2
power_density = (scale * V_fixed**2 * f) / area
print(f"{gen:^4} | {f:5.2f} | {power_density:.2f}")
電圧が下げられないと、電力密度が世代ごとに急増します。微細化するほどチップが熱くなり、冷却が追いつかなくなる——これが2000年代半ばに起きた「デナードスケーリングの終焉」です。
周波数が頭打ちに
電力密度=発熱が限界に達したため、クロック周波数をこれ以上上げられなくなりました。CPUの動作周波数が数GHzで頭打ちなのはこのため。「速いコア1つ」の路線が行き詰まったのです。
だからマルチコアへ
1コアを速くできないなら、コアを増やして並列に処理する——これがマルチコア化の理由です。電力の制約が、CPUの設計思想を「速い1つ」から「そこそこ速いものを複数」へ転換させました。今あなたのPCが何コアもあるのは、デナードスケーリングが終わったからなのです。
まとめ
- デナードスケーリング:微細化しても電力密度が一定に保たれる法則
- 電圧を一緒に下げられたから、微細化=省電力&高速が成立した
- 電圧が下げ止まり、電力密度が急増して法則が崩れた(2000年代半ば)
- 周波数が頭打ちになり、マルチコア化への転換を招いた
もう少し詳しく(背景と理論)
デナードスケーリングは Robert Dennard らが1974年に示した法則で、トランジスタを寸法・電圧ともに係数 k で縮小すると、単位面積あたりの消費電力が一定に保たれるというものです1。寸法が 1/k になれば速度は上がり、電圧も下げられるので、Mooreの法則による集積度向上と周波数向上を、電力密度を悪化させずに両立できました。これが1970〜2000年代前半の「微細化すればタダで速くなる」黄金時代を支えました。しかし2005年頃、しきい値電圧を下げるとリーク電流が急増して電圧を下げられなくなり、この法則は崩壊します2。以後、周波数は頭打ちになり、業界はマルチコア・専用回路・チップレットへと進化の軸を移しました3。
次の一歩 🌸
電力の計算はCMOSの消費電力、成長則はムーアの法則をPythonで、微細化の今は2nm競争へどうぞ。