開始玩

← fab24hr 專欄

晶片入門約 5 分鐘

記憶體牆是什麼?為什麼晶片算得快,資料卻送不夠快

記憶體牆(memory wall)說的是:處理器算得越來越快,記憶體把資料送過來的速度卻跟不上,處理器常常算到一半就得停下來等。搬資料還很耗電:從晶片外面的記憶體讀一次資料,用的電可以是做一次簡單加法的幾百到上千倍。現在撞得最重的是 AI 晶片;新聞常說的 HBM、先進封裝、矽光子,都跟這道牆有關。

記憶體牆是什麼意思?用廚房來想

一位手很快的廚師,食材卻放在很遠的倉庫,一趟一趟用推車送來。一道菜要多久,看的是食材多久送到,換一位更快的廚師也沒用。有用的是:常用的食材先放在手邊、倉庫搬近一點、推車換大一點。業界對付記憶體牆,做的就是這幾件事。

處理器是廚師,負責算;記憶體是倉庫,放著要算的資料(兩者怎麼分工,見「記憶體和處理器差在哪?」)。

處理器和記憶體,為什麼越差越遠?

因為兩邊進步的速度不一樣。從 1980 年代中期到 2000 年代初,處理器每年大約快五成以上;記憶體讀一筆資料要等多久,每年只縮短不到一成。差距大約每兩年就翻一倍。記憶體晶片最在意的是一顆裝得多、每一位元便宜,速度排在後面。

1994 年底,美國一所大學的兩位研究者寫了一篇短文,隔年刊出,題目就叫〈撞上記憶體牆〉。他們估計不到十年,處理器就會被記憶體卡住。後來快取越分越多層,記憶體也改成一次送更多,牆被往後推了一些,但沒有消失。

到了 AI,牆又變高了。新聞說的「HBM」那一篇提過一篇大學的研究:二十年來,伺服器能算的速度快了大約六萬倍,記憶體送資料只快了大約一百倍。早年說的牆,多半是「等一次要多久」;現在更常說的,是「一秒送得出多少」。

為什麼搬資料比算還耗電?

晶片裡的 0 和 1,是一條線上電壓的高低。0 和 1 每換一次,就要把整條線充電或放電;線越長,要充的電越多。

算的電路彼此靠得很近,線很短。到晶片外面的記憶體,資料得走出晶片、經過封裝和電路板,走上好幾公分。所以有研究估算,讀一次晶片外面的記憶體,用的電可以是一次簡單加法的幾百到上千倍。開關一代一代做小,算一次的電跟著變少,這段路的長度卻省不下來。想省電,常常得先想怎麼少搬一點。

記憶體為什麼要分好幾層?

因為近的快,但放不多;遠的放得多,但慢。

一層在哪裡放得下多少拿一次要多久
暫存器算的電路旁邊正在算的幾個數字不到一奈秒
快取處理器同一顆晶片上大約 KB 到 MB大約一到二十奈秒
記憶體(DRAM)晶片外面GB 起跳幾十奈秒

一奈秒是十億分之一秒;KB、MB、GB 一個比一個大大約一千倍。處理器做事有固定的節拍,一秒打幾十億拍,等外面的記憶體回一次話,就要空等上百拍。

分層有用,是因為程式拿資料有習慣:剛用過的,常常馬上又要用;用了這一筆,旁邊那一筆也常接著用。把常用的先抄一份到近的那一層,大部分時候伸手就拿得到,也省電得多。快取用的是 SRAM,很快,可是一格要六個電晶體,很佔地方,所以放不多。

為什麼現在撞得最重的是 AI?

AI 模型裡裝著大量的數字(見「新聞說的「AI 晶片」是什麼?」),多到快取放不下,只能放在外面的記憶體。聊天機器人每吐出一小段字,大量的數字都要讀一次;只替一個人算的時候,每個數字搬進來,大約只做一次乘法、一次加法就換下一個。留在快取裡也很少再用到,算的電路大半時間在等。

所以常把好幾個人的問題湊在一起算,同一個數字搬一次,替好幾個人用。可是這幾年,模型長大的速度也比一顆處理器旁邊放得下的記憶體快得多。

業界有哪些辦法?各要付出什麼?

沒有一招能把牆拆掉,業界是幾條路一起走,每一條都有代價。

在晶片上放更多快取

  • 做什麼:把處理器同一顆晶片上的快取做大。
  • 為什麼:常用的數字留在晶片上,快又省電。
  • 代價:SRAM 很佔地方,最近幾代也越來越難再縮小;晶片越大越貴,大的 AI 模型也還是裝不下。

