2018 年3月21 日,ACM任命John M. HennessyDavid A. Patterson獲得2017年ACM圖靈獎,以獎勵其開創系統的定量的方法來設計和評估計算機體系結構,該方法對微處理器行業產生了持久而深遠的影響。獲獎者在ISCA-2018舉辦了圖靈講座——計算機體系結構的黃金時代:領域專用的軟硬體協同設計、增強安全性、開放的指令集以及敏捷晶元開發。以下為本次講座的內容。

我們將在第一部分介紹計算機體系結構的歷史,這一部分將花費20分鐘左右,由我(Davide Patterson)來主講。John(John Hennessy)將在第二部分介紹我們這一領域正面臨的一些挑戰。我們兩人將一起介紹第三部分,他介紹領域專用架構,我介紹開放架構以及敏捷硬體開發。

OK,讓我們回到50年前。在20世紀60年代早期,IBM遇到了一個問題。IBM擁有四條互不兼容的計算機產品線,因為不兼容,他們的指令集是不同的,軟體棧是不同的,操作系統是不同的,IO是不同的,甚至市場也是不同。因此,IBM的工程師產生了一個想法,他們押注,公司將開發一套統一的指令集,這套指令集能夠兼容所有四個獨立的產品線。

這一問題中最困難的部分是控制。Maurice Wilkes提出了一個想法,是關於如何簡單的進行控制的,他是第二個獲得圖靈獎的人,也是從我們這裡領域獲獎的第一人,他的這一想法被稱為微編程(microprogramming)。由於當時硬體邏輯比ROM和RAM更貴,但是ROM比RAM便宜一些而且速度更快,因此我們將控制邏輯特化為只讀存儲,並將控制器中的每一個字稱為微指令。IBM當時準備使用微編程技術來解決兼容性問題。

在1964年4月,IBM做出了公司歷史上最重大的聲明。這裡有四種不同機器的例子,從表中我們可以看到,數據通路從8位到64位,對應的微指令從50位到87位。所以那時的微代碼(microcode),硬體越寬,微指令越寬,也就不需要採用更多的週期來執行,所以微代碼更短,這種方法被稱為水平微指令。左邊的例子是50比特,但是微代碼更長,因為它花費了更多的時鐘週期來執行,所以這種方法被稱為垂直微指令。如果以現在的美元計價,左邊的例子花費150萬美元,右邊的例子花費800萬美元。最終那些工程師贏了,IBM在大型機計算行業佔據了主導地位,這套指令集直到今天仍然可用並且主導著大型計算機。第二個從計算機體系結構方向獲得圖靈獎的人Fred Brooks在這項工作中起到了重要的作用。

隨著摩爾定律以及半導體技術的到來,在微型計算機領域中,運算邏輯、RAM以及ROM均採用相同的晶體管來實現,因此RAM具有了與ROM相同的速度。隨著摩爾定律,我們可以擁有更大的控制存儲,並且由於RAM,我們可以修改微代碼中的bug,最終這導致了更加複雜的指令集的出現,經典的例子是DEC的VAX指令集,我們可以看到它具有96位寬,5000微指令。

這時有人提出了一個想法。因為微代碼是在RAM中,所以被稱作可寫控制存儲。因為它是可變的,不僅可以執行標準的指令集,還可以在可寫控制存儲中根據應用程序進行定製。因此微編程在學術界變得非常流行。當我還是研究生時,我的博士論文就是這一領域,我的第一篇論文投在SIGMICRO,SIGMICRO實際上就是the International Workshop of Microprogramming,後來它改變了自己的目標領域,不過最初是關於微編程的。現在可以確定的是,最著名的使用可寫控制存儲的計算機是Xerox Alto,於1973年製造。它產生了很多今天仍在使用的想法,他是第一臺具有圖形用戶界面的電腦,第一臺具有乙太網的電腦,這些全都以微代碼的形式寫進了可寫控制存儲中。這裡有一張Alto的圖片。第三個從計算機體系結構方向獲得圖靈獎的科學家是Chuck Thacker,對Alto做出了重要的貢獻。

