記憶體牆是什麼?為什麼晶片算得快,資料卻送不夠快
記憶體牆(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」是什麼?」)。
用先進封裝,讓晶片靠在一起
- 做什麼:把運算的晶片和記憶體,或好幾顆運算晶片,包進同一個封裝:並排在一塊有很細線路的薄片上,或直接疊起來。
- 為什麼:比起隔著電路板上幾公分的線,路短、線多,跑得快也省電。
- 代價:封裝更難、更貴;裡面一顆壞了,整組都浪費;疊起來,熱更難散(見「新聞說的「先進封裝」是什麼?」)。
更遠的路,改用光
- 做什麼:比較遠的路,例如一櫃一櫃伺服器之間,把電轉成光,走光纖。
- 為什麼:送得越快,銅線能走的距離越短,還要多花電把訊號補回來;光走遠路,損失很小。
- 代價:要多一組電轉光、光轉電的零件;矽本身不太會發光,光纖要對得很準,也怕熱。靠得很近的地方,還是用電(見「新聞說的「矽光子」是什麼?」)。
在記憶體裡算(大多還在研究)
- 做什麼:把簡單的計算做進記憶體晶片裡或旁邊;有的研究直接用記憶體格子本身的電氣特性來做乘加。
- 為什麼:最省的搬法,就是不搬。
- 代價:記憶體的做法是為了裝得多、做得便宜,很難再塞進運算的電路;寫程式的方法、整台電腦的設計都得跟著改。前面四條都已經在用(用光的那條,說的是機櫃之間的光纖),這一條大多還在研究。
在 fab24hr 裡
遊戲裡沒有記憶體牆,也沒有 HBM、AI 晶片或記憶體廠。主線「晶片的一生」的「螢火」是一顆虛構的助聽器晶片,在封測廠裝進一個 SiP 小模組,用比頭髮還細的金屬線一條一條接到底板上,這叫打線。這些線,就是螢火通往外面的路。第 11 章「球掀起來了」,打線機的拉力抽測有兩條偏低,你是封裝製程工程師。
螢火最在意的也是電,不過是另一種:什麼都不做的時候還在漏的那一點(漏電,見「晶片為什麼會耗電?」)。
遊戲裡的公司、晶片、人物都是虛構的;記憶體牆是什麼、各條路的作法和代價,照公開的一般資料寫。其他行話可以到「半導體晶圓廠的行話,白話解釋」查。
在遊戲裡你會在哪裡遇到它遊戲裡沒有記憶體牆,也沒有 HBM 和 AI 晶片。最接近的是主線「晶片的一生」第 11 章「球掀起來了」:在封測廠的封裝線上,螢火的晶片用比頭髮還細的金屬線,一條一條接到底板上,那就是晶片通往外面的路。
fab24hr 裡沒有記憶體牆;可是螢火通往外面的每一條路,都是封測廠用細細的金屬線一條一條接起來的。
玩第 11 章,看晶片怎麼接到外面給老師:這一篇可以搭配「在課堂上玩 fab24hr」用在課堂上。
引用這篇〈記憶體牆是什麼?為什麼晶片算得快,資料卻送不夠快〉,fab24hr,更新。https://fab24hr.com/blog/memory-wall/
課堂與非營利可以免費使用,投影、放進講義、印給學生都可以,請註明 fab24hr;不能販售,也不能改成自己的作品。 看到錯誤?回報問題
其他文章
FinFET 和 GAA 是什麼?電晶體為什麼從平的變成立起來,再變成四面包住
新聞說的「埃米世代」是什麼?埃米有多小
功率半導體是什麼?管大電流、高電壓的晶片在做什麼
MEMS(微機電系統)是什麼?晶片上怎麼做出會動的小機械
這個網站的其他頁
- fab24hr 是什麼?:兩種玩法、四個班、常見問題、資料來源
- 晶片的一生:一顆晶片從下線、試產、量產、晶圓測試、封裝到出貨,每一段在做什麼
- 晶圓廠工程師的一天:PE、EE、PIE、製造部的分工,一天的時間線
- 晶圓廠裡有誰:技術員、製造部、製程、設備、廠務、整合、品保、生管、光罩、研發、課長、設備商,到封測廠的測試與封裝:每個角色一天怎麼過
- 半導體晶圓廠的行話,白話解釋:MO、Hold、Q-time、OCAP 這些行話,一個一句白話
- 半導體入門:跟著晶片的一生:半導體入門課程:跟著晶片的一生,圖解講義、投影片、必讀文章、3D 機台與討論題,自學或上課都能用
- 晶圓廠的機台,拆開來看:31 種半導體設備在做什麼(蝕刻機、曝光機、CMP、天車、封膠機…),每一台都能打開 3D 模型拆開來看
- 在課堂上玩 fab24hr:半導體教案:20/40 分鐘課程流程、一章或一區一節課(3D 機台、遊戲、文章)、討論題、學習單、老師常問
- 介紹與媒體素材:宣傳影片、遊戲畫面、介紹文字與基本資料