領域專用架構(DSA)
幾十年來,「我想讓程式跑得更快」的答案很簡單:等下一代 CPU 就好。每一代主頻更高、每個週期做的事更多,你的程式不用改就自動變快。這頓免費午餐在撞上功耗牆時結束了(Dennard 縮放在 2006 年前後失效):你仍然能在一顆晶片上塞進更多電晶體,但已經無法讓它們全部全速翻轉而不把晶片燒壞。那些剩下來、供不起電的電晶體,就叫做暗矽。領域專用架構正是針對這個難題給出的架構層面答案。與其造一顆什麼都能勉強跑的通用 CPU,不如把這些電晶體花在一台為某一類工作負載量身打造的專用引擎上,並且只點亮這類負載真正需要的那部分矽。
這筆交易是用通用性換效率。一顆通用 CPU 的大部分能量並沒有花在你真正要算的數學上,而是花在各種開銷上:猜測下一條指令是什麼、重排工作順序、在層層快取之間搬運資料、一次只解碼一條指令。DSA 把這些統統砍掉。它為目標任務把資料通路直接硬連線,採用與該負載存取模式相匹配的記憶體佈局,讓成千上萬個簡單運算並行執行,並且常常降到「夠用就好」的低精度數字。結果是,針對那一個領域,即便在同一製程節點上,每瓦效能也往往能比 CPU 高出十到一百倍。代價正是同一枚硬幣的另一面:DSA 在它那一件事上出類拔萃,在其他一切事情上一無是處。
那些耳熟能詳的例子全都是 DSA。GPU 為圖形那種大規模並行的算術而調校,如今也用於神經網路訓練。TPU 和 NPU 則專門為 AI 推論中鋪天蓋地的乘累加運算而調校。正因如此,一顆現代手機或資料中心晶片已不再是一顆大處理器,而是一組專用模組的集合,每個模組都靠把一件事做到極致高效來掙回自己佔用的那塊矽。隨著全面的電晶體縮放放慢腳步,專用化正越來越成為真正效能提升的來源。
general CPU domain-specific (e.g. NPU) +---------------------+ +---------------------------+ | fetch / decode | | tiny control | | branch predict | | | | out-of-order sched | | +---------------------+ | | 1-4 wide ALU | | | thousands of MAC | | | deep L1/L2/L3 cache | <--> | | units, in parallel | | | | | +---------------------+ | | (overhead dominates)| | data path matched to | +---------------------+ | the one workload | good at everything, +---------------------------+ great at nothing great at ONE thing/watt
通用 CPU 把大部分面積和功耗花在靈活性上(預測、調度、快取);領域專用架構則幾乎把這些全都花在某一個工作負載的實際計算上,以通用性換取每瓦效能。
專用化是個移動的靶子:DSA 只有在它的工作負載保持穩定時才划算,因為正是那份硬連線的高效率,讓它在演算法發生變化時極難改作他用。