從現在來講,微處理器(microprocessors)是落後於時代的。微處理器跟隨大型機的發展路線,憑藉MOS技術迅速發展,但是隻是模仿大型計算機所做的事情。設計者會進行處理器大戰,因為用戶在使用彙編語言,設計者將在來回的反擊中發明新的指令。現在確定的是,整個20世紀70年代中,我認為最具有野心的微處理器是432。以摩爾定律聞名的Gordon Moore是一位有遠見的人,他看好他們(Intel)擁有的8位8080微處理器,認為應該在此基礎上改進,直到它能持續下去。因此Moore僱傭了一批計算機科學的博士,將他們送到俄勒岡州發明下一代指令集,這是一個非常有雄心的計劃。在那個時代,他們研發出了32位面向對象的體系結構,它有一個使用外來編程語言編寫的操作系統,雖然想法很巨大,但是他們是落後的。它不適合單個晶元,分散在幾個晶元上,具有性能問題和可用性問題。因此在俄勒岡的人不得不告訴Gordon Moore,他們不能及時完成工作。Gordon Moore啟動了一個補救項目。它被稱作8086,整個團隊擁有52周來升級一個權宜之計的16位處理器,在52周內完成指令集、架構、晶元等所有事情。他們花費了三週的時間來設計指令集,並且做到了這一點,基本上將8080擴展到了16位,但是沒有大張旗鼓的宣佈。對於Intel來說的好消息是,IBM決定選擇一個86的8比特版本。雖然IBM更喜歡68000,它具有更優雅的指令集,更接近於360,但是68000是落後的,因此IBM選擇了8088。IBM當時認為他們能夠出售大約250000臺PC,但是實際情況是,他們賣出了一億臺。8086一夜成名,由於IBM之前已經發明瞭二進位兼容性,它與PC軟體二進位兼容, 8086的前景變得非常光明。

因此,現在研究者開始注意這些微編碼的計算機。這裡有一張第四個從計算機體系結構獲得圖靈獎的人John Cocke的圖片。這一階段發生的事情是從彙編語言編程過渡到高級程序語言編程。那時高級程序語言非常流行,但被認為不能編寫操作系統,而UNIX反駁了這一觀點,UNIX就是使用高級程序語言編寫的,實際上我們可以使用高級程序語言編寫任何東西。在這種情況下,對於體系結構來講,重要的不是彙編語言程序員做什麼,而是編譯器輸出什麼。John Cocke以及他在IBM的團隊研製了ECL伺服器以及先進的編譯器技術。他們宣稱,讓我們採用IBM大型機指令集的編譯器技術,但是隻使用載入和存儲寄存器-寄存器操作的簡單指令。這對性能將產生什麼影響呢?它的速度提高了三倍。僅僅只是使用了指令集的一個子集,這是一個令人震驚的結果。然後計算機架構專家Joel Emer和Doug Clark做了一個VAX架構的研究,他們發現了一些有趣的事情。首先,每一條指令的平均時鐘週期數是10,所以如果使用微代碼解釋器,它平均需要10個微指令才能做到同樣的事情。其次,他們發現的另一件事情是,指令集的20%是微代碼的60%,並且他們幾乎從未被使用過。因此我們為什麼還要保留那些指令。我(Patterson)在那個時代的情況是,我於1976年進入Berkeley,作為一名助理教授,三年後,我在DEC進行了一次休假,因為我在微程序設計方面完成了我的論文,他們想要我幫助解決微程序設計的bug。我震驚於從VAX指令集架構中尋找錯誤是如此的困難。因此我一返回Berkeley,就寫了一篇論文,我說,如果繼續遵循小型計算機以及大型機的趨勢並且構造更加複雜的指令集,將面臨微編碼問題,然後就必須修理我們的微處理器bug。我提供的解決方案是使用可修復的微代碼。但是這篇論文發生了什麼事情?它被拒稿了。我記得審稿人說,使用可修復的微代碼製造微處理器是一種愚蠢的方式。所以,我想,如果指令集變得更為複雜,我們就需要修復它,但是可修復的微處理器是一種愚蠢的方式,那麼,我們要怎樣做呢?

這是從CISC向RISC的轉換。讓我們將SRAM用作處理器內部的快速讀取存儲,而不是用於微代碼解釋器,作為用戶可見指令的緩存,存儲器的內容將根據程序執行的內容而變化。讓我們保持指令集的簡單,我們不再需要解釋器,而是得到一個流水線實現。因此你可以認為RISC就像不那麼寬的微指令那麼簡單。順便一提的是,編譯器只使用CISC指令集的一部分。在那個時代,由於摩爾定律,晶元越來越大,我們可以在單個晶元上獲得整個32位的數據通路和緩存,這使得RISC更具有吸引力。同時,Greg Chaitin在寄存器分配方面取得了突破,使用圖形著色(graph coloring)技術使得寄存器架構比以往更加高效。

