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

餵飽這頭猛獸:HBM 與記憶體牆

現代 AI 加速器做算術的速度,比餵給它資料的速度還要快——於是瓶頸不再是運算本身,而是如何及時把資料送到運算單元面前。本指南將追溯 **記憶體牆**:算力為何跑贏了記憶體,為何通常先用完的是*頻寬*(而非容量),以及如何把 DRAM 堆疊成由 TSV 連接的高塔、再讓它們在中介層上緊貼邏輯晶片,從而換到一條消防水帶般寬的匯流排。隨後我們會越過「取資料更快」這一層,去看如何把運算搬到離資料更近的地方——以及為什麼 AI 是其中最飢餓的一頭猛獸。

記憶體牆

這一階梯上的每一篇指南,迄今都在講如何讓運算*更快*——更小的電晶體、FinFETGAA 通道、更多的核心、專用引擎。但一顆每秒能做一兆次乘法的處理器,如果大部分時間都耗在*等待要相乘的數字*上,那它就毫無用處。數十年來,邏輯速度和記憶體速度的成長速率天差地別:處理器吞吐量陡然攀升,而主記憶體能交付資料的速度卻在爬行。兩者之間的差距年復一年地拉大,這道越拉越大的鴻溝有個名字——記憶體牆

看清兩者*為何*分道揚鑣很有幫助。邏輯一路緊貼 摩爾定律:塞得更多、切換更快,循環往復。而主記憶體——DRAM——首要追求的是密度,以十億計地堆出廉價的位元;從一個遙遠的儲存單元裡讀出一個位元、再把它跨過電路板運送過來,這套物理過程根本沒能以同樣的速度提速。於是晶片越來越飢餓,廚房卻始終以同一個節奏上菜。結果就是處理器在大多數時間裡處於*閒置*——不是因為沒活兒幹,而是因為它需要的資料還沒送到。

重點是頻寬,而不只是容量

這裡有一個絆倒大多數人的區分。記憶體有兩個截然不同的數字。容量是它能裝*多少*——以 GB 計,相當於倉庫的大小。頻寬是你能*多快*地把資料搬進搬出——以 GB/秒計,相當於裝卸月台的寬度。人們本能地擔心容量(「我的模型是不是大到放不下?」),但在現代加速器上,一次又一次真正先用完的,其實是頻寬

一個廚房的比喻能把它說具體。容量是你儲藏室的大小;頻寬則是你每分鐘能從儲藏室往爐台搬多少食材。哪怕你擁有一倉庫的食物,只要兩者之間只有一道窄門,你照樣做菜很慢。更糟的是,這個問題是可以量化的:假設你的處理器每做 1 次算術運算就需要 100 位元組的資料,那麼無論算術單元多快,那道門都決定了你的真實速度。工程師用運算密度來追蹤它——即每取一個位元組所完成的運算次數。當密度很低時,你就是*受記憶體限制(memory-bound)*的,此時換一個更快的運算引擎對你毫無幫助。

HBM:把 DRAM 疊起來

那麼,要怎麼把裝卸月台加寬呢?一個簡單粗暴的答案是:不再把記憶體晶片*平鋪*在電路板上、靠一小撮窄窄的接腳去搆它們,而是把它們垂直堆疊成一座高塔,再筆直地穿過矽打出連接。這就是 高頻寬記憶體(HBM):把普通的 DRAM 裸晶——通常 8 顆、12 顆甚至更多——一顆疊一顆地摞起來,鍵合成單獨一個立方體。

奧妙在於垂直布線。堆疊中的每一顆裸晶都被成千上萬個 矽穿孔(TSV)刺穿——那是一個個灌滿銅的微小孔洞,*貫穿*矽,把一顆裸晶直接連到它上方和下方的裸晶。訊號不必再跑到晶片邊緣、橫穿電路板、再繞回來,而是搭上一段短短的「電梯」,徑直順著這座塔向上。連接短,就意味著你能負擔得起*非常多*的連接,而大量並行的連接正是頻寬的本質所在:每一摞堆疊提供一條 1024 位元寬的通路,相比之下傳統記憶體只有 32 位元或 64 位元。

   ordinary DRAM (flat, narrow bus)        HBM stack (tall, very wide bus)

   [DRAM] [DRAM] [DRAM]                        +----------+
      |      |      |                          |  DRAM 8  |
      +------+------+   <- ~64-bit bus,         +----------+
             |           long board traces     |  DRAM 7  |  } each die
         [ logic ]                              +----------+    pierced by
                                                |   ...    |    1000s of
   wide = few wires, far apart                  +----------+    TSVs (||||)
                                                |  DRAM 1  |
                                                +----------+
                                                | base die |  <- 1024-bit bus
                                                +----------+
                                                 |||| TSVs straight up
