兩點陣圖靈獎獲得者同發文:計算機構架群雄逐鹿,新黃金十年將開啟
“計算機架構將迎來新黃金時代,所有計算機架構師都應該感到興奮!”
在最新一期的 ACM 通訊上(2019 年 2 月刊),2017 年圖靈獎獲得者 John L. Hennessy 和 David A. Patterson 共同發表了一篇名為《計算機架構的新黃金時代》的文章,這是兩人對圖靈獎演講的總結歸納和昇華。
他們在文中引用了大量詳實資料和資料,梳理出一條計算機架構歷史的發展脈絡,由此引出目前各種架構群雄逐鹿的盛況。輔以獨到和深刻的視角,他們丟擲了多個當下值得深思的重要問題和未來可能出現的潛在機遇,最後給出了“計算機架構領域將迎來新的黃金十年”的結論。

圖 | 文章截圖(來源:ACM通訊)
鑑於原文篇幅較長,我們對其中精化部分進行了編譯,整理和概括。全文圍繞 3 個核心觀點展開:
- 軟體的進步會啟發架構的創新;
- 硬體 / 軟體介面的改進會為架構創新創造更多機遇;
- 市場最終會解決架構之爭。
回顧歷史:“那些拒絕學習歷史的人,將會被迫重蹈歷史的覆轍。” —— George Santayana, 1905 年
指令集架構和儲存控制器
如今主流計算機由軟體和硬體兩部分構成,由於編寫軟硬體所用的語言有本質上的不同,它們之間的互動必須依賴於指令集架構(ISA),例如大家熟知的 x86 和 ARM。簡單來說,指令集規定了軟硬體之間的溝通規範(語言),依照相同指令集編寫的軟體,可以在任何支援該指令集的硬體上工作。這大大提升了計算機軟硬體之間的相容性,降低了整體成本。
在 20 世紀 60 年代早期,IBM 擁有四組用途不同的計算機系列,分別面向小企業、大企業、科研機構和實時計算,它們支援的指令集架構各不相同。IBM的工程師認為,有必要將四種指令集統一起來,有效支援所有計算機系列。
受到軟體程式設計的啟發,計算機先驅者和圖靈獎獲得者 Maurice Wilkes 提出了簡化控制的想法。他將控制的實現過程視為一個二維陣列,並稱之為“控制儲存器”。二維陣列的每一列對應一條控制線,每一行對應一個微指令,編寫微指令的過程被稱為“微程式設計”。一個控制儲存器包含一個用微指令寫成的指令集翻譯器,在執行一條傳統指令時,只需要將一系列微指令組合起來。相比使用邏輯閘,這種方法直接通過記憶體實現了控制,成本更低。

圖 | IBM System/360 系列的四個型號
IBM 看到了微程式設計的強大之處,相信這種新型指令集將會在計算領域掀起一場革命,最終選擇將未來壓注其中。事實證明 IBM 不僅主宰了彼時的計算市場,而且在 55 年後的今天,這些大型機的後代,每年仍然可以創造 100 億美元的營收。
我們不止一次地發現,市場最終成為了判斷計算機架構創新成功與否的關鍵因素,而這些創新通常需要巨大的工程研發投資。
積體電路和 8086
隨著時間的推移,越來越多的計算機開始使用積體電路,摩爾定律讓記憶體和控制儲存器變得更大,這也意味著更復雜的指令集。
不過在 20 世紀 70 年代,包括英特爾 8080 在內的主流微處理器仍然處於 8 位時代,主要依靠編匯語言編寫程式,通過新增新的指令互相競爭。英特爾聯合創始人戈登·摩爾(Gordon Moore)相信,英特爾的下一代指令集架構將會一直伴隨公司,因此他聘請了大批頂尖電腦科學博士,來研發下一代指令集和處理器——英特爾 8800。
在計劃中,新的 8800 處理器將擁有面向物件的架構,支援 32 位定址,支援可變的指令長度,而且還擁有一套基於最新程式語言 Ada 的作業系統。對於任何一個時代而言,這都是一個野心勃勃的專案,因此它也一再難產。
迫不得已,英特爾只能先組織新的團隊,緊急開發名為 8086 的指令集和基於此的 16 位微處理器,以順應市場。由於時間緊迫,他們只是選擇將 8080 處理器的指令集擴充套件到了16 位,而非重新設計架構。

