最近開源架構的話題又在中國大陸火了,這次是RISC-V。

開源架構並不新鮮,Sparc也開源,Power也開源,MIPS開源支持Android還讓好些人激動了一把,但都是熱鬧了一陣以後就曲終人散了,然後幾年以後再來一輪,媒體再炒一輪。

其實我覺得這一次RISC-V也沒什麼不一樣。

擺上茶水瓜子點心,給大家慢慢講:首先所有推崇RISC-V的文章都在說RISC-V架構簡單,功耗面積低,這其實跟以前誇MIPS沒什麼不同。在CPU設計裡,指令集是其中最簡單最基礎的一部分,可以說,採用RISC架構的指令集都差不多,無非是在暫存器數目、分支跳轉、資料存取等指令方面做一些取捨,達到某種平衡,滿足某些特定需要。

在學院派那兒PK的功耗面積,在工程派眼中離實用還遠的很。做出一個demo和做出真正工程上能用的產品還隔著十萬八千里,而工程上能用距離商業成功又隔了十萬八千里。因為一個指令集就把某種架構誇上天實在沒必要。

少年啊,心態要平穩,不要太浮躁。

開源架構受到追捧隱含的另一個意思是Arm等IP廠商授權太貴,所以總有人揭竿而起要革商業公司的命,用免費打敗收費。這裡面有兩重誤會,我一一道來:

第一個誤會是指令集架構授權和CPU核的授權被刻意模糊了。

Arm的CPU核心授權門檻其實很低,甚至有DesignStart你們可以瞭解一下,基本可以免費取得Cortex-M0和Cortex-M3,一些媒體文章動輒說Arm授權費要千萬美金,錢真有那麼好賺嗎?Arm被孫正義收購的時候營收一年也就10多億美金,這生意絕對說不上大。架構授權的客戶都是財大氣粗玩的起的主兒,如我大蘋果、大高通、大三星等,初創公司完全有很多很便宜的選擇,幹嘛一上手就搞架構授權?刻意強調千萬美金授權不能不說是有意誤導。

第二個誤會則是來自開源社群。

很多人說開源架構免費多好呀,但我要說從架構定義到CPU核實現這中間有很長的路要走,這一部分並不免費,不免費,不免費(重要的事情強調三遍),像SiFive等公司都是要收錢的,與Arm的CPU核授權並無多少區別。把開源解讀為免費恐怕是一個中英文翻譯中的誤會。在開源社群的概念剛剛被引入的時候就有人把Free Software翻譯為免費軟體,但其實更準確的翻譯是自由軟體或開源軟體,開源不等於免費,免費也不等於開源。

開源指的是原始程式碼公開,任何人可以免費取得自行編譯或重新開發,只是要遵循相應的版權協議,像Linux遵循的是GPL協議,用GPL開源協議的程式碼重新開發的軟體也必須開源。免費指的是軟體不收錢,但是不一定開源。大名鼎鼎的Redhat Linux是開源的,但是也不影響Redhat公司靠服務費收錢。

在開源架構社群也是一樣,指令集是開源的,遵循BSD協議,各家開發的產品不是必須要開源回饋給社群。各家公司在這個指令集基礎上開發的自己的CPU核心產品都是要收費的,畢竟開發CPU核心產品也是要投入人力研發的啊,總不能都去做雷鋒吧?

以上這些都是老生常談。開源架構每過幾年就要來一輪,背後其實大家都懂,就是學院派總是要有點新的研究成果,「國外一開源,我們就自主」的風氣決定了,國外有什麼新的指令集架構開源都會在國內激起一陣躁動。但學術不等於商業。

CPU架構從1990年代的10多家到現在以X86和Arm為主,背後其實是更深刻的產業和商業規律在主導。在我看來,有幾下幾個要素:

1.指令集架構創新不具有革命性

有多篇論文分析過指令集架構和性能功耗的關係,結論是指令集的差別與性能和能耗沒有關係,兩者性能的差異是由於需求的不同在硬體設計上的反映,例如指令發射速度、分支預測、亂序執行等方面,提升這些方面的性能需要使用到大量的硬體,使得硬體設計變得更加複雜,並且帶來了更多的能耗。

正如吳軍在《浪潮之巔》中所說,「數量級是判斷一項新技術是革命性還是革新性的關鍵。」Arm處理器功耗相比於x86有了數量級的提升,手機市場又比PC市場出貨量要大一個數量級,這才有了Arm在行動網際網路市場佔據了端側的優勢,取代了x86指令集,也讓架構授權模式為更多玩家所認可。

