JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

摩爾定律之後:如今的進步從何而來

五十年來,每一代新晶片都自顧自地變快——等個兩年,你的程式碼就免費跑得更快。那頓免費的午餐結束了。本階最後一段旅程的開篇導覽,要解釋舊的擴展定律為何卡住、如今的速度從何而來(專門化、更好的記憶體、協同設計),以及那門比任何單一技術都活得更久的、計算機結構之craft(工藝)。

持續了五十年的免費午餐

在計算的大半歷史裡,一個想要程式碼更快的程式設計師,只要等就好。每隔一兩年就有一顆新晶片問世,把同一支程式跑得明顯更快——不必重寫、不費力氣,只需耐心。撐起那份魔法的,是兩條著名的觀察。摩爾定律注意到:你能塞進一顆晶片的電晶體數量,大約每兩年就翻一倍,因為每一代電晶體都縮得更小。更多電晶體意味著更大的快取、更深的管線、更多聰明把戲的空間。這是大多數人聽過的那一半。

比較沒那麼出名、卻同樣關鍵的另一半,是 Dennard 縮放。它說:電晶體縮小時,功率密度大致維持不變——更小的電晶體按比例用更少的電壓與電流,所以你可以塞進更多電晶體,而且把它們的時脈拉得更快,晶片卻不會燒熔。這正是為什麼從 1990 年代到 2000 年代初,時脈從百萬赫茲一路爬到十億赫茲。摩爾定律給你更多電晶體;Dennard 縮放讓你同時把它們跑得更快更涼。兩者合起來,遞給了業界數十年免費而自動的加速。

值得把這些「定律」究竟是什麼說精確。這兩者都不是像重力那樣的物理定律——它們都是經驗趨勢,是對「工程一再設法達成了什麼」的觀察。這個區別至關重要,因為趨勢會結束,而其中一條真的結束了。摩爾「定律」其實是一張自我實現的產業路線圖;Dennard 縮放則是電晶體行為方式的一個後果——直到電晶體小到那些假設崩潰為止。

午餐為何結束:Dennard 先垮了

大約在 2005 年,Dennard 縮放實質上結束了——而這個,而非摩爾定律,才是現代計算機結構真正的轉捩點。電晶體縮過某個尺寸後,電壓再也無法同步下降,漏電電流悄悄滲入:電晶體即使該關著時也在浪費功率,就像一個永遠關不緊的水龍頭一直滴。把時脈再往上推,功率與熱量大約隨頻率的三次方飆升。晶片撞上一道堅硬的散熱天花板:你就是沒法把熱量抽得夠快。這就是功率牆,也是為什麼時脈在 2005 年前後卡在 3 到 4 GHz 附近,此後幾乎沒再動過。

這裡有個殘酷的轉折。在 Dennard 縮放死後好些年,摩爾定律仍持續給出更多電晶體——但 Dennard 之死意味著:你再也沒法讓它們全部同時火力全開地通電與散熱。這件事的行話叫暗矽:一顆塞滿電晶體的晶片,其中越來越大的一部分必須在任一時刻閒置(變暗),否則整顆就過熱。「把新電晶體花在一顆越來越大、越來越快的核心上」這套舊策略,突然變得毫無道理——更大的核心只是燒掉你那固定功率預算裡更多的份。建築師需要一套全然不同的計畫,去思考拿這麼多電晶體該什麼。

第一個答案你在好幾級之前就見過了:多核心。既然你沒法在功率預算內把一顆核心做得快很多,那就把好幾顆中等的核心放上晶片,讓工作平行地跑。這正是為什麼你的筆電有 8 顆核心,而不是一顆 8-GHz 的怪物——多核心不是奢侈品,它是功率牆的直系子嗣。但平行不是免費的加速,而限制它的東西有個我們會一再遇到的名字:Amdahl 定律。

效能鐵律依然當家,Amdahl 定下天花板