圖 | 英特爾 8086 處理器(來源:Thomas Nguyen/Wiki)
不過造化弄人,8086 釋出之時正趕上 IBM 推出個人計算機,為其尋求 16 位處理器之際。IBM 原本相中了摩托羅拉尚未完成的 68000,但是與蘋果 Apple II 計算機的競爭迫在眉睫,只能轉而與英特爾聯手。最終IBM 在 1981 年 8 月 12 日推出了旗下首款個人計算機,風靡全球,出貨量高達 1 億臺,為英特爾臨危上陣的 8086 鋪墊了一個光明的未來。
雖然英特爾的 8800 專案沒有因此擱置,而是改名 iAPX-432 繼續研發並在 1981 年正式釋出,但是由於自身效能問題,8800 處理器亮相 5 年後就匆匆謝幕。相比之下,8086 所用的指令集卻沿用到了之後的 32 位 80386 處理器中。
歷史用另一種方式證實了摩爾的想法,只不過它選擇了 8086,而非 iAPX-432(8800)。這也告訴我們,市場往往缺乏耐心。
從複雜指令集到精簡指令集
時間來到了 20 世紀 80 年代初,軟硬體互動的巨大進步為架構創新創造了機會。人們發現,連 Unix 這樣的作業系統都可以使用高階語言編寫,那麼當時複雜的編譯器是不是可以變得更加簡單?
遵循這一思路,圖靈獎獲得者 John Cocke 為小型計算機發明瞭更簡單的指令架構集和編譯器。他和同事發現,如果避開復雜指令,僅使用IBM 360 指令集中的簡單指令,比如“暫存器到暫存器”操作和“載入與儲存”資料傳輸,就可以將程式的執行速度提升三倍。

圖 | RISC-I 和 MIPS
此後,本文的作者之一 Patterson 受到了激勵,開始研發精簡指令集架構,以及使用精簡指令集的計算機(RISC)。相比使用複雜指令集的計算機(CISC),RISC 的指令通常和微指令一樣簡單,因此不再需要微程式碼直譯器,而這些直譯器佔用的記憶體可以被 RISC 當成快取記憶體使用。
在 RISC 誕生之後,還有一些針對指令集的創新誕生,包括超長指令字(VLIW)和顯式並行指令計算機(EPIC)。它們都有各自的優點,英特爾與惠普還合作開發了一款基於 EPIC 的 64 位處理器 Itanium,但卻受困於較窄的應用範圍,比如處理數字訊號,無法徹底撼動 x86 的地位。
最終市場再一次失去了耐心,讓 x86 的 64 位版本取代了 32 位版本。在 PC 時代,x86 晶片出貨量於 2011 年達到頂峰,英特爾和 AMD 共出貨 3.5 億臺 x86 微處理器。
不過隨著 iPhone 在 2007 年釋出,以智慧手機廠商為主的後 PC 時代逐漸開始形成。他們重視效能,晶格面積和成本之間的平衡,不再直接購買微處理器,而是在其他公司的晶片上構建自己的SoC 系統,比如使用ARM 的 RISC 處理器。近年來,移動裝置出現了爆發式增長,再加上物聯網逐漸興起,RISC的出貨量已經飆升至200 億臺。
時至今日,99% 的 32 位和 64 位處理器都是 RISC 架構。可以說,市場解決了 RISC 和 CISC 的競爭。幾十年來,新的 CISC 指令集都沒有出現,而 RISC 已經成為了通用處理器的最佳指令集架構。
聚焦現在
過去的創新大多集中在指令集架構的設計上,不過大部分架構師並不會設計新的指令集,而是研究如何利用現有技術實現已有的指令集。
自 20 世紀 70 年代末以來,主流技術一直是基於金氧半導體(MOS)的積體電路,包括 n 型金氧半導體 (nMOS) 和互補金氧半導體 (CMOS)。MOS 技術的驚人進步速度,提升了電晶體密度,讓架構師能夠更好地為特定指令集提升效能。這種規律被摩爾所捕捉,他的摩爾定律預測:電晶體密度將會每兩年翻一倍。
摩爾定律和登納德縮放定律的終結
幾十年來,摩爾定律總體來說仍然準確,但其翻倍速度已經在 2000 年左右放緩。隨著 CMOS 技術接近極限,預測結果和實際情況之間的差距將繼續擴大。

