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

開放硬體:RISC-V 的故事

指令集是一份合約,而數十年來這份合約一直被人擁有、被人授權。RISC-V 提出一個安靜卻激進的問題:如果這份合約可以免費閱讀、免費延伸,像螺紋標準那樣被大家共用,會怎麼樣?

為什麼這個故事屬於前沿

上一篇把我們留在後摩爾的世界裡:Dennard 縮放已逝、摩爾定律步履蹣跚,要再拿到大幅進步,唯一的路就是特化——打造為單一工作量身訂做的機器。但特化有一個前面幾階教得很清楚的代價。每一個新加速器都需要自己的指令集架構、自己的組譯器、自己的編譯器後端,還有自己的除錯工具與文件。如果每一個都從一張白紙開始,整個世界就會淹沒在彼此不相容的工具鏈裡。RISC-V 的故事,骨子裡就是在說:後摩爾時代如何得到一個共享的地基,好讓大家在上面去特化。

首先,從指令集那一階慎重提醒一句,因為整個故事都繞著它轉。ISA 是硬體與軟體之間的合約——一張清單,列出編譯器可以假定存在的指令、暫存器與規則。它絕對不等於微架構:合約說「有一條加法指令」,而微架構決定這條加法是跑在懶洋洋的單週期核心上,還是跑在寬闊的亂序執行怪獸裡。RISC-V 是一份合約、一份開放文件。它對你的晶片該多快隻字不提,並且讓上千種不同的組織方式在同一個承諾底下各自開花。

「開放」到底是什麼意思

在計算歷史的絕大部分時間裡,ISA 是私有財產。要打造一顆跑 x86 合約的晶片,你得向它的擁有者取得授權;要做一顆 Arm 核心,你得按設計、按晶片向 Arm 付費。這是完全合理的生意,但它有一種寒蟬效應:學生、新創或研究實驗室,沒辦法隨手發明一條新指令、模擬它、再流片做出一顆測試晶片,而不必先去談判權利。開放指令集移除了這道閘門。規格被公開,任何人都可以閱讀、實作、延伸它,不必付權利金、也不必申請許可。

RISC-V 大約在 2010 年於加州大學柏克萊分校起步,源於一個單純的挫折:研究者想要一個乾淨的指令集來教學與實驗,而現有的每個選項不是要授權、就是堆滿了數十年的歷史包袱,或兩者皆是。這個名字呼應它是柏克萊 RISC 研究的第五代,而「V」同時是羅馬數字五。關鍵的一步,是把基礎規格做得小、做得定、做得免費,再透過一個開放、由成員驅動的基金會來治理,而不是由單一擁有者主宰。沒有任何公司能撤回你使用它的權利;正是這份永久性,說服了其他人在上面建立長期的軟體生態系。

合約內部:小巧的基礎,一座延伸的高塔

工程之美正在這裡展開,而你學過的所有關於 RISC 對 CISC 的東西也在此得到回報。RISC-V 的精髓在於模組化。基礎整數指令集叫做 RV32I(64 位元版則是 RV64I),刻意做得很小——大約四十條指令:整數算術載入與儲存,以及分支與跳躍。它是嚴格的載入-儲存架構,有乾淨的 32 個暫存器暫存器檔,以及固定的 32 位元指令格式,讓一條五階管線幾乎不費力就能解碼。這個小巧的核心足以跑真正的程式——而且它永不改變。

超出這個範圍的一切,都以選用的延伸形式登場,每一個都有一個字母。「M」加上整數乘法與除法;「A」加上原子操作,例如給鎖用的比較並交換;「F」與「D」加上單精度與雙精度浮點;「C」加上壓縮的 16 位元編碼以縮小程式碼;「V」加上完整的向量單元。基礎再加上 M、A、F、D 這個熱門組合,可以簡寫成「G」,代表通用。你恰好挑選你的晶片所需的延伸,而在矽片面積與驗證工夫上,多一分都不必付。一個深度嵌入的感測器可能只出貨光禿禿的 RV32I;一顆伺服器核心則出貨 RV64GC,外加更多。