把記憶體疊起來,貼在處理器旁邊(HBM)

  • 做什麼:好幾層 DRAM 晶片疊成一疊,放在處理器旁邊。一疊有 1,024 條資料線(最新一代再加倍);一般電腦的一條記憶體,一次只送 64 個 0 或 1。
  • 為什麼:線多,一次送得多;路短,送每個 0 或 1 用的電也比較少。
  • 代價:每一層都得是好的、要磨得很薄,熱也不容易散,又貴又難做(見「新聞說的「HBM」是什麼?」)。
HBM 和一般記憶體的擺法比較:一般記憶體是幾顆 DRAM 晶片各自包好、排在一條小電路板上插在主機板,離處理器好幾公分,一次送 64 個 0 或 1;HBM 把好幾層 DRAM 晶片疊起來,用矽穿孔(TSV)上下接通,和處理器並排放在中介層上,一疊有 1,024 條資料線,最新一代的標準再加倍到 2,048 條。
HBM 裡裝的還是 DRAM,差在擺法和接法:疊起來、穿過矽接通、貼在處理器旁邊。線多了 16 倍(最新一代再加倍),資料一次搬得多;路變短,送每個 0 或 1 用的電也比較少。示意圖,層數、孔和線的數目沒有照實際畫。

用先進封裝,讓晶片靠在一起

  • 做什麼:把運算的晶片和記憶體,或好幾顆運算晶片,包進同一個封裝:並排在一塊有很細線路的薄片上,或直接疊起來。
  • 為什麼:比起隔著電路板上幾公分的線,路短、線多,跑得快也省電。
  • 代價:封裝更難、更貴;裡面一顆壞了,整組都浪費;疊起來,熱更難散(見「新聞說的「先進封裝」是什麼?」)。

更遠的路,改用光

  • 做什麼:比較遠的路,例如一櫃一櫃伺服器之間,把電轉成光,走光纖。
  • 為什麼:送得越快,銅線能走的距離越短,還要多花電把訊號補回來;光走遠路,損失很小。
  • 代價:要多一組電轉光、光轉電的零件;矽本身不太會發光,光纖要對得很準,也怕熱。靠得很近的地方,還是用電(見「新聞說的「矽光子」是什麼?」)。

在記憶體裡算(大多還在研究)

  • 做什麼:把簡單的計算做進記憶體晶片裡或旁邊;有的研究直接用記憶體格子本身的電氣特性來做乘加。
  • 為什麼:最省的搬法,就是不搬。
  • 代價:記憶體的做法是為了裝得多、做得便宜,很難再塞進運算的電路;寫程式的方法、整台電腦的設計都得跟著改。前面四條都已經在用(用光的那條,說的是機櫃之間的光纖),這一條大多還在研究。

在 fab24hr 裡

遊戲裡沒有記憶體牆,也沒有 HBM、AI 晶片或記憶體廠。主線「晶片的一生」的「螢火」是一顆虛構的助聽器晶片,在封測廠裝進一個 SiP 小模組,用比頭髮還細的金屬線一條一條接到底板上,這叫打線。這些線,就是螢火通往外面的路。第 11 章「球掀起來了」,打線機的拉力抽測有兩條偏低,你是封裝製程工程師。

螢火最在意的也是電,不過是另一種:什麼都不做的時候還在漏的那一點(漏電,見「晶片為什麼會耗電?」)。

遊戲裡的公司、晶片、人物都是虛構的;記憶體牆是什麼、各條路的作法和代價,照公開的一般資料寫。其他行話可以到「半導體晶圓廠的行話,白話解釋」查。

在遊戲裡你會在哪裡遇到它遊戲裡沒有記憶體牆,也沒有 HBM 和 AI 晶片。最接近的是主線「晶片的一生」第 11 章「球掀起來了」:在封測廠的封裝線上,螢火的晶片用比頭髮還細的金屬線,一條一條接到底板上,那就是晶片通往外面的路。

fab24hr 裡沒有記憶體牆;可是螢火通往外面的每一條路,都是封測廠用細細的金屬線一條一條接起來的。

玩第 11 章,看晶片怎麼接到外面

給老師:這一篇可以搭配「在課堂上玩 fab24hr」用在課堂上。

引用這篇〈記憶體牆是什麼?為什麼晶片算得快,資料卻送不夠快〉,fab24hr,更新。https://fab24hr.com/blog/memory-wall/
課堂與非營利可以免費使用,投影、放進講義、印給學生都可以,請註明 fab24hr;不能販售,也不能改成自己的作品。 看到錯誤?回報問題

其他文章

這個網站的其他頁