· 英特爾i860累積的寶貴經驗,對后來Pentium出現的MMX指令集產生極大影響
筆者在2020年7月撰文介紹過IBM BlueGene/L(1999年)和Fujitsu A64FX(2019年)兩款相隔20年、承先啟后的「超級計算機系統單芯片 」。但早在1989年,英特爾發布以色列海法團隊操刀的i860,不但聲勢浩大,是計算機工業史上第一個「百萬晶體管」芯片,更被譽為「Cray On a Chip」的「單芯片超級計算機」──雖然日后證實完全是不切實際的營銷炒作,但或多或少掩蓋了整體更優秀的i960。
反過來說,i860 也讓英特爾提前體驗 MMX 之類的 SIMD(單一指令多重數據) 指令,以及冥冥之中預言超長指令集(VLIW)架構的Itanium 處理器,當碰到編譯器無法充分優化代碼時,究竟會發生什么慘劇。
英特爾1989年推出的初代i860 XR(代號N10),運行頻率為25MHz、33MHz或40MHz,第一級cache是4kB指令加上8kB數據。1991 年問世的第二代i860 XP(代號 N11)增加 4MB 分頁、更高容量第一級cache內存(16kB 指令、16kB數據)、支持外部第二級cache(82495 快取內存控制器搭配數顆 32kB 容量的 82490 SRAM)、更快系統總線(理論傳輸帶寬 400MB/s)、頻率提升至 50MHz 且提供多處理器環境必備的總線窺探協議、與可外掛的 MESI 快取數據一致性協議控制器,以上諸多強化項目,讓i860 XP的晶體管數量激增到255萬。
▲ i860 在 1990 年代初期可是非常嚇人的怪物,說是那時代的「超級計算機單芯片」一點都不為過,只是最后還是雷聲大雨點小,無疾而終。
當時i860結合了許多獨一無二的功能,最引人注目的是超長指令集(VLIW)架構與高速浮點運算能力。
i860 有一個 32 位寬度的整數邏輯運算單元和三個 64 位寬度的浮點運算器(浮點加法、浮點乘法、繪圖),標準「單指令標量」(Scalar)模式,i860 每個頻率周期僅能擷取并執行一個指令,但「雙指令超標量」(Superscalar,這名稱很容易誤導人,超標量流水線和超長指令集本質上是截然不同的概念)模式時,可配對一個 32 位編碼長度的整數指令和一個32位編碼長度的浮點指令成64位指令包,使能同時透過64位寬的總線擷取并執行,這一個蘿卜一個坑能塞多滿,極度仰賴編譯器的指令安排。因此英特爾命名為「i860 64 位微處理器」,很顯然是極易讓人困惑的說法,坊間已長期以訛傳訛積非成是的「如何定義 64 位」只會越來越亂無章法。
i860 還有一種看起來很神奇的「用戶可見流水線」(User Visible Pipeline)模式,當指令用到某個「存放多頻率周期運算結果」的暫存器,可直接使用目前值,而不必等待最后結果,這讓筆者隱約想起 DEC Alpha 為了追求更佳浮點運算效能的「不精確中斷」和 Itanium 處理器的背后精神「Relax Limitations For Performance」。
此外,i860 內置浮點運算器,32個32 位浮點數據暫存器,可為「16 個 64 位雙倍精確度浮點」或「8 個128 位四倍精確度浮點」。附著在浮點運算器的「繪圖單元」(是的,你絕對沒看錯)可當成「16個64位整數」,執行線條繪制、Gouraud著色、去除隱藏線條的Z緩沖(ZBuffer),與如SIMD指令的讓64位數據路徑處理8個8位像素、4個16位像素或2個32位像素。
▲ 多處理器配置是 i860 XP 的重頭戲,英特爾就以此為基礎,建造 4096 顆 i860 XP 的 Paragon XP/S 超級電腦。
英特爾 i860 累積的寶貴經驗,對后來 Pentium 出現的 MMX 指令集產生極大影響,負責 i860 的主架構師、以色列海法研發中心的 David Perlmutter,也是 Pentium MMX(P55C)主導者,之后更藉領導Pentium M「Banias」體系發展,替英特爾變出救命稻草,奠定世人對英特爾的以色列人「 擅長精煉現有產物,壓榨最多潛在價值等既定印象。
乍看i860好像很厲害,號稱頻率33MHz時,擁有高達66M FLOPS(每秒6,600萬次浮點運算)的理論浮點運算效能,遠遠超越「介于5M~10M」的主流處理器,但還是老話一句:整個i860的設計都基于「編譯器能有效處理好指令排程任務」,但現實證明是不可能的任務。宣稱峰值60M~80M FLOPS的i860 XP(英特爾于HotChips公布的數字更是驚世駭俗的100M FLOPS),即使執行人工撰寫的組合語言代碼,也頂多達40MFLOPS,甚至大多數編譯器,連實現區區10MFLOPS都有困難。
i860 還有更嚴重的問題:無法高效快速執行多進程(Process)儲存和重現處理器狀態(Context Switch,可翻譯成上下文交換或「環境切換」)。當多工操作系統的多行程要共享單一處理器,交換處理器的行程或發生中斷(Interrupt)時,必須先儲存目前行程狀態,再將準備執行的行程狀態載回處理器。i860 最理想也需最少 62 個時鐘周期,最差更高達「2 千個」,使其根本無法當成一般用途的泛用處理器。想當初,Pentium MMX 那共用浮點寄存器的 MMX 暫存器切換,才不過「幾十個」時鐘周期,就讓很多人不滿意了。
總之,簡單一句話回答 i860 沒有成功的主要原因:賬面空有優異的理論性能,但缺少配套的最佳化編譯器(英特爾又再次栽在軟件)及正常行程切換,無法發揮「一定程度」潛能。時任英特爾CEO的安迪·葛洛夫(Andy Grove)就暗示i860市場失敗,應歸因于「分身乏術」(being stretched too thin),同時推出「基于CISC,卻兼容所有個人計算機軟件」的80486和「基于RISC,效能很棒,卻不兼容任何現有軟件」的i860,讓消費者完全搞不懂英特爾到底要走哪個方向, 最終市場依舊做出習以為常的決定。
話說回來,i860 還是導入超級計算機,最具代表性者莫過于英特爾自家 Paragon 系列和 iPSC(Personal SuperComputer)系列,前者長出多達 4,096 顆 i860 XP 的 Paragon XP/S 超級計算機,后者第三代產品則是用最多 128 顆 i860 XP 的iPSC/860「個人超級計算機」。
▲ 英特爾Paragon 超級計算機的 CP16 運算節點,可很清楚看到三顆 i860 XP。(Source:維基百科)
除此之外,具GPU單元的i860也用在工作站,如NeXT Cube工作站的NeXTDimensions顯卡圖形加速器和SGI RealityEngine的幾何處理引擎(Geometry Engine)。美國軍方亦采購相當數量的i860,給航空計算和數字數據處理輔助處理器使用。
▲ 昔日 3D 圖形處理霸主 SGI 的 RealityEngine 幾何處理引擎,上面壯觀的 12 顆 i860 XP。
有趣的是,至今構成微軟 Windows 操作系統心臟的 Windows NT 系統核心,最早就以代號「Dazzle」的 i860 XR 工作站為最初平臺,后面才陸續移植到「Jazz」MIPS 處理器系統、80386、Alpha和 PowerPC,所以一直不乏 NT 簡寫并不是「New Technology」而是 i860 XR 代號「N-Ten」(N10)的說法。
行文至此,i860 處理器本身是英特爾嘗試RISC架構時的產物,繼i960再次用實際行動面對RISC新潮流,不放棄CISC同時,也做點新東西試手氣,而從RISC出現后,更無人膽敢逆向操作、自找麻煩打造全新CISC指令集。英特爾i960和i860充分象征無論新來還是后到的處理器廠商,整個計算機工業界,無不遵循RISC精神和思路,改進或設計指令集架構和處理器微架構。
斯坦福大學MIPS共同設計者Steven Przybylski 說過的名言:「RISC 是1985 年后的所有電腦?!?(RISC:any computer announced after 1985.)其意就在此,RISC 的普及大勢,仿佛飛出全壘打墻的棒球和變心的愛人,一去不回頭。
既然RISC是歷史的必然,那身為RISC始祖精靈的藍色巨人IBM,要怎樣設法將旗下紛亂的中端CISC產品線,統合至崛起中的IBM 801后代,就是非常有趣的話題,這也造成IBM的RISC指令集陷入空前絕后的版本分裂,耗費近20年才再度統一。這就是下一期的主題:鏡頭轉回 IBM,一窺 AS/400 的誕生與 PowerPC 的演進史。