圖 | 現實情況與摩爾定律的預測差距越來越大
另一方面,登納德縮放定律也已經接近失效。該定律指出,隨著電晶體密度增加,每個電晶體的功耗會下降,而每平方毫米矽晶片的能耗幾乎保持不變。登納德縮放定律的終結代表,能耗會隨著晶片核心數量的增加而上升,這也是當下多核時代帶來的能效挑戰——每一顆活躍的核心都會消耗能量,無論其是否參與計算,因此大量的能量被浪費了。
這些低效模型限制了效能的提升,想要獲得更大的效能提升,我們需要新的架構方法,更有效地使用積體電路。
被忽視的安全問題
在 20 世紀 70 年代,計算機架構師對安全問題十分重視。雖然他們知道是軟體引發了大多數錯誤,但他們相信架構支援可以提供幫助,不過這些想法並未被作業系統採用。軟體社群也提出了形式化驗證和微核心這樣的技術,來構建非常安全的軟體,但它們無法跟上處理器的效能發展。
結果就是,大型軟體系統不可避免地存在許多安全缺陷。隨著雲端計算大規模應用,安全缺陷的影響被進一步放大了,例如 Meltdown 和 Spectre 這樣的安全漏洞帶來了新的缺陷,暴露了原本受保護的資料和資訊。它們利用的旁路攻擊手段最早應用於軟體缺陷,並不是新技術。
面對這些,處理器架構師需要重視電腦保安問題,與軟體設計者共同合作,重新思考如何正確實現指令集架構,打造更安全的系統,杜絕此類安全漏洞的出現。
展望未來
通用處理器效率不高,摩爾定律和登納德縮放定律即將終結,處理器架構師似乎失去了效能改進的思路,還有沒有其他有效方法?
我們認為,目前有兩個很明顯的機會,如果把兩者結合起來,還能創造出第三個機會。
第一個機會是提升程式的執行效能,有兩種潛在的實現方法。
首先,目前軟體普遍由具有動態型別和儲存管理的高階語言編寫,它們的可解釋性和執行效率十分低下。例如用 C 語言重寫 Python 程式碼,就可以將矩陣相乘運算的效能提升 47 倍,如果再引入並行迴圈處理,記憶體優化以及單指令多資料並行化操作,那麼運算執行速度可達 Python 版本的 62000 多倍。這說明,高階語言與傳統語言存在巨大差距,前者注重程式設計師的程式設計效率,後者更注重程式效能。

圖 | Python 和四種優化方式的對比
因此一個有趣的研究方向是,在架構增強的幫助下,探索新的編譯器技術來減少兩者的效能差距。雖然實現高效編譯的難度不低,但收益巨大——只要 25% 的效率提升,就可以讓 Python 程式的執行速度提升數百倍。
第二種思路更加以硬體為中心,是設計針對特定領域的架構(DSA)。DSA 是一種專為特定用途定製的可程式設計處理器,通常是圖靈完備的,也被稱作加速器,比如針對影象處理的GPU 和針對深度學習的神經網路處理器。
DSA 之所以具備更高的效能,主要有以下四個原因:
1. 利用了特定領域中更高效的並行方式;
2. 更有效地利用了記憶體層次結構;
3. 在不需要時降低運算精度,提高資料和計算吞吐量;
4. 與領域特定語言(DSL)相結合,編寫出的程式執行效率更高。
事實上,DSL 就是我們開頭所說的“硬體/軟體介面的改進”,是通過架構創新提升效能的優秀範例。我們目前已經擁有很多架構創新,都很有競爭力:
- 英偉達開發的 GPU
- 谷歌開發的 TPU
- 微軟開發的,專門用於神經網路的 FPGA
- 英特爾開發的增強版 CPU
在這個時代,我們需要一個懂得垂直整合的團隊,從軟體程式、DSL 和編譯器、計算機架構和底層實現技術等各個方面權衡,最終提供整體優化方案。

圖 | TPU 的組織架構組圖
受到開源軟體的啟發,我們認為第二個機會是開放式指令集架構。想要創造處理器領域的 Linux 系統,整個行業需要開放式的指令集架構,這樣社群就可以打造開源核心。如果有很多人開始使用相同的開源指令集架構開發處理器,那麼這種競爭就會進一步推動創新。
最有名的開源例子是 RISC-V,由加州大學伯克利分校開發。它是一個支援 32 位和 64 位的模組化指令集,開發者可以根據需求選擇擴充套件包,增加或刪減增強功能。在 RISC-V 基金會的維護下,整個社群正在不斷改進架構。
除此以外,英偉達也在 2017 年宣佈了一個免費的開源架構,名為英偉達深度學習加速器(NVDLA)。它是一種可擴充套件的 DSA,支援機器學習推理。
如果我們結合以上兩種思路,再參考敏捷軟體的開發原則,就會發現第三個機會——敏捷硬體開發。由於現代電子計算機輔助設計 (ECAD) 工具提高了抽象等級,使得敏捷開發成為可能,而且增加了設計的重複利用性。雖然硬體不能像軟體開發那樣迅速,但是在特定步驟上,仍然可以實現四周衝刺的高速迭代。

圖 | 敏捷硬體開發流程
結語:“黎明前總是最黑暗的。” —— Thomas Fuller, 1650 年
要從歷史教訓中吸取經驗,架構師們必須牢記三個要點:軟體創新可以啟發架構發展;提升軟硬體介面會帶來創新機會;市場最終會解決架構之爭。
我們相信,標準微處理器效能增幅下降,摩爾定律和登納德縮放定律的終結,都不是必須解決的問題,它們只是公認的事實,同時帶來了驚人的機遇。目前我們擁有的高階語言和 DSA,打破了指令集的枷鎖,隨著安全問題越來越得到重視,計算機架構師將迎來新的黃金時代。
下一個十年,我們將迎來新計算機架構的“寒武紀”大爆發,對於學術界和工業界的計算機架構師來說,這將是一個激動人心的時代。