Berkeley以及Stanford在當時的情況是,我們最開始通過一系列的研究生課程開展我們的工作,通過四個研究生課程研製了前面提到的RISC-1。其中的兩名研究生決定製造一個更高效的後續版本。在同一時間,Hennessy和他在Stanford的學生研製了MIPS-1。這些成果都是在同一時間取得的。

你知道,我們希望在早期就已經得到了這個公式。但是我認為,這個公式是通過Clark評價VAX架構的工作來取得的。我們可以將這個公式分解為三部分,正如Dileep Bhandarkar在論文中寫的一樣,相比於RISC,CISC執行需要更少的指令,差不多是RISC指令的四分之三,但是需要更多的時鐘週期,RISC相比CISC,存在差不多四倍的性能提升。

在PC時代,我們在Intel的同事可以組織500人的團隊來構建微處理器,遠遠超過RISC人員所能做到的。他們擁有出色的技術,將x86指令翻譯成RISC微指令,RISC中的一些好想法他們都可以使用,其晶元的產量增長到三億五千萬個每年,不僅僅主導桌面端,也主導伺服器端。但是在後PC時代,從2007年的iPhone開始,iPhone不從Intel那裡購買晶元,它將知識產權整合到自己設計的SOC上,實際上,2017年,超過200億個32位的RISC晶元被生產。X86產量在2011年隨著個人電腦銷量的下降而下降,而它們現在的銷量已經比以往少了,雲端雖然龐大,但是正如論文所估計的,雲中大約有1000萬臺伺服器,因此也不需要那麼多晶元。所以現在99%的市場是RISC。

OK,在計算機體系結構的下一段歷史中,將是什麼取代RISC和CISC?是超長指令自(VLIW)。VLIW領域最著名的專家是Josh Fisher。他實際上在微程序設計領域完成了他的論文,我們可以認為VLIW是水平微編碼。VLIW是控制大量數據通路的非常寬的指令,由編譯器完成所有工作。

對Intel來說,他們在過去已經從16位轉換到了32位,現在是時候從32位轉換到64位了,而他們決定押注VLIW,稱為EPIC。事實上,Intel與Helett Packard合作,他也正在致力於VLIW的研究。他們一起研製EPIC架構,它是VLIW的具備二進位兼容性。他們在1994年開始大幅宣傳這一技術,現在宣傳的目的基本上都是出於商業原因了。我們知道,Intel使用這種緊急指令集已經20年了,因此獲得更多的技術基礎是有意義的。還有一個商業上的優勢是,雖然AMD擁有製造x86的權利,但是對於新的指令集,他們不具有權利,不被允許製造。因此AMD被迫將x86擴展到64位,而這種新的架構後來佔領了全世界。在90年代Intel和HP聯合時,一大批人說他們代表著未來。一大批的公司相信了他們,放棄了他們正在做的事情,放棄了RISC架構,開始接受EPIC。

後來發生了什麼?EPIC失敗了,這與編譯器相關。我們知道,在浮點運算中運行良好的代碼可能不適合整數運算,指針引起了這個問題。另外由於VLIW是長指令,所以程序變得非常大。分支的不可預測也成了一個問題,特別是對於整數運算,緩存的命中降低。這些原因使得VLIW很難編譯。而亂序執行技術對緩存的延遲要比VLIW更好,基本上可以說,亂序執行技術包含了VLIW的優勢。但最重要的是VLIW所押注的編譯器。雖然我也認為編譯器能處理所有的複雜性,調度所有的的資源,但是結果證明,Don Knuth以及其它的圖靈獎獲得者說,這不可能被寫出來。現在回想Itanium和EPIC的所有宣傳,當人們空閑時,人們注意到一些事情,有些人不稱呼它為Itanium,而是稱呼為Itanic,你可以看到未來沉沒了。因此這就是我們在計算機體系結構中做的事情,我們提出一些爭論,然後公司花費數十億美元投注雙方,最後我們做出設計並弄明白。在這個例子中,它(EPIC)是失敗的。

我的部分到了尾聲,接下來我將向我的同事遞交當今關於指令集的共識,「不是CISC」。自30年以來,沒有人提出過一個微代碼解釋指令集。而VLIW不能用於通用目的,原因我們已經講過了,但它在嵌入式RDSP中找到了用武之地,因為嵌入式程序的分支更簡單,沒有緩存,程序更小,所以它更適合VLIW,但是VLIW不能用於通用目的。所以被剩下的是什麼,RISC,誰能猜到,35年以後,RISC仍然是最好的想法。

