Chip design from the bottom up – Reiner Pope

2026年6月7日 · 約 5 分鐘閱讀 · 01:20:19 · en
影片封面
YouTube · 01:20:19

這場對談由 MatX 的執行長 Reiner Pope 與主持人暨天使投資人 Dwarkesh Patel 共同展開,兩人深入探討了人工智慧晶片內部的運作邏輯,從最基礎的物理單元一路建構至現代資料中心的複雜處理架構 [00:00]。Pope 指出,晶片設計的最小基本單元是 邏輯閘 (Logic Gates),例如簡單的「及閘」(AND)、「或閘」(OR) 以及「非閘」(NOT),這些邏輯閘透過晶片上的金屬跡線(即導線)彼此連接 [00:30]。對於 AI 晶片而言,核心任務是計算矩陣乘法,而其最基本的運算原語則是成對數字的 乘法累加 (Multiply-Accumulate, MAC) [00:50]

為了直觀理解這項運算,對談中以手算一組四位元 (4-bit) 數字乘法並累加至一個八位元 (8-bit) 數字的過程為例 [01:20]。之所以選擇 MAC 作為自然的原語,主因在於矩陣乘法在本質上就是無數個 MAC 步驟的循環組合 [02:00]。此外,AI 晶片的一個特性是累加過程的精度通常高於乘法,因為在處理低精度數字相乘後,若不使用較高精度進行累加,捨入誤差會迅速累積 [02:45]。這也解釋了為何在手算範例中,使用了四位元乘法搭配八位元加法:一方面是因為運算結果會大於輸入值,另一方面是為了應對多次求和過程中產生的捨入問題 [03:14]

手算四位元乘法的過程與人類習慣的長乘法相似,需將一個四位元數字分別與另一個四位元數字的每一個位元相乘 [03:45]。例如將 1001 分別與乘數的各位元相乘並進行位移,會產生一組部分積 [04:10]。在硬體底層,產生一個部分積位元只需要一個「及閘」(AND gate),若兩個輸入位元皆為 1,結果才為 1 [05:26]。對於 p 位元乘以 q 位元的運算,總共需要 p 乘以 q 個及閘來產生所有 16 個部分積 [05:50]。然而,運算中最耗費工夫的部分在於求和,這需要使用到晶片上最大型且典型的邏輯閘:全加器 (Full Adder) [06:30]。與軟體工程師認知的 32 位元加法器不同,硬體層級的全加器僅負責將三個單位元的數字相加,產生的結果範圍在 0 到 3 之間,可用兩個位元(二進位的 10)表示,因此又被稱為 3→2 壓縮器 (3→2 Compressor) [06:58]

在進行大規模求和時,硬體會採用一種稱為 Dadda 乘法器 (Dadda Multiplier) 的架構,這是利用全加器實現面積效率最優化的標準做法 [10:31]。以四位元乘法為例,初始有 16 個部分積位元加上 8 個累加項位元,共計 24 位元,最終產出 8 位元結果 [11:06]。由於每次使用全加器都能將三個輸入縮減為兩個輸出,形同消去一個位元,因此整個電路總共需要 24 減 8,即 16 個全加器 [11:23]。這證明了在一般情況下,電路所需的邏輯閘數量與 p 乘以 q 成正比,這種簡潔的代數關係也是選擇 MAC 作為基本單元的第二個主因 [12:00]

關於精度規格,如 Nvidia 宣稱其晶片能處理不同倍數的 FP4 或 FP8 運算,這並不意味著電路是完全可互換的 [13:11]。設計晶片時必須在硬體中規劃專用的 FP4 與 FP8 乘法累加電路,而常見的效能翻倍現象(如 FP4 是 FP8 的兩倍速)主要是因為設計者分配了對等的晶片面積 [14:02]。此外,數據移動也是關鍵,將兩個四位元數字打包進一個八位元的存儲空間,能使內部匯流排的配置更具效率 [14:36]。事實上,電路面積會隨位元長度呈二次方比例增長,這使得低精度算術在神經網路中極具優勢 [14:54]。Nvidia 在 B300 之後的規格顯示 FP4 效能達到 FP8 的三倍,雖然理論極限應為四倍,但浮點數運算中的階碼 (Exponent) 處理增加了計算的複雜度 [15:34]

在分析計算成本時,必須將乘法器本身與其周邊電路進行比較。傳統的 CUDA 核心或 CPU 結構中,包含一個 暫存器檔案 (Register File)算術邏輯單元 (Arithmetic Logic Unit, ALU) [16:37]。為了讓 ALU 能從暫存器中讀取任意三個輸入,硬體需要建立 多工器 (Multiplexers, Muxes) 電路 [18:13]。一個具有 n 個輸入、寬度為 p 位元的多工器,需要 n 乘以 p 個及閘來進行遮罩選擇,再加上 (n-1) 乘以 p 個或閘 (OR gates) 將結果合併 [19:25]。換算下來,光是將數據從暫存器移動到邏輯單元的遮罩與合併成本,往往就是邏輯運算本身的數倍 [21:14]。例如在一個只有 8 個條目的微型暫存器檔案中,數據移動的成本就佔了總電路面積的七分之八,而實際進行邏輯運算的區域僅佔八分之一 [25:11]