在追逐新把戲之前,先牢牢抓住那條永不改變的方程式——效能鐵律。一支程式花的時間永遠是:執行時間 = 指令數 x CPI x 週期時間。沒有第四個因子,也逃不掉它。更快的時脈只縮小最後那一項——這正是為什麼光是時脈更高,並不代表機器更快。這就是時脈迷思:一顆需要更多指令、或每條指令停頓更多週期的 4 GHz 晶片,可能輸給一顆做更少工作的 3 GHz 晶片。本階我們討論的每一項進步,其實都是對這三項裡某一項的攻擊。

現在來看平行的天花板。Amdahl 定律說:如果你程式裡有一部分天生是序列的——沒法切分到多核心上——那麼無論你丟多少核心進去,那一部分都會封死你的總加速。假設 95% 的工作完美平行,但 5% 卡在序列。核心無限多時,平行那部分縮到趨近於零,但序列的 5% 還在,所以你最多只能快到 1 / 0.05 = 20 倍。不是 100 顆核心的份,也不是 1000——就是二十倍,永遠如此。在這裡把核心從 16 倍增到 32,你幾乎察覺不到差別。這正是為什麼更多核心,鮮少等於按比例更多的速度。

如今進步從何而來:專門化,並協同設計

時脈凍結了,暗矽又逼著大多數電晶體閒置,於是現代的答案,是把它們花在一種大多數時候閒著、一旦運轉卻快得驚人的硬體上——一個領域專用架構。與其讓一顆通用核心試著把每件事都做得勉強過得去,不如為一件重要的工作打造專屬電路:一個視訊解碼器、一個加密引擎,或一個給神經網路用的矩陣乘法單元。通用核心是一把瑞士刀;專門單元是一件單一而完美的工具。正因它只做一件事,它能剝掉通用核心背負的種種開銷,用零頭般的能量完成同樣的工作。

這個取捨誠實而尖銳:一個專門單元在它的工作上出類拔萃,在其他一切上一無是處。所以一顆現代晶片,是圍著少數幾顆通用核心的、許多這類單元拼成的百衲被——一個異質系統。推動這整場轉變最大的單一驅力,是機器學習,它對一種運算——大矩陣相乘——的胃口大到,量身打造的加速器(Google 的 TPU、GPU 裡的張量核心)如今扛起了大半粗活。機器學習之於後摩爾時代,正如試算表之於個人電腦:那個證成新矽片的殺手級工作負載。

要把專門硬體榨到極致,需要第二個點子:軟硬體協同設計。在免費午餐的年代,硬體與軟體團隊可以互不理睬——晶片就在任何跑在它上頭的程式碼底下自顧自變快。那紙契約破了。一個加速器唯有在軟體被重寫成餵給它正確形狀的資料時才會發光,而硬體反過來又環繞著真正要緊的工作負載來塑形。建築師如今把軟硬體介面與演算法一起設計,在一個緊密的迴圈裡。勝果不再從天而降;你得把兩邊都工程化,使它們相遇。

前方的諸般前沿,與一句誠實的告誡

本階其餘部分,是一趟巡禮,看這些壓力正把計算機結構推向何方。我們會看到 open-ISA(開放指令集)運動與 RISC-V——一套免費、公開、任何人都能在其上打造的指令集,而不必付費授權。我們會看到晶粒(chiplets)與 3D 堆疊——當你沒法把一顆大晶片做得更快,就把好幾顆小的巧妙地黏起來。我們會認識記憶體內運算,它攻擊馮紐曼瓶頸——那一道每條指令與每筆資料都得擠過去的單一門——靠著就在資料所在之處運算,而不是把它拖過整顆晶片。我們還會誠實地端詳那些非傳統模型:神經形態、類比、光學,以及量子。

穿過這每一道前沿,有一件事不變——計算機結構這門工藝本身。技術來來去去,但那種被取捨驅動的思維長存:效能鐵律告訴你時間究竟由什麼構成;Amdahl 警告你序列那部分會反咬;讓常見情況變快告訴你該瞄準何處;局部性、管線化與平衡,在每一種新基質裡重現。一台量子或神經形態裝置,仍服從 Amdahl 定律的某種類比,仍獎賞「讓常見情況變快」。學會這門不隨時代的工藝,你就能對一台尚未被發明的機器進行推理。