OK,現在有些事情真的是不同了。接下來我(Hennessy)將向大家介紹當前面臨的一些挑戰。

我知道大部分人對於這頁PPT已經很熟悉了。技術在改變,我們正處在一個大量事情發生變化的時代。Dennard Scaling定律的結束意味著,低功耗變成一個重要的設計考量。摩爾定律的結束,雖然還沒有完全結束,就像Gordon Moore向我說的那樣,所有的指數都結束了。我們正處在摩爾定律減速的階段,但是圍繞我們的架構理念,我們面臨一些和以往類似的挑戰。我們推動的架構理念比以往更難,效率更低。不管是多核的想法還是Amdahl定律,都是利用指令並行的概念。隨著這些架構理念的無效性變得越來越大,Dennard scaling定律的終結和摩爾定律的終結使得這個問題越來越難。

我們來看一下,處理器發生了什麼事情?其實,我們在早期就遇到過這種情況,我們早期的CISC處理器每年的性能提升約22%。然後,我們進入了不可置信的高增長階段,處理器的性能顯著增長,每年提高50%,之後我們的指令級並行(ILP)失去了動力。隨著Dennard scaling定律終結,我們轉向多核,它起到了很好的效果,之後增長開始變低,並且最近兩年的結果是,處理器的性能每年只提升3%。在顯著增長階段結束後,我們應該重新思考,我們要做什麼,我們必須以不同的方式來解決問題。

如果你再看一下其它方面,你可以看到DRAMs中摩爾定律的放緩。當然,DRAMs是一個特殊的技術,它們依賴溝槽電容器技術,因此看起來它的尾部下降的比處理器更快。

即便你看看Intel處理器中晶體管的數量,你也可以看到摩爾定律的結束。在圖中,八九十年代有一點點下降,然後我們集聚動力提高了速度。但是你可以從曲線上看到,從大約2000年開始,我們一直在下降。如果我們保持摩爾定律這條曲線,我們今天在典型處理器上的晶體管數量將是原來的十倍。所以我們面臨的是更為嚴重的問題,它將我們從曲線上分離,這應該引起我們所有人去思考。

Dennard scaling定律,一個與摩爾定律類似的問題,但是更加尖銳。每個人認為低功耗是晶元設計的一項重要的工作。隨著工藝的不斷改進,我們得到了這條藍色的曲線,功耗正沿著相反的方向發展,藍色的曲線大約在2008年真正起飛,它只有上升、上升、再上升。能耗取決於我們使用晶體管的效率。不幸的是,我們使用晶體管的技術正變得越來越低效。想一下我們都喜歡的緩存,它在計算中是一個偉大的想法,我們的緩存越來越大,加速程序的效率卻越來越低。所以這也是我們的挑戰,我們必須找到新的方法來思考如何更高效的使用能源。

在午餐時間我們聽到小組在討論安全問題,我們處在一個非常糟糕的狀態。簡單地說,如果飛機像計算機一樣經常發生故障,那麼不住在南加州的人將不會出席本次會議,因為你們都在家中,永遠都不會想坐飛機。如果汽車也這樣發生故障,我們永遠不會想開車。現在,我們中的一些人年紀可能足夠大,能夠記得以前曾經非常強調安全性。在70年代,一些偉大的項目中,例如Multics,有大量的研究關注安全。我們發明瞭域(domains)、環(rings)、甚至功能(capabilities)技術。我們在20世紀70年代進行了試點,但是這些想法沒有被很好的利用,也沒有開發出使其快速執行的架構技術(類似TLB(translation lookaside buffers)的技術使得虛擬存儲成為可能。想像一下沒有虛擬內存,每次內存訪問需要兩次主存訪問)。我們沒有針對安全技術開發高效的架構。因為這些技術看起來好像沒用,他們有很多開銷,最終被遺棄了。與此同時,我們認為形式驗證將解決所有的安全問題。我記得基於內核或者微內核的操作系統,能控制安全性的操作系統的內核只有1000到2000行代碼,但實際情況是,沒有一個內核的代碼量小於一百萬行。因此我們基本上沒有按照我們原來所設想的將問題解決。幾乎所有的軟體都有錯誤。你們中所有的人在購買軟體時,將得到一個15頁左右的文檔,它基本上在講,這個軟體如何糟糕,是吧?你檢查了包裝盒子卻購買了軟體。因此我們硬體社區必須加強與操作系統社區的合作,與考慮安全性的人們一起合作來真正解決這個問題,如果我們不做這一點,我們的用戶羣體將會越來越不滿意。