RV32I  = base 32-bit integer ISA (~40 instructions, frozen)
  + M   integer multiply / divide
  + A   atomic memory ops (compare-and-swap, load-reserved...)
  + F   single-precision float
  + D   double-precision float       \ F+D+M+A = "G" (general)
  + C   16-bit compressed encodings
  + V   vector unit

  RV32IMAC   tiny embedded core
  RV64GC     application / Linux-class core
  RV64GCV    add vectors for HPC / ML kernels

plus custom 'X' space  -> your own accelerator instructions

而這正好接回前沿的主題。因為指令集明確保留了一塊自訂指令的空間,一支打造領域專屬加速器的團隊,可以把比方說一條密碼學或張量指令,直接加進一顆 RISC-V 核心裡——其餘的一切仍然沿用整套標準編譯器、組譯器與作業系統堆疊。這就是後摩爾的夢想被化為實用:把你工作量裡最熱的那 5% 特化掉,其餘 95% 繼承一個成熟的生態系。這是把讓常見情況變快套用到工程力氣本身。

這份承諾,以及它誠實的代價

模組化是一份禮物,但它帶著一個你應該直白點名的危險:碎片化二進位相容性——也就是一支只編譯一次的程式,能在任何宣稱同一指令集的晶片上原封不動執行——只有在那些晶片真正共用相同延伸時才成立。一支假定有 F 延伸的二進位檔,在一顆缺乏浮點的核心上會觸發例外而當掉。如果每個廠商都發明自己那一鍋不相容的自訂湯,開放生態系就會碎裂成一座座孤島,你也就失去了當初讓 x86 與 Arm 如此珍貴的可攜性。

社群的答案是設定檔(profiles):把延伸打包成大家同意的組合(例如一個標準應用設定檔,規定要有 RV64GC 再加上幾項),好讓軟體廠商有一個穩定、有名字的目標可以編譯。這是治理,不是矽片——而且真的很難,因為開放的全部魅力在於分歧的自由,生態系的全部魅力卻在於大家收斂。RISC-V 永遠活在這股張力裡。對自己誠實一點:「開放」解決的是授權問題,不是協調問題。協調問題是社會性的,而它永遠不會徹底消失。

為什麼這重要,以及底下的那門手藝

退一步,看看 RISC-V 真正降低了什麼:嘗試的成本。當發明一條新指令不再需要律師,一個研究生可以在週一草擬一個延伸、週中模擬它,並在週五量到真實的加速。這個短迴圈正是一個特化時代所需要的,因為特化是一門實驗科學——你沒辦法在打造與跑分之前,就知道哪一條自訂指令配得上它的矽片。開放硬體把架構探索,從企業的特權變成一間教室就能做的事,這也是為什麼如今後摩爾研究前沿有這麼多在說 RISC-V。

  1. 閱讀公開規格,挑一個基礎再加上你工作量所需的延伸(比方 RV64GC),讓軟體有一個穩定的目標。
  2. 對你的應用做剖析,找出吃掉最多週期的熱核心——那就是值得下手的常見情況。
  3. 在保留空間裡設計一條自訂指令,模擬它,並驗證它算出的結果與普通程式路徑一致。
  4. 其餘 95% 的程式沿用標準的編譯器、組譯器、連結器與作業系統,只在划得來的地方投入新的力氣。

用一個耐久的教訓作結,也是整個這一階一再繞回的那一個。RISC-V 是一份精良、設計得當的指令集,但它終究只是一項技術,而像每一項技術一樣,它總有一天會被取代。不會過期的,是它底下那門架構的手藝Amdahl 定律那種以權衡為本的思考、讓常見情況變快、在面積、速度與功率之間秤重、把指令集當成有別於其實作的合約。開放硬體是服務這門手藝的一件強大新工具——而不是它的替代品。把這門手藝練到家,你今天能駕馭 RISC-V,明天也能駕馭接它而來的任何東西。