在開源架構和Arm的PK中,沒有這種數量級上的差異。Arm和RISC-V都是RISC架構的,只是指令集定義的不同,這就決定了不可能從指令集PK中獲得什麼優勢,還是看具體的硬體實現和功能取捨。

2.技術先進性不等於商業成功

每次有人強調新的指令集比原有的指令集要高效的時候我就笑了,大家想想鍵盤配置的故事。現在的QWERT鍵盤配置雖然奇怪,但延續了這麼多年,已經有了強大的慣性,即使有人發明了更高效的鍵盤配置也無法得到廣泛支援。指令集上的故事也是類似。Intel的x86指令集是CISC架構的,曾被人Diss架構臃腫。

歷史上也有多次「x86革命」想取代x86架構,但都因為得不到廣泛的支持最終以失敗告終。巨大的商業利益和強勁的軟硬體的支持可以使得x86架構難以撼動,這些都不是一個簡單的技術問題。

3.指令集架構是一個昂貴的公共品。

對學院派來說,能執行軟體跑成Demo發論文就是成功,對商業公司來說則是要完成從指令集定義到CPU微架構的設計,到整個晶片的設計和相應軟體,工具鏈的開發和維護,以及在上面執行的作業系統,豐富的函式程式庫以及應用程式,還需要得到大量使用者認可,這些都不是一朝一夕之功。

設計指令集不難,讓一個指令集得到市場認可很難,而一旦得到認可,人們要遷移的成本也很高,這就是Intel能多年在PC和伺服器市場稱霸的原因。Intel也因為x86指令集的成功獲得了巨大的商業利益。指令集架構這一公共品是如此昂貴,無法通過社區自發成長起來,而必須結合商業公司的力量。Linux也是在Android採用以後才得到了大發展。

Arm透過授權模式讓眾多CPU廠商可以共用一套指令集和編譯工具,極大的降低了眾多CPU廠商的開發門檻,其實相當於眾多CPU廠商眾籌了一個Arm指令集,節省的是各家自己開發並維護一套指令集的開銷。也正因為這個原因,市場對CPU架構的人員需求減少了,對應用程式開發者的需求增多了,Arm生態系統才有了今天的發展。

現在眾多廠商眾籌另一個指令集,然後呢?也一樣有巨大的生態開發成本,從指令集定義到真正成熟得到廣泛應用,沒有一、二十年起不來。硬體不像軟體,有什麼錯誤可以發佈新版本去修正,一旦投片了再修改就難了。一個IP要做好不是那麼容易的事情,需要有客戶一起去趟早期開發過程中的坑,稍有不慎出現一個Bug,前期投入就要打水漂。

對商業公司來說開發成本損失還是小事,錯失了市場機遇才是最大的損失。即使新指令集生態真能起來,大多數公司要麼維護自己的CPU核開發團隊,要麼從IP授權公司購買相應的架構實現,真的能省錢嗎?還是到時候再切換一次指令集,把這些坑再趟一遍?

另外,開源架構採用的指令集架構開源,各家可以自己設計自己的CPU核的方式從一開始就埋下了碎片化的種子,各家IP公司自己設計自己的擴展,並且不需要回饋社區,其結果就是各自有一套自己的開發工具和軟體庫,重新走到了上世紀90年代有多家指令集架構的局面,對晶片開發公司來說並沒有節省什麼成本,反而因為各自微架構的特殊性帶來作業系統和應用程式的不相容,這是與商業世界成本儘量降低相矛盾的。

指令集是越多人使用價值越大,指令集架構也就更貴,而CPU核只是部分公司使用,相對於指令集架構就便宜一些,這是Arm的商業模式,是目前經受了實踐的檢驗的一種模式。當年MIPS指令集架構授權很便宜,CPU核心賣的貴,是從成本而不是用戶需求定價,正好搞反了。結果就是各家都拿了指令集自己去設計MIPS核,造成碎片化和分裂。

現在開源社群也是類似的問題。指令集開源,進入門檻很低,IP設計廠商各搞一攤。開源社群沒有力量去維護各家實現的統一標準,各家也只能透過低價來搶市場,晶片設計廠商則需要面對不同IP廠商的CPU核心實現,不能發揮統一架構的優勢,構成惡性循環。

以上是一點對開源架構的淺見,供參考。最近RISC-V一片讚歌之中,我們更需要有一些不同的聲音,RISC-V發展前景到底如何,拭目以待。

原文發表於ASPENCORE旗下EDN China姐妹社群麵包板,博主@憶輕狂 原創,謝絕轉載。原連結:《給開源架構潑潑冷水》