體系結構存在一些漏洞。這裡只是一個簡單的例子。Intel處理器擁有管理引擎(ME),在任何內核操作系統代碼運行和機器設置之前先運行這些代碼,但是有誰讀過這一堆代碼並且確保它在做安全的事情?我們都沒有讀過這些代碼,因此我們遇到了大型指令集的真正問題,人們可以測試隨機操作碼,在指令集定義中尋找漏洞。我們必須解決很多安全問題,必須重新思考體系結構的安全性。

當然,正如我們在午餐時指出的那樣,我們擁有幽靈般的計算機體系結構。這將要求我們重新思考指令集架構的定義,我們從未思考過時間基準。我的年紀足夠大了,記得在20世紀70年代首次發現基於時間的攻擊。在Top 10和Top 20上都發現了基於時間的攻擊,他們運行在磁帶系統上,我們只是忘記了,並且認為這是一個操作系統問題,是一個純粹的軟體問題。現在,這成為一個體系結構問題,是一個已經存在了20年的體系結構問題,我們甚至不瞭解它。因此我們需要重新思考安全性的意義、我們的角色、架構社區的角色以及如何協作。我認為將來會有更多微架構的攻擊,更多基於時間的攻擊。這意味著我們需要重新思考對安全性的看法。現在是時候思考這一問題了,我們需要重新定義計算機體系結構的概念。

至此,我們聽到的所有事情都像是悲劇。摩爾定律放緩,Dennard scaling不再,架構安全一團亂麻,我們針對這些問題要做些什麼呢?我總是引用John Gardner說過的一句好話,他說,我們所面臨的是一些看起來不可能的挑戰,機遇偽裝成巨大的挑戰,我們在這一領域,將擁有巨大的機會。

所以,這些機會是什麼?

想想軟體。我大約在25年前向Maurice Wilkes提問,如果摩爾定律放緩,屆時會發生什麼事情?他說,那麼我們就不得不更仔細的思考如何編寫軟體並且更加註重效率。所以首先,我們獲得了以軟體為中心的機會。我們都使用現代腳本語言編寫程序,他們是翻譯執行的,是動態類型的,鼓勵重用,非常友好,但是他們的運行效率表現的非常糟糕。其次,我們獲得了以硬體為中心的機會,Dave和我都相信,唯一前進的道路就是讓體系結構更具有領域專用性,我想在架構領域有非常多的人都持有這一觀點。所以不要再嘗試製造每件事情都能做好的通用處理器,而是製造一種能夠非常好的完成部分任務的處理器,並且找出如何使用這些技術建立一個異構的架構。當然,我們可以將軟硬體的機會組合起來,我們不僅要考慮特定領域的體系結構,還要考慮用於編程的專用語言。

這裡有一張令人驚訝的圖表,出自Leiserson的文章 「There』s Plenty Room at the Top」。文章採用了一個簡單的算例即矩陣乘法。首先將初始的python版本程序重寫為C程序,它的速度提高了整整47倍。以我在編譯器領域的研究經驗來講,一個2的加速因子就足以讓你成為編譯器領域的明星,即使我們只是得到47的一半,我們也可以得到加速因子23,你將會成為一個英雄,你將贏得圖靈獎。其次我們使用一顆18核的Intel處理器,分析並找到可並行的循環,因為我們的軟體系統不能自動找到它們,我們得到另一個加速因子8。接下來對內存佈局進行優化,使得緩存能夠在大型矩陣上正確工作(因為通常情況下不能),我們將會得到因子20。最後我們使用具有AVX指令的領域專用硬體,獲得性能提升上的另一個因子10。最終版本比初始版本快了大約62000倍。突破摩爾定律的限制需要做許多的工作。而這是一個很好的機會。

領域專用體系結構面向一系列上層應用,根據其計算特徵來定製架構,從而獲得更高的性能,這意味著DSAs向我們提供一種可編程的基礎設施。一種體系結構的機器能夠處理具有特定領域計算特徵的一系列應用,這不僅僅是一個硬連線邏輯。機器學習的神經網路加速器、圖形計算的GPUs、可編程網關,都是非常好的例子。