為了克服數據移動成本過高的問題,脈動陣列 (Systolic Arrays)(在 Nvidia 中被稱為 張量核心 (Tensor Cores))應運而生 [25:41]。其核心思想是將更高層級的矩陣乘法循環直接固化在硬體中,藉由增大硬體處理的粒度,來分攤輸入輸出的行政負擔 [26:17]。在矩陣與向量相乘的過程中,每一列的運算都對應一個 MAC 步驟 [27:32]。脈動陣列的技巧在於將權重矩陣局部儲存在電路內的暫存器中,並對多個不同的向量重複使用這些數值 [30:04]。這樣一來,儘管運算量隨維度呈二次方增加,但進出暫存器檔案的數據量僅需呈線性增長 [31:03]。至於初始權重的載入,則可以透過細小的線路以較慢的速度「滴灌」進陣列中,以減少對佈線面積的需求 [33:02]

晶片設計的另一個核心決策是 時脈週期 (Clock Cycle) 的設定 [39:08]。在一顆擁有千億個電晶體的晶片中,必須進行大規模的同步,通常每奈秒左右,全晶片會暫停並同步一次 [39:50]。時脈由暫存器介導,當全球時脈訊號發出時,導線上的瞬時數值會被存入暫存器 [40:42]。設計者的挑戰在於邏輯雲的延遲必須短於時脈週期,否則計算將無法及時完成 [41:30]。雖然可以透過插入 管線暫存器 (Pipeline Register) 將邏輯雲切半以提升時脈頻率,但這會增加儲存面積成本 [43:53]。特別是像加法累加這種具有反饋迴路 (Feedback loop) 的邏輯,若在中間強行插入暫存器,會導致計算邏輯改變(例如變成奇偶數分別累加),這是提升時脈頻率時最難處理的限制 [47:18]。過高的時脈頻率雖能降低延遲,但若過多面積被用於同步暫存器而非運算邏輯,反而會損害總體的吞吐量 (Throughput) [50:05]

隨後對談轉向 現場可程式化邏輯閘陣列 (Field-Programmable Gate Array, FPGA)特殊應用積體電路 (Application-Specific Integrated Circuit, ASIC) 的比較 [52:25]。ASIC 的能源效率與成本雖優於 FPGA 十倍以上,但開發一次 ASIC 需要支付三千萬美元的「投片」(Tape-out) 費用,而 FPGA 僅需一萬美元且具備可重新編程性 [53:01]。FPGA 的內部由暫存器、提供邏輯功能的 查找表 (Lookup Tables, LUTs) 以及大量的多工器組成 [54:03]。「現場可程式化」意指元件佈署在資料中心後仍可調整其電路連通性 [55:36]。LUT 本質上是一個儲存了真值表 (Truth table) 的微型記憶體,透過輸入位元定位出對應的輸出,藉此模擬任何邏輯閘 [58:08]。然而這種靈活性代價高昂,例如在 ASIC 中只需三個及閘實現的功能,在 FPGA 中可能需要耗費 32 個邏輯閘的面積 [01:02:47]

FPGA 在高頻交易領域受到青睞,主因是其具備 確定性延遲 (Deterministic Latency) [01:03:21]。相比之下,傳統 CPU 因為依賴 快取 (Cache) 系統來彌補 DDR 記憶體的速度落後,導致執行時間會受環境干擾而變得不可預測 [01:05:39]。AI 晶片如 TPU 則採用 暫存記憶體 (Scratchpad) 架構,將記憶體存取的決策交由軟體而非硬體自動判定,從而實現了確定性 [01:06:58]。此外,CPU 的核心結構極為複雜,為了追求單執行緒效能,投入了大量面積在 分支預測器 (Branch Predictors) 上,以便在判定跳轉邏輯完成前的五奈秒內,繼續預先執行後續指令 [01:10:49]。GPU 則剔除了這些複雜的預測機制,並讓暫存器檔案配置更緊湊,從而獲得更高的並行能力 [01:09:39]

關於能耗問題,晶片大部分的能量消耗在於位元從 0 切換到 1 的過程,這被稱為 動態開關功率 (Dynamic or Switching Power),因為這涉及到對電容進行充電與放電 [01:14:49]。即使降低時脈速度,雖然能減少每秒的跳轉次數,但並不必然會提升單次運算的能源效率 [01:15:20]。最後,Pope 比較了 GPU 與 TPU 的頂層結構:GPU 像是由無數個微型單元 (SM) 組成的網格,每個單元都有自己的暫存器與調度器;而 TPU 則採用更粗粒度的結構,由大型的 矩陣單元 (Matrix Units, MXU) 圍繞著向量單元組成 [01:17:00]。雖然大型脈動陣列能更好地分攤成本,但數據移動的靈活性較低;而 GPU 雖然分散,卻能在向量與矩陣單元間提供更強的數據移動頻寬 [01:19:08]。MatX 目前正致力於開發 可拆分脈動陣列 (Splittable Systolic Array) 技術,試圖在大型陣列的效率與小型單元的靈活性之間取得平衡 [01:20:09]

· · ·
同步設定