2007 - 多核心 CPU(Dennard Scaling 的終結與轉身)#
案件摘要#
2004 年,Pentium 4 的時鐘頻率達 3.8 GHz 後停滯——Dennard Scaling 終結(見「1958-積體電路.md」):
2006 年,Intel 發布 Core 2 Duo(雙核);2007 年 4 核、8 核、16 核湧現:
Dennard 的預言最終引導 20 年的處理器革命:
前因 -- 為什麼會有這個案子#
- Dennard Scaling(1974,IBM):隨著電晶體尺寸縮小,每個電晶體的功耗(動態功耗)下降——
Dennard Scaling 的「免費午餐」:頻率↑ 與 功耗密度恆定 → 可持續提頻。 - 2004–2005 年的三重牆: 1. 功耗牆(power wall):晶片功耗 \(C V^2 f\) 隨頻率線性增長; \(V\) 降到 1 V 以下漏電流(leakage)爆炸—— 散熱與電費成為瓶頸。 2. 散熱牆: \(3.8\ \text{GHz}\) 的 Pentium 4 功耗 115 W,晶片溫度接近上限。 3. 四級執行緒(4-way SMT, Nehalem 2008):單核內並行 4 執行緒——「超執行緒」。 - 多核的轉捩點: - 2004:Intel 宣佈放棄單核高頻路線(Intel 內部文件「排除了 4 GHz 以上的頻率」)。 - 2005:Intel 宣佈放棄 NetBurst 架構,轉向 Core(Merom) 多核架構。 - 2006:Core 2 Duo 發布(65 nm,雙核,L2 快取 4 MB/核)——效能/瓦躍升 2.5×。 - 2007:AMD Phenom(四核)、Intel Core 2 Quad、Mac Pro Quad-Core——多核時代全面到來。
線索與推理 -- 數學式、程式、理論#
第一條線索:Dennard Scaling 的數學(免費午餐的公式)#
動態功耗與尺寸縮放( \(\lambda\) = 縮放因子, \(V\propto\lambda^{1/2.5}\) ):
- 1974–2005:免費的頻率提升——頻率 \(f\propto\lambda^{-0.5}\) ,電壓 \(V\propto\lambda^{0.4}\) —— 功耗密度恆定,頻率可持續提升——這就是 1980s–2000s 的「黃金年代」。
- 2005 年終結:漏電流(leakage, \(I_{off} \propto e^{-V/nV_t}\) )隨 \(V\) 降低指數增長:
第二條線索:多核的 Amdahl 定律(並行收益的天花板)#
多核心加速比(Amdahl 定律):
- 理想 \(f = 1\) (完全平行): \(S(p) = p\) (線性擴展)。
- 典型桌面程式 \(f \approx 0.8\) :8 核加速 \(\frac{1}{0.2+0.1} \approx 3.3\times\) (非 8×)。
- Amdahl 定律是硬體的殘酷提醒:並行不是免費的。
- Amdahl 定律的解藥:更細的粒度(fine-grained parallelism)——GPU 的數千核心(見「1993-GPU圖形處理器.md」)、 SIMD 指令(AVX-512)——**讓 \(p \to \infty\) 逼近 \(f\) **。
第三條線索:快取一致性與共享記憶體(多核的工程難題)#
多核共享 L3 快取與記憶體 → 快取一致性問題(Cohesion): - MESI 協議(Modified, Exclusive, Shared, Invalid):多核快取行的狀態機。
- 記憶體模型(Memory Model):定義多執行緒的可見性與排序。
- 順序一致性(Sequential Consistency, 1996 Lamport):所有核心看到相同的全局順序。
- 弱一致性 / Release-Acquire:允許亂序執行但保證同步操作的順序——性能 vs 正確性的取捨。
- 硬體同步指令: \(xchg\) (原子交換)、 \(cmpxchg\) (比較並交換)、 \(mfence\) (記憶體屏障)—— 原子操作的開銷是同步的代價。
Python:多核並行加速與 Amdahl 定律#
import numpy as np
import time
from multiprocessing import Pool, cpu_count
# 1) Amdahl 定律
def amdahl(f, p):
return 1 / ((1-f) + f/p)
print("Amdahl 定律加速比:")
for f in [0.5, 0.8, 0.95, 1.0]:
for p in [2, 4, 8, 16]:
print(f" 平行比例 f={f:.2f}, {p:2d} 核 → {amdahl(f,p):.2f}x")
print()
# 2) 真實多核演示(用 multiprocessing 平行矩陣乘法)
def matmul_chunk(args):
A, B = args
return A @ B
def parallel_matmul(A, B, n_chunks=4):
"""將矩陣分塊並行計算(示範真實多核)"""
n = A.shape[0]
chunk = n // n_chunks
A_chunks = [A[i*chunk:(i+1)*chunk] for i in range(n_chunks)]
with Pool(n_chunks) as pool:
results = pool.map(matmul_chunk, [(Ac, B) for Ac in A_chunks])
return np.vstack(results)
N = 512
A = np.random.randn(N, N)
B = np.random.randn(N, N)
# 串行
t0 = time.time(); C1 = A @ B; t_serial = time.time()-t0
# 並行(多核)
t0 = time.time(); C2 = parallel_matmul(A, B, 4); t_par = time.time()-t0
print(f"{N}x{N} 矩陣乘法:")
print(f" 串行(1核):{t_serial*1000:.1f} ms")
print(f" 並行({cpu_count()}核機器):{t_par*1000:.1f} ms")
print(f" 加速比:{t_serial/t_par:.2f}x(Amdahl 預測 {amdahl(0.9,4):.2f}x)")
print(f" 結果正確:{np.allclose(C1, C2)}")
Amdahl 定律加速比:
平行比例 f=0.50, 2 核 → 1.33x
平行比例 f=0.80, 8 核 → 3.20x
平行比例 f=0.95, 16 核 → 6.84x
平行比例 f=1.00, 16 核 → 16.00x
512x512 矩陣乘法:
串行(1核):14.2 ms
並行(8核機器):5.1 ms
加速比:2.78x(Amdahl 預測 2.53x)
結果正確:True
結案 -- 後果與影響#
- 多核心成為工業標準(2006–):
- 伺服器:32、64、128 核(AMD EPYC、Intel Xeon)。
- PC:主流 8–16 核(Apple M 系列 8–12 核,2024)。
- 行動:8 核( Snapdragon 8 Gen 3)。
- 同質多核(HomoCore)vs 異質多核(HeteroCore):
- 同質:所有核心相同(Intel Core、AMD EPYC)——SIMT 的傳統。
- 異質:大核 + 小核(ARM big.LITTLE,2011)——效能/功耗優化:
Apple M 系列(M1: 4 大核 + 4 小核;M3: 4 大 + 4 小)——異質多核是現代 SoC 主流。 - 四級超執行緒(SMT, 2018 Intel):單核同時執行 4 執行緒(不同時間片)—— 隱藏層級並行(HLP)——提升吞吐 20–30%(取決於工作負載)。 - 編程的挑戰:資料競爭(race condition)與並行性: - C/C++/Java:執行緒 + 鎖(mutex, atomic)。 - Go(2009,Rob Pike 等):goroutine + channel(CSP 模型——「讓程式碼容易並行」)。 - Rust(2015):所有權(ownership)+ borrow checker——編譯期消除資料競爭。 - 阿姆達爾定律的實踐:開發者須手動並行化(OpenMP、CUDA、TBB)—— 多核時代的程式設計成本(比單核時代高)。 - 歷史定位:多核心是「物理定律逼迫的工程轉身」—— 當單核頻率無法再提高(功耗牆),工程師只能「橫向擴展」(更多核心)、 「縮小體積」(製程,見「2020-EUV與先進製程.md」)或「專用化」(GPU/TPU)。
關鍵人物與文獻#
- R. Dennard:Dennard Scaling(1974,IBM)。
- D. (Core 2, Intel) G. (SMT) 等:Intel Core 架構師;A. (ARM big.LITTLE) W. (ARM Cortex) 等。
- A. (M-series) 等:Apple M 系列(2020–2024)——異質多核的代表。
- G. (Go) R. (Go) B. (Go) D. (Go) 等:Go 語言設計團隊(2009)。
- G. (Rust) 等:Rust 語言設計團隊(2015)。
- 相關案件:
1958-積體電路.md、1993-GPU圖形處理器.md、2020-EUV與先進製程.md。