如果你瞭解Dave和我,你知道我們希望看到這些技術的定量解釋,我認為這是重要的,因為技術不是黑魔法。它們為什麼是高效的,是因為更高效的使用了指令級並行(SIMD對比MIMD,不如MIMD靈活,但是當它起作用時,更加高效,沒有人會懷疑這點。對於VLIW、預取或者亂序執行。當VLIW起作用時,可以獲得更好的性能),還是因為更好的利用存儲帶寬(緩存是一個偉大的想法除非不能起作用,因為無論是空間局部性、時間局部性還是流式,程序員更理解領域應用的存儲訪問模式),或者是消除了不必要的精度(用更低精度的浮點數替換IEEE浮點數,使用16位或者8位的整數替換32位或者64位的整數)。最後使用領域專用語言來編程,獲得更高層次的效率。

什麼是領域專用語言?我認為其關鍵問題是,如果你要支持特定領域,就很難從C或者Python開始並且抽取有效映射到硬體的所需知識水平。這個問題太難了。編譯器社區的許多人都在致力於解決這一問題,只是太難了。我們需要一個高層次的編程語言,支持矩陣、向量或者其它高層數據結構以及這一層次上的專用操作。如果我們想要的領域專用程序仍然是與架構獨立的,這意味著存在有意思的編譯器上的挑戰,【在構建某個領域的應用時,不需要考慮底層體系結構,DSL的設計既要考慮通用性,也考慮領域專用性】。因此我們面對編譯器方面的有趣的挑戰,它能夠將領域專用的程序映射到一個特定的架構,並且這個架構可以隨著版本變化。

我認為存在許多非常好的研究機會。對於通用應用,使得Python程序運行的像C語言一樣快。現在的情況似曾相識,因為我們在RISC時代所作的事情就是使得高層編程語言在當時的體系結構上高效運行,現在是同樣的挑戰。對於領域特定應用,正確的目標是什麼,合適的語言是什麼,如何看待編譯器技術,如何創建構建具有架構獨立性的領域專用語言和應用。

有一個領域的論文數量增長速度和摩爾定律一樣快,在這個圖片中可以看到,它就是機器學習。這是一個明顯的領域,它是計算密集型的,提供了許多有趣的想法,應用的數量正在突飛猛進的增長。

為什麼不在機器學習上開展工作呢? Google的Tensor處理單元就是在這一領域進行嘗試的一個例子,專註於神經網路。從Google的角度來看,如果不部署這項技術,將不能承擔機器學習的大量應用,因為機器學習的計算成本太高了。

這些架構看起來完全不同,我們沒有建立大型緩存並佔用大量用於控制的體系結構,而是針對應用程序優化內存使用,因為內存訪問的功耗非常巨大。嘗試在晶元內而不是晶元外進行內存訪問是非常困難的。可以考慮構建大量計算帶寬以匹配正在運行的應用程序的類型。在做神經網路計算的情況下,需要做大量的矩陣乘法,所以你建立一個陣列。這是一個古老的想法,在它被創建30年後又回歸了。

如果你看一下性能,可以看到顯著的提升,每瓦性能的改進。當然,我們在這裡所要面對的挑戰之一是,使用什麼應用或者什麼基準。正如我們早期所作的一樣,我們發明瞭SPEC作為一種標準化的方法,並且可以比較不同的架構,現在,我們不得不為機器學習或者其它領域做到這一點。我們在架構社區學到的一件事是,如果我們有一套基準測試,它是合理的,不會被篡改,將為每個人提供一種輔助,輔助他們思考如何提出想法,並且進行測試。

總而言之,機會很多,但是需要一種新的計算機體系結構研究方法。我們需要復興計算機體系結構。我們需要考慮如何組建團隊,將理解應用程序的人,理解計算機語言或者領域專用語言以及其它編輯器技術的人、理解體系結構及底層實現的人組合在一起,而不是隻瞭解垂直技術棧中的一個小部分。我的觀點是,應該回到過去,回到計算機公司垂直整合而不是橫向分解的時代,我認為這為計算機學術界和工業界的人們提供了一個振奮人心的機會。感謝大家的出席,感謝大家組織了這次了不起的會議。

OK,現在是答疑之前的最後一部分。我(Patterson)總是嫉妒操作系統和編譯器的同事,他們可以在工業界做出貢獻,全世界都可以使用他們的代碼,因為人們使用開源的操作系統。在體系結構領域我們為什麼不這樣做呢?RISC-V就是我們做的嘗試。