傳統 DRAM 靠橫穿電路板布出的少數幾根線去搆邏輯裸晶。HBM 把許多 DRAM 裸晶堆疊起來,用成千上萬個垂直 TSV 把它們連通,在僅佔一小塊面積的前提下,暴露出一條寬出一個數量級的匯流排。

中介層上的 HBM

一條 1024 位元的匯流排很美妙,但它帶來了一個新問題:上千根線得從記憶體立方體接進邏輯晶片,而普通封裝根本沒法把這麼多精細的連接並排布出來。解決辦法是把 HBM 堆疊和邏輯裸晶*兩者*都安放在一塊共用的矽板上,這塊板叫 中介層——本質上是一塊微型、超緻密的電路板,只不過它由矽製成,因而能承載像晶片本身一樣精細的線。

由於中介層是矽做的,它能在記憶體和邏輯之間並排塞進成千上萬根微觀走線,兩者僅相隔幾毫米。HBM 堆疊最終就*緊挨著*處理器——不是隔著一塊板,而是幾乎貼在一起——由一條寬到用任何其它方式都布不出來的匯流排連接起來。這種布局是 異質整合先進封裝 的旗艦範例:記憶體和邏輯各自分開製造,各用自己最擅長的製程,再在中介層上結合到一起。這和 小晶片 那篇指南裡的理念如出一轍——在對的製程上造出對的那一塊,再縫合起來——只不過這次應用到了記憶體上。

            short, very wide bus (1000s of wires)
      +-----------+   <==============================>   +-----------+
      | HBM stack |                                       |   LOGIC   |
      |  (DRAM x8 |                                       |  die (GPU/|
      |  + TSVs)  |                                       |  AI accel)|
      +-----------+                                       +-----------+
   ===|===========|=======================================|===========|===
      |   silicon INTERPOSER  (fine wiring, both dies sit on it)      |
   ===============================================================
      |   package substrate                                          |
      +--------------------------------------------------------------+
              o   o   o   o   o   o   o   o   o   o   o   <- solder balls to board
HBM 和邏輯裸晶並排坐在一塊矽中介層上。中介層的精細布線在兩者之間承載著那條又寬又短的匯流排——這種頻寬是普通封裝根本拿不到的。

近記憶體與記憶體內計算

HBM 把裝卸月台大幅加寬了——但請注意,它依舊是*同一個思路*:取來資料,把它運到運算引擎,再在那裡做運算。每一個位元組仍然要跑一趟來回,而搬動一個位元組是要耗費能量和時間的。於是一個更激進的問題隨之而來:如果我們不再把資料往運算這邊拖,而是反過來,把一點點運算搬到資料那邊呢?

這就是被稱為近記憶體計算與記憶體內計算的一類思路。*近記憶體*把簡單的處理邏輯放到記憶體緊旁邊——比如放在 HBM 堆疊下面那顆基底裸晶上——這樣歸約和過濾就能在資料離開之前先完成。*記憶體內*(即 compute-in-memory,存內計算)走得更遠,直接在記憶體陣列*內部*完成運算:由於記憶體網格的連線方式,可以誘使一排儲存單元幾乎免費地做一次乘加,而這恰恰是 AI 最倚重的運算。其動機直截了當——如果連線才是瓶頸,那麼最便宜的資料搬運,就是你壓根不做的那一次。

AI 對頻寬的飢渴

每一種工作負載都能感受到記憶體牆,但 AI 撞得最狠,值得弄清楚原因。訓練和運行一個大型神經網路,其核心就是在做巨大數字矩陣的乘法——數以十億計的權重。每個數字上的算術微不足道(一次乘法加一次加法),但你必須把*每一個權重*都流經運算引擎,而且往往每一批輸入都得重來一遍。這正是前面講過的低運算密度、受記憶體限制的情形,只不過被放大到了行星級的規模:模型大到根本無法待在快速的晶片上記憶體裡,於是只能持續不斷地從 HBM 中取出來。

這正是為什麼我們將在最後一篇指南中遇到的那些 AI 加速器——GPU、TPU、NPU——都被一摞摞 HBM 包裹著,也是為什麼每一代新晶片在吹噓*記憶體頻寬*時,嗓門跟吹噓算力時一樣大。一個面向 AI 的 領域專用架構,不只是一個更快的乘法器;它是一個由盡可能寬的管道餵養的更快乘法器,而且資料被精心布置,讓這根管道永不斷流。收束本階梯的那篇壓軸綜述會把這些線索串到一起:專用化、封裝與頻寬,不是各自獨立的把戲,而是同一套策略——當你再也無法把電晶體做得更好時,你就去把*整個系統*做得更好,而餵飽這頭猛獸,正是這場仗的一半。