回顧歷史夢幻處理器:超純量管線興起與 CISC 廠商的 RISC(1980 年代初至 1990 年代中)
某位前總統曾有句曠世名言「一個便當吃不夠,你可以吃兩個」。同樣道理,也可沿用到「處理器亦可同時執行好幾個指令,沒人規定僅限一個」。
可同時執行多個指令的超純量管線(Superscalar),可謂近代高效能處理器的基礎,但筆者敢保證,即使今天科技業從業人士,恐怕也有很多完全不知道這件事的「先知」。
當代兩位計算機組織結構大師 David Patteron(RISC 一詞的發明者,加州大學柏克萊分校 RISC-I 到現在 RISC-V) 與 John Hennessy(史丹佛大學 MIPS) 合著的《計算機結構:計量方法》(Computer Architecture : A Quantitative Approach),是自 1990 年初版至今 30 多年,正統資訊科班不得不讀的重量級巨著與宣揚「RISC 教義」聖經。
1996 年第二版,堪稱全書最重要的第四章「先進管線技術與指令階層平行化」(Advanced Pipelining and Instruction-Level Parallelism),封面引言如下:
誰是第一名?(Who′s first?)
美國。(America.)
誰是第二名?(Who′s second?)
陛下,沒有第二名。(Sir, there is no second.)
以上是 1851 年 8 月 22 日「美洲盃」(America′s Cup)年度帆船賽前身,在終點線旁觀戰的英國維多利亞女王和隨扈的知名對話。美國與英國皇家遊艇中隊 15 艘遊艇,在俱樂部每年懷特島舉行的 53 海浬(98 公里)帆船賽展開競逐,最終美國獲勝,領先最接近的對手足足 8 分鐘。
這是領導 IBM 801 計畫的 John Cocke,將 IBM 第二代 RISC 架構命名「America」的靈感來源──RS/6000 系列前身,與計算機工業史上第一個超純量管線(Superscalar)架構微處理器。1982 年,IBM Waston 研究中心繼續以 801 為基礎的「Cheetah」(獵豹)計畫,探索 IBM 801 單一時脈週期執行多個指令的限制,與需修訂的相關功能。隨後 1985 年開始研究第二代 RISC 架構「Amercia」──離第一台超純量管線電腦 CDC6600(1964 年) 和 IBM System/360 Model 91(1967 年)相隔約 20 年。論「指令平行化」,相對「硬體」的超純量管線,超長指令集(VLIW)完全仰仗軟體編譯器。
▲ 讀者如果記得這頁,那學生時代一定非常用功,絕對比不學無術的文科筆者厲害一百倍。
1986 年,IBM 德州 Austin 團隊開奠基於 America 的 RS/6000(RISC System/6000)1990 年 2 月發表,是第一個 IBM Power 和 PowerPC 計算機系列,涵蓋 Unix 伺服器、工作站和超級電腦等應用,包含 1997 年國際象棋比賽擊敗世界冠軍 Garry Kasparov 的「深藍」(Deep Blue)。2000 年 10 月,RS/6000 品牌被 eServer pSeries 取代,陸續更名為 IBM System p 與今日 IBM Power Systems。
▲ IBM RS/6000 於 1990 年發表,是第一台採用 IBM Power 處理器的系統。多年來 RS/6000 經歷數次改名,包括 IBM eServer pSeries、IBM System p 和 IBM Power Systems。
但極度成功的 RS/6000 之前,IBM 曾在 1986 年 1 月推出「先烈」RT/PC(RISC Technology Personal Computer),使用 ROMP(Research Office Products Division Miniprocessor)處理器,1977 年春末開始研發,將 IBM 801 開創的技術商業化,也是第一個執行 IBM 的專屬 Unix 作業系統 AIX 平台。光憑這點,就值得歷史好好記上一筆。
但很不幸,產品實際鎖定的市場是「工作站」,競爭對手是 Apollo Computer 的 Domain Series 3000、DEC 的 Micro VAX II 和 Sun Microsystems 的 Sun-3,而非誤導很多人、以為這是和自己家 IBM PC 對打的「個人電腦」,導致平均售價高達「2 萬美元」的 RT/PC 非常難賣,從發表到 1991 年 5 月停產,只賣出 23,000 台。
說到「將 RISC 推廣到個人電腦」的偉大實驗,想必 PowerPC 大名無人不知無人不曉。1991 年蘋果、IBM、Motorola 組成「AIM 聯盟」攜手推動 PowerPC 發展。當時背景是:
三間公司必須聯手對抗英特爾和微軟的個人電腦市場持續主導地位,那時主流個人電腦幾乎都採用 80386 或 80486 處理器,論超純量的 x86 處理器,也即將出現英特爾研發中的 Pentium。
不限工作站和伺服器,IBM 可藉此將 RISC 架構推廣到工作站和伺服器以外應用領域,尤其市場規模巨大的個人電腦。
原先蘋果使用 Motorola 68000 系列 32 位元 CISC 處理器,但當 68040 遭遇進度延誤到 1990 年才登場,蘋果意識到急需另一間處理器供應商以降低風險。故蘋果曾在 1989 年啟動「Aquarius」處理器和「Scorpius」微架構研究案,是計算機工業史上「原生四核心」概念提案(各位的眼睛絕對沒看錯),做出未來指令集架構,應當從 CISC 轉向 RISC 的結論。所以當蘋果表達對 DEC Alpha 很感興趣,卻被對方以「VAX 還很有挖掘潛力」這種騙不了人的鬼話打槍後,IBM 就主動接洽蘋果,提議合作研發 Power 架構單晶片處理器。
因應蘋果和 Motorola 長期合作關係和第二供貨來源需求,況且 Motorola 量產消費型處理器經驗遠勝過 IBM,蘋果就把 Motorola 拉進來。
對在超純量 RISC 處理器 MC88000 系列陷入苦戰的 Motorola 來說,可與「RISC 元祖」IBM 合作根本就是天上掉下來的禮物,不僅可藉 IBM 分享 RISC 架構累積的長期豐富經驗,耗費更少研發經費與更短開發時程,更可保住蘋果這最不可或缺的客戶。
假若新 PowerPC 處理器可「硬體相容」投入生產、蘋果已有運行中原型機、並贏得多項電信應用嵌入式系統專案的 MC88000,將允許蘋果和 Motorola 無須重新設計電路板,更快將產品推向市場。理所當然的,第一代 PowerPC 601(1993 年)就延續 MC88000 的系統匯流排與處理器腳位,當 AIM 聯盟成立後,Motorola 立即中止 MC88000 家族。
對 IBM,出貨量大的低階產品可由 Motorola 負責,不必被迫做不擅長的事。更重要的是,IBM 極度渴望有蘋果當巨資研發處理器技術的「分母」,讓 Mac 分攤開銷,畢竟只靠少少的高階伺服器市場撐不了太久。現在 IBM Power 處理器產品時程牛步化,就是最佳例證。
在這可看到一個重要產品型號:計算機工業史上第一個「商用單晶片超純量管線處理器」Motorola MC88110(1992 年)。
今天對 Motorola 的刻板印象也許只限「手機」,但 1980 年代的處理器市場,Motorola 可是強勢地位,32 位元 MC68000(1979 年,縮寫 68k)輕鬆勝過市場其他產品,也適用新興 Unix 工作站市場。由於英特爾尚未大舉進軍 32 位元領域(搞砸 iAPX 432),80386 也到 1985 年才登場,這讓 Motorola 主導任何「非英特爾」處理器產品:英特爾握有 80% 市場,而剩下市占的 90%(約整體市場 18%)都是 Motorola 的天下。
1980 年代因兩位大師逐漸廣為人知的 RISC 思潮,曾引起處理器業界激烈爭論,沒人敢打包票說「根據高階程式語言編譯器的實際行為誕生,將執行更多簡單指令」的 RISC 一定能有更好表現,但這些爭議在 1980 年代中期,隨著 RISC 處理器工作站陸續問世,紛紛劃下句點。
以 SPARC 處理器的本家 Sun Microsystems 為例,Sun-3/80 工作站(1985 年 9 月)時脈 20MHz 的 MC68030 提供約 3 MIPS 理論效能,但時脈 16MHz Fujitsu SF9010 IU 的 Sun-4/260(1987 年底)卻高達 10 MIPS(雖然 CISC 和 RISC 的平均單一指令工作量不同,難以直接類比)。既然 RISC 是大勢所趨,HP 和 DEC 等大廠也紛紛轉向 RISC 平台,讓蘋果躍升 Motorola「最重要,沒有之一」的衣食父母。還在死守 MC68000 的廠商如 Atari 和 Commodore International,則在個人電腦快速普及浪潮下苦苦掙扎。
總之,Motorola 必須設計自家 RISC 處理器,也就是原稱 MC78000 的 MC88000(縮寫 88k)歷經多次延宕,終於 1988 年 4 月發表,比競爭對手 SPARC 和 MIPS 晚了整整兩年,號稱全球最快 32 位元處理器,時脈 20MHz 時 17 MIPS,25MHz 時 21 MIPS。
Motorola 企圖將 MC88000定位成「高階市場」,包括「電信、人工智慧、繪圖、3D 動畫、模擬、平行處理、超級電腦」,工作站仍建議停在行之有年的 MC68000,但事後證明,大多數潛在客戶彷彿都忘了 MC88000 的存在。
Motorola 關於 MC88000 的技術文件談到單週期指令、大型化暫存器檔案和 RISC 諸多特徵,但從頭到尾都沒提及 RISC 這名詞(都到火燒屁股的節骨眼,也沒必要自曝其短了)。Motorola 試圖從上個時代最快的超級電腦 CDC6600 汲取設計靈感,如記錄指令使用暫存器的狀態、重新排序指令執行順序、立即分派不依賴先前計算但尚未完成指令的「記分板」(Scoreboard)技術,提高 35% 處理器利用率。
為了進一步提升效率,MC88000 系統匯流排 P-bus 使用獨立 32 位元寬資料線和 30 位元寬定址線(像古老 PCI 匯流排是資料/定址共用,讓匯流排有效利用率僅 66%),指令單元和資料單元各自有一組,光這樣就吃掉快 128 條線,加上控制線、接地線和電源線等,一組 P-bus 總計用到 179 隻腳位,在那時算代價不菲的規格。但墊高 MC88000 成本的因素卻不只如此。
早期 MC88000 並非單晶片,而是分成 MC88100(整數邏輯運算單元和浮點運算器)和 MC88200(記憶管理單元和 16kB 快取記憶體)。Motorola 的想法是:分而治之更多規格彈性,可便於打造多樣化、更具彈性的多處理器系統,如最多四顆 MC88100 共用一顆 MC88200,或導入更多顆 MC88200,組成更大快取記憶體容量和更高記憶體頻寬,以提高整體性能。如果各位對 3dfx Voodoo 系列繪圖晶片還有點印象,應該不難理解背後考量。
不過,多晶片架構也造成「至少有一顆 MC88100 和一顆 MC88200(一般是前者一顆,後者兩顆),才能構成一個可用系統,不像早一年 MC68030,頂多不要可選配的外掛浮點運算器」,代表更高成本。
後來 Motorola 重新推出單晶片 MC88110,擴充為超純量管線,整合浮點運算器,並新增 80 位元延伸兩倍精確度的浮點暫存器,但大勢已去,時不我與,NeXT、蘋果和 Apollo 等幾家公司都曾積極研究 MC88000 系列供將來使用,但 1992 年 MC88110 最終面世時,這幾間公司都放棄了,最後僅剩 Motorola 嵌入式單板電腦 MVME197 可見 MC88110 的身影。
MC88000 指令集架構也有明顯缺陷。即使跟之前 MC68000 一樣認為是「乾淨」風格(和 x86、iAPX 432 與 VAX 比,所有人都很清爽),但偏偏 MC88000 整數指令和浮點指令共用暫存器檔案,就要求暫存器檔案要具備夠多讀寫埠以「餵飽」整數和浮點執行單元,使實現高時脈的超純量處理器更困難。
說到底,讓 MC88000 陷於萬劫不復境地的關鍵因素,還是遠比技術更致命的「辦公室政治」。天下所有產品,成敗都由「技術」、「商業」和「政治」三者交織而成的化學反應決定,最可怕的敵人往往躲在身邊。
Motorola 因 MC68000 商業成就實在太輝煌,讓 MC68000 部門將 MC88000 視為競爭對手(職場上這種見不得人好的鳥事隨處可見),迫使定價高到讓人無法接受。MC88110 後繼型號如時脈 100MHz 的 MC88120 和福特汽車預定使用的嵌入式應用版 MC88300,都從未成真,後者更接受 PowerPC 為替代品。Motorola 終究難以讓旗下首款 RISC 處理器 MC88000,重現 CISC 前輩 MC68000 的豐功偉業。
接著,「CISC 處理器廠商的超純量 RISC」除了之前文章提及的「計算機工業第一顆單晶片超純量 RISC 處理器」英特爾 i960CA(1989 年),另一個則是日後與英特爾並列「x86 雙雄」的 AMD,1994 年底公佈的 Am29050,和 Motorola MC88000 一樣,名稱也很長,常常得縮寫不可。
▲ 多晶片組態的高昂成本是 Motorola MC88000 推廣時的致命傷,一般都是一顆 MC88100(運算單元) 搭配兩顆 MC88200(資料快取記憶體,記憶體管理單元)。
Am29000 通常簡稱 29k,是 AMD 基於柏克萊 RISC 演化而來(也催生 SPARC、i960、ARM 和 RISC-V),並追加許多重大改進的 32 位元 RISC 處理器,一度和英特爾 i960 同為市場最受歡迎的嵌入式 RISC 晶片,廣泛用於各廠牌雷射印表機(無獨有偶,英特爾 i960KA 也是如此)。如同那時期慣例,Am29000 須加掛一顆 Am29027 或 Am29040 浮點運算輔助處理器,直到末代 Am29050 才內建。
Am29000 主架構師 Mike Johnson 1985 年加入 AMD,後來同時負責 K5(5K86)處理器,其所著業界首本超純量管線專書(他在史丹佛大學電機系的博士畢業論文擴展版),附錄章節分析 x86 指令集對超純量管線的艱鉅挑戰,留下「RISC86」和那段註定歷史留名的評論「x86 指令集不只複雜,更毫無道理可循……」(The x86 really isn’t all that complex - it just doesn’t make a lot of sense…)
這些柏克萊 RISC 衍生的設計,普遍都有「暫存器框格」(Register Window,或可稱為更傳神的「暫存器堆疊」)特性,透過重疊不同程序使用的暫存器交換資料,以減輕副程式呼叫(Subroutine Call)時,暫存器和記憶體間的資料傳輸量。
▲「以空間換取時間」的暫存器框格(Register Window)是柏克萊 RISC 留給後世的重要遺產,正名「暫存器堆疊」(Register Stack)也許較傳神,但現在少有處理器支援這技術。
最初柏克萊 RISC、SPARC 和 i960「框格」大小是固定的。以框格大小是 8 個暫存器的 SPARC 為例,軟體眼中隨時可見的資料暫存器仍為 32 個,全域(Global) 暫存器只有 8 個,剩下 24 個(8 個輸入、8 個區域、8 個輸出,前一個程序輸出變成下一個程序輸入)為暫存器框格之用,但當一個程序只用到一個區域變數,也還是占用 8 個暫存器,就變相浪費資源。
▲ AMD Am29000 指令集架構有 64 個全域暫存器和 128 個組成多個可變長度暫存器框格(Register Window)的區域暫存器「堆疊」(Stack),且預留日後擴充 62 個暫存器的空間。
有鑑於此,Am29000 可在 128 個區域暫存器中,配置長度介於 1~128 個暫存器的可變長度框格,前述狀況只會用到 2 個暫存器。相較只有 8 個全域暫存器的 SPARC,Am29000 有更多 64 個,甚至當框格填滿後,可將暫存器堆疊的末端暫時推入記憶體(大部分場合都會被快取記憶體吃掉)。
這些特色讓 Am29000 能在不同應用更有效率使用暫存器,特別像 PostScript 這種堆疊導向的程式語言,使 Am29000 家族很適合當雷射印表機的控制器。事實上,多數 Am29000 設計原則,確實存在於後進英特爾/HP 的 IA-64 指令集和 Itanium 處理器。至於這麼多的暫存器,是否限縮 Am29000 的時脈延展潛力,那又是另一個罄竹難書的主題了。
AMD 在 1994 年 10 月公開 Am29050,兼具超純量管線、非循序執行和推測執行,也是 Am29000 家族有史以來最大升級。但 1995 年 12 月 4 日,也就是英特爾發表前 i960 團隊為研發主力的 Pentium Pro(1995 年 11 月 1 日)後沒多久,AMD 宣佈中止 Am29000 研發,集中資源給高效能 x86 處理器。
▲ AMD Am29050 是 Am29000 家族唯一具超純量管線、非循序執行和預測執行的成員,每個時脈週期可發出(Issue)四個指令,再分配(Dispatch)給六個執行單元,但也從此成為絕響。
促成此重大決定的理由,不外乎「印表機市場雖成長快速但利潤真的太低」及「世人不敢懷疑 Windows 95 作業系統註定引爆個人電腦市場的成長狂潮」(可能還得補充 Windows NT 和 Linux 預言 x86 處理器勢必在伺服器市場占有一席之地)。AMD 讓最大個人電腦品牌商 Compaq 一度寄予厚望的 5K86 處理器(寧願痴痴等待 AMD,也不選英特爾 Pentium),也大量沿用 Am29050 部分功能單元,如幾乎原封不動的浮點運算器(反正主架構師也是同一個 Mike Johnson)。AMD 5K86 並未成功、經併購 NexGen 取得 K6,那又是別的故事了。
回到原點,無論英特爾 i960(1987 年)、Motorola MC88000(1988 年)、AMD Am29000(1988 年),都清一色是「CISC 處理器廠商的 RISC」,逐步演化成超純量管線版英特爾 i960CA(1989 年)、Motorola MC88110(1992 年)、AMD Am29050(1995 年),但都難逃慘遭腰斬命運,成為後人憑弔的歷史陳蹟。
文末筆者想起很久以前困擾好一段時日的大哉問:既有「超純量」(Superscalar),為何沒有「超向量」(Super Vector)呢?
答案其實很簡單:真正純粹的向量電腦,想提升單一時脈執行效率,沒必要「一個指令跑不夠,可以跑第二個」,直接倍增向量資料暫存器長度不就得了?真是徹頭徹尾的庸人自擾,好孩子千萬不要學。
我們已經從「歷代電腦維持回溯相容性實乃天賦人權」走到「追求指令階層平行化以改善運算效能」,下一篇文章也將迎接本系列連載的第一個高潮,也是前面曾提及的:原生多核心處理器的觀念起源蘋果「Aquarius」處理器和「Scorpius」微架構研究案。各位果粉,準備好要「充值信仰」了嗎?請各位好好期待吧。
▲ 各位果粉,聽說「充值信仰」的時候到了!筆者說的不是即將發表的 iPhone 14,而是蘋果 1980 年代末期的「原生四核心處理器研究案」。準備好了嗎?
(首圖為 IBM RS/6000 AIX 伺服器,來源:https://www.flickr.com/photos/epc, CC BY-SA 2.0, via Wikimedia Commons)