V是因為它是Berkeley的第五個RISC項目。在Berkeley,Kraste Asanovic是項目主管,我們開發了指令集。雖然Intel是我們的贊助商之一,但是我們不被允許使用x86,因為x86是受控制的。Kraste決定和研究生一起重新開發一個全新的指令集。重新開發是一個激進的想法,但是它只花費了三個月。我們之後花費了四年製造了許多晶元。如果我們在Berkeley,那只是為了課程而修改我們的指令集,但是在與他人交談中我們發現,業界渴望一個開放的指令集。他們在看了很多指令集後發現了RISC-V,並且開始使用它。因此當我們聽到並理解了對開放指令集的需求,我們認為這是一個好主意,讓我們幫忙實現這個目標。

RISC-V有什麼不同嗎?第一,它非常簡單,比其它指令集要簡單的多。這本手冊大概200頁,Andrew和Kraste寫了其中的大部分,而x86大概是它的十倍。第二,這是一個全新的設計,使用它更容易。如果你現在也就是25年後回頭看MIPS以及SPARC架構過去的所有錯誤,很多錯誤是可以避免的,例如不要與微架構綁定在一起,這在現在回頭看時非常容易做到。第三,它是一個模塊化的指令集,有標準化的基礎,支持所有軟體,然後還有可選的擴展,是否包括這一部分取決於你的應用。第四,因為我們知道領域專用架構會很重要,所以留出了大量的操作碼空間。第五,它的社區設計也很重要,基礎部分已經完成只有需要時才會更改,如果你想要添加擴展,可以通過社區,我們的專家也會在那裡。通常情況下,如果你是公司,有可能會發布新指令集,那麼所有的軟體人員將會告訴你這有什麼問題。我們預先排練過這些對話,這種機制是維護指令集的基礎。第六,大學沒有關注沒有興趣,所以它由一個非營利基金運行,它是一項技術,類似操作系統、編譯器,因此它的改進工改取決於技術進步而不是市場因素。

RISC-V實際上由幾個不同的指令集組成,一個32位,一個64位,甚至還有一個用於嵌入式,可選的標準化擴展包括:整數的乘除、原子的內存操作、單精度或者雙精度浮點數、簡潔的指令、向量擴展,這些都由基金會支持。

因此,其創始成員開始增長,最近幾年已經超過了100個,nVIDIA在一個研討會上宣佈,他們將使用RISC-V替換他們的控制器,所以我知道未來市場可能增長到2到4千萬每年。Western digital在研討會上宣佈他們準備把它放入硬碟中,讓硬碟支持計算,這將讓市場規模達到10億級別每年。週四在Stanford的演講中,兩個來自Changhong和Anyka的人宣佈他們準備採用RISC-V,並從明年開始有3千萬的市場。所以,它真的開始流行起來了。

就標準部分和擴展部分而言,我認為這裡有很多人參與了這些工作,但是我們知道,它是開放的,你可以與所有的專家一起開展對話,就像一個標準委員會一樣,將一些指令納入指令集。

RISC-V是一個開放指令集的例子,nVIDIA有一個開放的領域專用體系結構,它所有的技術都是開放的,軟體棧是開放的,指令集架構是開放的,實現是開放的,它是一個可伸縮的設計,可以使用RISC-V作為核心也可以不用,這取決於你,這是另一個開放架構的例子。

與開放的架構類似的想法,大家不相信封閉的安全性,大家更相信開放,安全性將是計算機體系結構中的一個巨大的挑戰,我們需要每個人都做貢獻,在開放的環境中,每個人都可以做工作,包括能夠提供有價值工作的學術界人員,而不只是為Intel或者其它的架構做工作。並且我認為,FPGA的巨大進步和開源實現以及開放式軟體棧帶來了令人興奮的機會,我們可以開發新穎的架構並且放在網上,可以使測試者收到攻擊,或者為攻擊者提供獎勵進行測試。所以你會有一個活躍的對手而不僅僅只是被動防守。即使它只有100MHz,也足夠快,可以運行真正的軟體,可以有用戶。因為是FPGA,你可以在幾個星期就可以迭代,而不是像標準的硬體一樣花費幾年。所以,我和別人交流時認為,RISC-V將成為典範。如果我們與架構師以及安全人員共同設計並推進它,那麼人們就會使用RISC-V,使用它最新的想法。

因此,對開放架構進行總結。免費,任何人可以使用它,沒有任何合同之類的東西限制,就像Linux一樣。它非常簡單,但是當我與公司交談時,因為銷售新的指令比實現更好的架構更簡單,沒有市場的因素來擴展它。那為什麼還要做,因為它在底層和高層都將產生重大的影響。我們可以支持DSA,留有操作碼空間。我想只要有更多的人構建處理器,它將成為一個有競爭力的市場,這意味著更快的更新速度,安全專家也將會圍繞RISC-V開會。我們的目標是統治全球,我想不到其它的原因,因為現在到處都是RISC處理器,希望它能成為處理器中的Linux。

最後部分是敏捷硬體開發。在15年前,軟體工程取得了這一領取的突破,軟體過程模型超越了劃分詳細計劃和階段的瀑布模型,提高軟體質量。這是一次「反叛」,需要我們做到敏捷。我們將進行短期開發。首先製作系統原型交給客戶,看看他們接下來想要什麼,然後進行快速迭代,這是軟體工程的一次革命。我們使用Scrum模型管理硬體開發,你有一個小團隊進行開發,首先建立原型,然後暫停,看看你接下來的需求,然後努力再衝刺。好消息是現代CAD使我們能夠使用一些軟體開發過程技術,因此,小型團隊可以通過抽象和重用來完成一些工作。以下是Berkeley在三種不同設計方面的例子。

左邊一個是三級流水線、32位設計,中間一個是經典的5級流水線、64位設計,右邊是一個亂序執行處理器、64位設計。所有例子中,不到一半的代碼都是特有的,你可以分享它們。提升級別抽象減少了代碼行,但最重要的是獲得代碼重用。

當你在做硬體時,你如何開展為期一個月的迭代,這個小組遵循的是這個迭代模型。首先,你可以像開放軟體一樣進行創新。但是現在,你不能運行那麼多時鐘週期,你不能有數十億或數萬億的時鐘週期。如果你想看看它實際上是如何工作的,那麼你可以對FPGA進行更改。過去幾年發生的好消息是雲中存在FPGA的實例,你甚至不需要購買硬體來做FPGA,你可以去雲端使用它。別人把它全部設置好並維護它,你可以使用它,並且在這個會議上有這樣的例子。但是,如果我們真的關心能耗和成本,我們必須進行layout,這就是下一次迭代。一旦想法在模擬器和FPGA中工作,並再實際中進行佈局,就會給出一些估計。你需要做更多的工作才能真正做好tap-in。現在我們可以在這裡停下來,因為你已經可以在時鐘速率和所有這些東西上準確估計面積和功率。但是為什麼不停在那裡,這是因為我們是硬體人員。我們對軟體人員的優勢最大的區別在於他們被困在虛擬空間,那裡的程序不是物理的。而我們得到一些物理上的東西,當晶元被製作出來時,我們會感到興奮,它是否會起作用,它的工作速度有多快,功率和性能有多少。因此,構建晶元的原因是獎勵,所有參與者的獎勵,而研究生或公司獲得晶元。現在我們覺得這一定非常昂貴,其實它並不貴,我們的測試晶元都很便宜。你可以一個接一個地製作100個,你知道,28毫米的10毫米平方晶元,14,000美元,根據摩爾定律,我們擁有數百萬個晶體管,你可以在一個微小的測試晶元中獲得RISC-V內核和nVIDIA DLA,它只需14,000美元。每個人都能負擔得起。現在如果你想構建一個真正的大晶元,這將是最後一步,當然會更昂貴但是每個人都有能力製造晶元。

在krsteAsanovic領導的Berkeley的一個項目中,他們在五年內製造了10個晶元。所以使用這個敏捷模型,你沒有像我那樣等待幾年,然後看看它會發生什麼。他們不斷的開始下一次迭代,所以從這個課程中畢業的學生對這些晶元能夠正常工作非常有信心,因為他們構建了大量的晶元並且每個晶元都變得更好了,敏捷模型更勝一籌。

因此在我們回答問題之前,John和我認為我們正在進入一個新的黃金時代。Dennard縮放和摩爾定律的結束是否意味著我們可以在體系結構上進行創新。如果你想讓事情做得更好,它不會發生在微體系結構層面。如果僅使用軟體解決方案不會保證系統的安全性,安全性顯然也需要體系結構上的創新。領域特定語言提高了抽象級別,對程序員更加友好,也使架構師更容易進行創新,領域專用架構得到的因子是20或40,而不是5%或10%。開放式體系結構和開放式實現減少了工作量,您可以加入並像編譯器和操作系統領域的同事一樣,對這些設備進行增強,每個人都可以開展工作。雲FPGA讓每個人都更容易構建硬體,看起來像定製硬體,這種敏捷開發意味著我們所有人都可以負擔製造晶元的費用。所以,正如John所說的那樣,就跟在20世紀80年代我們是年輕架構師的時候一樣,現在是一個架構師的好時機,即使在學術界也是如此。


推薦閱讀:
相關文章