圖靈獎(jiǎng)得主長(zhǎng)文報(bào)告:是什么開(kāi)啟了計(jì)算機(jī)架構(gòu)的新黃金十年?(下)
雷鋒網(wǎng)按:近幾年來(lái),不論是普通消費(fèi)者還是科研人員們都可以感受到兩種浪潮,一種是 CPU 速度的提升越來(lái)越不顯著了,我們說(shuō) CPU 制造商又在「擠牙膏」;另一方面,在深度學(xué)習(xí)的刺激下,各個(gè)半導(dǎo)體巨頭和一群 AI 初創(chuàng)企業(yè)都開(kāi)始宣傳自己的 AI 芯片。我們仿佛看到一類芯片逐漸走向慢車(chē)道,另一類芯片則準(zhǔn)備搭臺(tái)唱戲、躍躍欲試。
這種柳暗花明的背后,顯示的正是計(jì)算機(jī)計(jì)算架構(gòu)的時(shí)代變革;新的方法、新的思維、新的目標(biāo)引領(lǐng)了新的浪潮。2017 年圖靈獎(jiǎng)的兩位得主 John L. Hennessy 和 David A. Patterson 就是這個(gè)新浪潮的見(jiàn)證者和引領(lǐng)者。近日他們?cè)?ACM 通訊(Communications of the ACM)發(fā)表了一篇長(zhǎng)報(bào)告,詳細(xì)描述了引發(fā)計(jì)算機(jī)架構(gòu)新時(shí)代到來(lái)的種種變化,他們也展望未來(lái)的十年將是計(jì)算機(jī)體系架構(gòu)領(lǐng)域的「新的黃金十年」。
雷鋒網(wǎng)把這篇文章全文編譯如下。本篇為下篇,上篇見(jiàn) 這里 。
另外二位還有過(guò)一次輕松的訪談,可以點(diǎn)擊 這里 。
ISCA 2018 ,2017 圖靈獎(jiǎng)?lì)C獎(jiǎng)現(xiàn)場(chǎng),John L. Hennessy(左) 和 David A. Patterson(右)與 Alan Turing 的半身像合影
計(jì)算機(jī)架構(gòu)的未來(lái)機(jī)遇
「我們面前有一些令人目瞪口呆的機(jī)會(huì),不過(guò)它們把自己偽裝成了看似無(wú)法解決的困難」。 -John Gardner
不論是對(duì)于 ILP 的技術(shù)或者多核心處理器,由于為通用計(jì)算設(shè)計(jì)的微處理器注定了效率較低,再加上Dennard Scaling定律和摩爾定律走向終結(jié),所以在我們看來(lái),處理器架構(gòu)師和設(shè)計(jì)師們很有可能再也無(wú)法讓通用處理器的性能以之前那樣的速度繼續(xù)大幅提高。但是我們?nèi)匀恍枰朕k法繼續(xù)提升硬件性能、為未來(lái)的新的軟件功能留下發(fā)展空間,我們就必須仔細(xì)思考這個(gè)問(wèn)題:有沒(méi)有其他的有潛力的方案?
比較明顯的方案有兩種,以及把這兩種方案合并在一起的話我們還可以得到第三種方案。
執(zhí)行性能優(yōu)化
第一種方案是,現(xiàn)代軟件的編寫(xiě)中大量使用了高級(jí)語(yǔ)言,其中有動(dòng)態(tài)類型和動(dòng)態(tài)存儲(chǔ)管理。然而不幸的是,這些語(yǔ)言的編譯和執(zhí)行是非常低效的。Leiserson 等人用矩陣乘法的小例子說(shuō)明了這種低效性。
Python 是一種當(dāng)前火熱的編程語(yǔ)言,也是一種典型的高級(jí)、動(dòng)態(tài)類型語(yǔ)言。如下面圖 7,僅僅是把本來(lái)用 Python 編寫(xiě)的程序用 C 語(yǔ)言重新寫(xiě)一遍,就可以把程序的性能提高 47 倍。在多核心處理器上并行運(yùn)行多個(gè)循環(huán)可以繼續(xù)得到大約 7 倍的性能提升。優(yōu)化程序的存儲(chǔ)布局,讓程序使用處理器中的緩存(而不是外部安裝的內(nèi)存)可以提升 20 倍性能,最后,如果加入拓展的計(jì)算硬件,用能夠在每個(gè)指令周期內(nèi)計(jì)算 16 次 32 位運(yùn)算的單指令多數(shù)據(jù)并行(SIMD)計(jì)算單元進(jìn)行運(yùn)算的話,我們還可以再把性能提高9倍。把以上這些改進(jìn)全部用起來(lái)的話,
一個(gè)運(yùn)行在英特爾多核處理器上的、經(jīng)過(guò)高度優(yōu)化過(guò)的程序可以比最初的 Python 版本快超過(guò) 6 萬(wàn)倍。
這當(dāng)然只是一個(gè)很小的例子,一般的程序員可能自己就會(huì)使用一個(gè)有優(yōu)化作用的庫(kù)來(lái)享受這種提升。雖然這個(gè)例子把性能的變化展現(xiàn)得很夸張,但是在許許多多的程序中,提升 100 倍或者 1000 倍的性能還是完全可以實(shí)現(xiàn)的。
圖 7
有一個(gè)有趣的研究方向是,考慮其中的一些性能差距是否可以用更好的編譯器技術(shù)來(lái)補(bǔ)上,當(dāng)然了也可以同時(shí)搭配一些計(jì)算架構(gòu)的改進(jìn)。雖然高效的語(yǔ)言翻譯、以及高效實(shí)現(xiàn) Python 這類的高級(jí)腳本語(yǔ)言確實(shí)有很大困難,但潛在的性能收益也是巨大的。即便我們只實(shí)現(xiàn)了這些潛力中的 25% 就已經(jīng)可以讓 Python 程序的運(yùn)行速度提高數(shù)十倍甚至一百倍。這個(gè)簡(jiǎn)單的例子就清晰地展示了關(guān)注軟件工程師的生產(chǎn)力的現(xiàn)代編程語(yǔ)言和關(guān)注程序性能表現(xiàn)的傳統(tǒng)方法之間的巨大鴻溝。
設(shè)計(jì)專用硬件
領(lǐng)域?qū)S玫挠?jì)算架構(gòu)。除了改進(jìn)軟件執(zhí)行效率的第一種方案之外,第二種方案更加以硬件為中心,那就是為某個(gè)特定的領(lǐng)域問(wèn)題設(shè)計(jì)專用的計(jì)算架構(gòu),從而為這些問(wèn)題帶來(lái)顯著的性能(和效率)提升。這種方案的名字,DSA,「domain-specific architectures」,描述的就是這種為特定的領(lǐng)域問(wèn)題而專門(mén)定制設(shè)計(jì)的處理器,它們可編程,同樣也是圖靈完備的,但只適用于特定的某一類問(wèn)題。從這個(gè)角度來(lái)講,它們和專用集成電路 ASIC 之間也有所不同,ASIC 只執(zhí)行單一的功能,對(duì)應(yīng)的程序代碼幾乎從不變化。DSA 則常被稱為加速器,相比于把程序的所有功能都在為通用計(jì)算的 CPU 上執(zhí)行,DSA 可以讓程序中的一部分計(jì)算運(yùn)行得更快。更重要的是,DSA 可以讓一些程序得到明顯更高的性能,因?yàn)樗鼈兙褪菫榱速N近這些程序的計(jì)算需求而設(shè)計(jì)的。圖像處理單元 GPU、深度學(xué)習(xí)中使用的神經(jīng)網(wǎng)絡(luò)芯片、軟件定義網(wǎng)絡(luò)處理器 SDN 都是典型的例子。DSA 可以達(dá)到高得多的性能表現(xiàn)和高得多的能量效率,是由于以下四個(gè)原因:
-
第一點(diǎn),也是最重要的一點(diǎn),DSA 可以為具體的領(lǐng)域問(wèn)題采用更為高效的并行計(jì)算設(shè)計(jì)。比如,單指令多數(shù)據(jù)并行(SIMD)就比多指令多數(shù)據(jù)并行(MIMD)的效率高得多,因?yàn)樗恍枰@取一條指令流就可以讓處理單元在鎖定步驟內(nèi)執(zhí)行運(yùn)算。SIMD 的靈活性固然不如 MIMD 高,但是它很符合許多 DSA 的需求。DSA 中還有可能使用 VLIW 方案來(lái)實(shí)現(xiàn) ILP,而不是使用更復(fù)雜的亂序執(zhí)行機(jī)制。正如前面提到的,VLIW 無(wú)力與通用計(jì)算代碼競(jìng)爭(zhēng),但是在有限制條件的領(lǐng)域中它就可以高效得多,因?yàn)樗目刂茩C(jī)制簡(jiǎn)單得多。尤其是,多數(shù)的高端通用計(jì)算處理器都是亂序執(zhí)行的超標(biāo)量處理器,對(duì)于指令初始化和指令完成都需要復(fù)雜的控制邏輯。相比之下,VLIW 在編譯的時(shí)候就已經(jīng)執(zhí)行好了必需的分析和流程規(guī)劃,在顯示并行的程序中就可以起到很好的效果。
-
第二,DSA 可以更高效地利用不同層次的存儲(chǔ)器。Horowitz 指出,讀寫(xiě)存儲(chǔ)器的成本已經(jīng)變得高于數(shù)學(xué)運(yùn)算的成本了。比如,從一個(gè) 32KB 容量的緩存里讀取一個(gè)塊需要消耗的能量差不多要比執(zhí)行一次 32 位整型加法高 200 倍。正因?yàn)檫@種差別的存在,想要達(dá)到高的能源效率,優(yōu)化存儲(chǔ)器的讀寫(xiě)就至關(guān)重要。通用計(jì)算處理器執(zhí)行代碼的方式是,一般來(lái)說(shuō)存儲(chǔ)器的讀寫(xiě)都具有時(shí)間和空間上的局部性,但是其他狀況是在程序編譯時(shí)很難預(yù)測(cè)的。所以 CPU 會(huì)配合使用多級(jí)緩存,以便增加存儲(chǔ)器帶寬,同時(shí)緩解相對(duì)較慢的片外存儲(chǔ)(內(nèi)存,DRAM)的高延遲問(wèn)題。CPU 消耗的電能里,常常有一半都是花在了這些多級(jí)緩存上面,不過(guò)它們的作用也就是避免了大多數(shù)對(duì)片外 DRAM 的訪問(wèn),要知道,讀寫(xiě) DRAM 消耗的能源要比讀寫(xiě)最后一級(jí)緩存還要高差不多 10 倍。
緩存的缺點(diǎn)會(huì)在這兩種情況下暴露出來(lái):
當(dāng)數(shù)據(jù)集非常大的時(shí)候,緩存的時(shí)間和空間局部性都很差;
當(dāng)緩存表現(xiàn)得非常好的時(shí)候,也就是說(shuō)局部性非常高的時(shí)候,這其實(shí)說(shuō)明大多數(shù)緩存都是空閑的。
在那些存儲(chǔ)器的讀寫(xiě)模式有良好定義、在編譯時(shí)就可以發(fā)現(xiàn)的應(yīng)用中(典型的 DSL 都符合),程序員和程序的編譯器都可以優(yōu)化存儲(chǔ)器的使用,效果要比動(dòng)態(tài)分配緩存更好。所以 DSA 通常會(huì)使用一個(gè)層次式的存儲(chǔ)器,它的操作也是由軟件明確定義的,這和向量處理器的運(yùn)行方式很類似。對(duì)于適合的應(yīng)用,用戶控制的存儲(chǔ)器消耗的能源要比緩存低多了。
-
第三,在適當(dāng)?shù)臅r(shí)候,DSA 可以用更低的精度做運(yùn)算。通用計(jì)算 CPU 一般支持 32 位和 64 位整型以及浮點(diǎn)數(shù)據(jù)運(yùn)算。不過(guò)對(duì)于機(jī)器學(xué)習(xí)和圖形領(lǐng)域的許多應(yīng)用來(lái)說(shuō),這樣的精度都高于實(shí)際需求了。比如在深度神經(jīng)網(wǎng)絡(luò)中,推理任務(wù)經(jīng)常使用 4 位、8 位或者 16 位的整型,以獲取更高的數(shù)據(jù)吞吐量、更高的計(jì)算吞吐量。類似地,在深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練中需要使用浮點(diǎn)類型,32 位就已經(jīng)夠用了,16 位很多時(shí)候都可以。
-
第四,如果程序是用領(lǐng)域?qū)S谜Z(yǔ)言(DSL)編寫(xiě)的,由于語(yǔ)言本身對(duì)并行化有更好的支持,DSA 也就可以從中受益。這改進(jìn)了存儲(chǔ)器讀取的結(jié)構(gòu)和表示,也可以更容易地把應(yīng)用程序映射到一個(gè)領(lǐng)域?qū)S玫奶幚砥魃先ァ?/p>
領(lǐng)域?qū)S谜Z(yǔ)言
DSA 需要把編程語(yǔ)言中的高級(jí)操作對(duì)應(yīng)到硬件架構(gòu)上去,但是想要從 Python、Java、C、Fortan 這樣的為通用型計(jì)算設(shè)計(jì)的語(yǔ)言中提取這樣的結(jié)構(gòu)和信息實(shí)在是太難了。領(lǐng)域?qū)S谜Z(yǔ)言(DSL)讓這個(gè)過(guò)程變得可以實(shí)現(xiàn),而且也讓我們有機(jī)會(huì)高效地為 DSA 編程。比如,DSL 中可以定義顯式的向量、稠密矩陣、稀疏矩陣操作,這樣 DSL 的編譯器就可以高效地把這些操作映射到處理器中。許多語(yǔ)言屬于 DSL,比如矩陣運(yùn)算語(yǔ)言 Matlab,深度神經(jīng)網(wǎng)絡(luò)編程用的數(shù)據(jù)流語(yǔ)言 TensorFlow,DSN 編程語(yǔ)言 P4,以及描述圖像處理中高級(jí)變換操作的 Halide。
使用 DSL 的時(shí)候也有一個(gè)挑戰(zhàn),就是如何讓硬件架構(gòu)設(shè)計(jì)保持足夠的獨(dú)立性,這樣在一種 DSL 中編寫(xiě)的軟件可以遷移到不同的硬件架構(gòu),同時(shí)在把軟件映射到下方的 DSA 的時(shí)候還能過(guò)保持足夠高的效率。比如,TensorFlow 中的 XLA 系統(tǒng)可以把編寫(xiě)的程序翻譯成使用不同處理器的版本,在英偉達(dá) GPU 和谷歌 TPU 上都可以運(yùn)行。在 DSA 之間平衡可遷移性的同時(shí)還要保持足夠高的效率,這對(duì)語(yǔ)言設(shè)計(jì)師、編譯器設(shè)計(jì)師、DSA 架構(gòu)師們來(lái)說(shuō)都是一個(gè)有意思的科研挑戰(zhàn)。
下面用 TPUv1 這款 DSA 芯片舉例做詳細(xì)的解釋。谷歌 TPUv1 的設(shè)計(jì)目標(biāo)是加速神經(jīng)網(wǎng)絡(luò)的推理過(guò)程。這款 TPU 從 2015 年就投入了生產(chǎn)環(huán)境開(kāi)始使用,它支持著谷歌的各種應(yīng)用計(jì)算需求,包括搜索查詢、語(yǔ)言翻譯、圖像識(shí)別,一直到 DeepMind 的圍棋/象棋 AI AlphaGo/AlphaZero。這個(gè)芯片的設(shè)計(jì)目標(biāo)就是把深度神經(jīng)網(wǎng)絡(luò)推理時(shí)的性能表現(xiàn)和能量效率提升 10 倍。
如下方圖 8 所示,TPU 的內(nèi)核結(jié)構(gòu)設(shè)計(jì)和通用計(jì)算處理器完全不同。其中的主計(jì)算單元是一個(gè)矩陣計(jì)算單元,這是一個(gè)脈動(dòng)列表結(jié)構(gòu),它可以在每個(gè)時(shí)鐘周期進(jìn)行一次 256x256 矩陣的乘法加法運(yùn)算。在這項(xiàng)功能上聯(lián)合使用的 8 位精度、高效率的脈動(dòng)架構(gòu)、SIMD 控制、專門(mén)劃分出的一大片芯片面積,最終讓這個(gè)乘法累加器的每時(shí)鐘周期性能比一般的單核心通用計(jì)算 CPU 提升了大約 100 倍。而且,TPU 中并沒(méi)有使用緩存,它使用的是大小為 24MB 的本地存儲(chǔ)器,這相當(dāng)于是 2015 年時(shí)期的相同功耗的 CPU 上帶有的緩存空間的 2 倍。最后,激活值存儲(chǔ)器和權(quán)重存儲(chǔ)器(以及保留權(quán)重的 FIFO 架構(gòu))都通過(guò)一個(gè)用戶控制的高帶寬存儲(chǔ)通道連接在一起。在基于谷歌數(shù)據(jù)中心的六種常見(jiàn)推理問(wèn)題的加權(quán)性能統(tǒng)計(jì)中,TPU 要比通用計(jì)算 CPU 快 29 倍。由于 TPU 消耗的電能還不到 CPU 的一半,在處理這些負(fù)載時(shí) TPU 的能量效率要比通用計(jì)算 CPU 高 80 倍還不止。
圖 8
總結(jié)
我們分析了通過(guò)提高硬件效率來(lái)提升程序運(yùn)行性能的兩種不同的方案。方案一,改進(jìn)通常是解釋執(zhí)行的現(xiàn)代高級(jí)編程語(yǔ)言的性能;方案二,設(shè)計(jì)領(lǐng)域?qū)S玫挠?jì)算架構(gòu),相比于通用計(jì)算 CPU 的表現(xiàn),這樣可以極大改進(jìn)運(yùn)行速度和能源效率。DSL 也是改進(jìn)硬件/軟件接口,從而讓計(jì)算架構(gòu)設(shè)計(jì)師們可以做出 DSA 這樣的創(chuàng)新的另一個(gè)重要例子。
想要通過(guò)這些方式取得程序性能的顯著提高,需要一支垂直集成的設(shè)計(jì)團(tuán)隊(duì),他們需要了解應(yīng)用、了解領(lǐng)域?qū)S谜Z(yǔ)言以及對(duì)應(yīng)的編譯器技術(shù)、了解計(jì)算機(jī)架構(gòu)和組件,并且了解其中蘊(yùn)含的實(shí)現(xiàn)技術(shù)。在整個(gè)計(jì)算機(jī)產(chǎn)業(yè)鏈變得水平整合之前,計(jì)算領(lǐng)域的許多早期工作都表現(xiàn)出了強(qiáng)烈的「垂直集成、可以跨越多個(gè)不同的抽象層次」的特點(diǎn)。而在現(xiàn)在這個(gè)新時(shí)代中,垂直整合能力變得更為重要,能夠做出重要的權(quán)衡并進(jìn)行檢驗(yàn)和優(yōu)化的團(tuán)隊(duì)將會(huì)占有先機(jī)。
這些改進(jìn)機(jī)會(huì)已經(jīng)引發(fā)了計(jì)算架構(gòu)創(chuàng)新的新浪潮,吸引了許多來(lái)自不同計(jì)算架構(gòu)設(shè)計(jì)邏輯的競(jìng)爭(zhēng)者:
-
GPU - 英偉達(dá) GPU 有許多核心,每個(gè)都有很大的寄存器,有許多硬件線程,也有緩存
-
TPU - 谷歌 TPU 主要依賴其中的大規(guī)模二維脈動(dòng)乘法累加器,以及依靠軟件控制片上存儲(chǔ)
-
FPGA - 微軟在數(shù)據(jù)中心中部署了現(xiàn)場(chǎng)可編程邏輯陣列(FPGA),這些數(shù)據(jù)中心是專為神經(jīng)網(wǎng)絡(luò)應(yīng)用優(yōu)化的
-
CPU - 英特爾提供的 CPU 帶有許多核心,然后用大容量的多級(jí)別緩存和一維 SIMD 指令增強(qiáng) CPU 的性能;英特爾也提供微軟使用的 FPGA,以及另一種更接近 TPU 的新型神經(jīng)網(wǎng)絡(luò)處理器。
除了這些大體量的競(jìng)爭(zhēng)者之外,也有好幾十家初創(chuàng)企業(yè)提出了自己的想法。為了滿足不斷增長(zhǎng)的計(jì)算需求,計(jì)算架構(gòu)設(shè)計(jì)師們把這樣的芯片成百上千地互相連接起來(lái),形成了為神經(jīng)網(wǎng)絡(luò)計(jì)算服務(wù)的超級(jí)計(jì)算機(jī)。
深度神經(jīng)網(wǎng)絡(luò)的瀑布式結(jié)構(gòu)也為計(jì)算機(jī)架構(gòu)設(shè)計(jì)帶來(lái)一段有趣的時(shí)光。很難預(yù)測(cè) 2019 年中這些不同的方向中是否會(huì)出現(xiàn)勝利者,但是市場(chǎng)最終一定會(huì)為這場(chǎng)競(jìng)爭(zhēng)分出勝負(fù),就像它過(guò)去也曾分出了一場(chǎng)計(jì)算機(jī)架構(gòu)之爭(zhēng)的勝負(fù)一樣。
開(kāi)放的架構(gòu)
受到開(kāi)源軟件的成功的啟發(fā),計(jì)算機(jī)架構(gòu)的第二個(gè)發(fā)展機(jī)遇在于開(kāi)放 ISA。為了創(chuàng)建一個(gè)「處理器的 Linux」,這個(gè)領(lǐng)域需要工業(yè)標(biāo)準(zhǔn)級(jí)別的開(kāi)放 ISA,這樣整個(gè)生態(tài)中才可以創(chuàng)建開(kāi)源的核心,在不同公司持有各自的專有核心架構(gòu)的環(huán)境中形成補(bǔ)充。如果許多組織結(jié)構(gòu)都使用同樣的 ISA 設(shè)計(jì)處理器,更激烈的競(jìng)爭(zhēng)可能會(huì)帶來(lái)的更快的創(chuàng)新和發(fā)展。這里的發(fā)展目標(biāo)是為不同的使用用途提供不同規(guī)模的處理器設(shè)計(jì),可以有 100 美元一個(gè)的處理器,也可以有幾美分一個(gè)的處理器。
這里的第一個(gè)例子就是 RISC-V,UC 伯克利大學(xué)開(kāi)發(fā)的第五代 RISC 架構(gòu)。在 RISC-V 基金會(huì)的管理之下,RISC-V 有一整個(gè)生態(tài)維護(hù)著這個(gè)架構(gòu)。選擇了開(kāi)放,也就讓這個(gè) ISA 也可以在公眾中露面,軟件和硬件專家們也可以在做出最終決定之前就展開(kāi)合作。開(kāi)放體系還會(huì)帶來(lái)一個(gè)好處,就是 ISA 很少會(huì)出于純市場(chǎng)營(yíng)銷(xiāo)的原因而擴(kuò)大,相比之下專有指令集就經(jīng)常會(huì)為了市場(chǎng)營(yíng)銷(xiāo)而增擴(kuò)充指令集。
首先,RISC-V 是一個(gè)模塊化的指令集。一小組基礎(chǔ)指令首先支持整個(gè)開(kāi)源軟件框架的運(yùn)行,然后有一些標(biāo)準(zhǔn)的拓展指令,設(shè)計(jì)師們可以根據(jù)自己的需求添加或者刪除。基礎(chǔ)指令含有 32 位和 64 位地址的版本。RISC-V 指令集的增長(zhǎng)完全可以只依靠可選的拓展指令的增加,支持軟件框架運(yùn)行的基礎(chǔ)指令不增加任何新的拓展也不會(huì)有任何問(wèn)題。專有指令集的處理器架構(gòu)一般都會(huì)需要向前的二進(jìn)制兼容性,這意味著如果一家處理器制造商決定在某一代處理器中增加一個(gè)新的功能,那么這家制造商未來(lái)的所有處理器都需要保留對(duì)這個(gè)功能的支持。但 RISC-V 就不需要這樣,所有的功能增強(qiáng)都是可選的,而且如果沒(méi)有應(yīng)用需要的話就可以隨時(shí)刪除。目前 RISC-V 中有如下幾個(gè)標(biāo)準(zhǔn)的拓展指令集,用首字母作為它們的簡(jiǎn)稱
-
M. 整型乘法/除法
-
A. 原子內(nèi)存操作
-
F/D. 單精度/雙精度浮點(diǎn)運(yùn)算
-
C. 壓縮指令
其次,RISC-V 有一個(gè)特色是 ISA 的簡(jiǎn)潔性。下面提供了一組 RISC-V 與 ARM 公司在近似時(shí)間開(kāi)發(fā)的 ARMv8 架構(gòu)的對(duì)比,雖然對(duì)比的內(nèi)容不是完全可以量化的。
-
指令更少。RISC-V 的指令更少,基礎(chǔ)指令只有 50 條,這個(gè)數(shù)量和這些指令的性質(zhì)和最初的 RISC-I 驚人地相似。其它的幾個(gè)標(biāo)準(zhǔn)拓展指令集,M、A、F 和 D,一共增加 53 條指令,再加上 C 的另外 34 條,一共也只有 137 條。ARMv8 則有超過(guò) 500 條。
-
指令格式更少。RISC-V 的指令格式更少,只有 6 種,而 ARMv8 至少有 14 種。
第三,RISC-V 的簡(jiǎn)潔性不僅降低了設(shè)計(jì)處理器的復(fù)雜度,也減小了驗(yàn)證硬件正確性的難度。由于 RISC-V 的目標(biāo)就是要應(yīng)用在包括數(shù)據(jù)庫(kù)的高性能計(jì)算芯片到 IoT 設(shè)備上的低功耗芯片上,設(shè)計(jì)驗(yàn)證也可以在開(kāi)發(fā)成本中占據(jù)不小的比例。
第四,RISC-V 是一個(gè)完全從頭開(kāi)始的設(shè)計(jì),它是在初始設(shè)計(jì)的 25 年后開(kāi)始的。它的設(shè)計(jì)師們從前幾代的設(shè)計(jì)中吸取了許多錯(cuò)誤經(jīng)驗(yàn)。與第一代的 RISC 架構(gòu)不同,RISC-V 避開(kāi)了依賴微架構(gòu)和依賴技術(shù)的特征(比如延遲分支和延遲載入)以及很新的創(chuàng)新(比如寄存器窗口),實(shí)際上這些功能都隨著編譯器技術(shù)的發(fā)展而被替代了。
最后,RISC-V 還可以為定制化設(shè)計(jì)的加速器提供很大的操作指令設(shè)計(jì)空間,這為 DSA 提供了良好的支持。
除了 RISC-V 之外,英偉達(dá)也在 2017 年發(fā)布了一個(gè)免費(fèi)開(kāi)放的架構(gòu),名為英偉達(dá)深度學(xué)習(xí)加速器(NVDLA),這是一個(gè)用于深度學(xué)習(xí)推理的標(biāo)量、可配置的 DSA。它的可選配置包括數(shù)據(jù)類型(8 位整型、16 位整型、16 位浮點(diǎn))以及其中的二維乘法矩陣的大小。根據(jù)不同的配置,芯片面積可以有 0.5mm2 到 3mm2 的不同大小,功耗也有 20mW 到 200mW 不同。這個(gè)架構(gòu)的 ISA、軟件架構(gòu)、實(shí)現(xiàn)方案也都是全部開(kāi)放的。
開(kāi)放的簡(jiǎn)單架構(gòu)實(shí)際上會(huì)帶來(lái)安全方面的好處。首先,安全專家們并不相信模糊不清就可以帶來(lái)安全,所以開(kāi)放的技術(shù)實(shí)現(xiàn)方案對(duì)他們更有吸引力;開(kāi)放的技術(shù)實(shí)現(xiàn)也就需要開(kāi)放的架構(gòu)。同等重要的是,有越來(lái)越多的人和組織機(jī)構(gòu)參與,也就可以圍繞安全的架構(gòu)設(shè)計(jì)做出更多改進(jìn)。專用的架構(gòu)把參與者局限為企業(yè)的員工,而開(kāi)放的架構(gòu)允許全世界學(xué)術(shù)和工業(yè)界的人參與提高安全性。更重要的是,這樣開(kāi)放的架構(gòu)、技術(shù)實(shí)現(xiàn)、軟件架構(gòu),再加上 FPGA 的高可塑性,都意味著架構(gòu)設(shè)計(jì)師們可以在線部署并評(píng)價(jià)新的解決方案,而且這個(gè)周期不再是以年計(jì),而是以周計(jì)。雖然 FPGA 比定制化芯片慢大約 10 倍,但這樣的性能表現(xiàn)也已經(jīng)足以支持用戶的在線使用,也就可以針對(duì)真正的攻擊者更及時(shí)地做出安全改進(jìn)。我們期待開(kāi)放的計(jì)算架構(gòu)未來(lái)成為架構(gòu)設(shè)計(jì)師和安全專家們進(jìn)行軟硬件聯(lián)合設(shè)計(jì)的典型范例。
敏捷硬件開(kāi)發(fā)
Beck 等人撰寫(xiě)的《軟件敏捷開(kāi)發(fā)手冊(cè)》為軟件開(kāi)發(fā)領(lǐng)域帶來(lái)了一場(chǎng)革命,它克服了傳統(tǒng)瀑布式開(kāi)發(fā)中精心設(shè)計(jì)的開(kāi)發(fā)計(jì)劃和文檔經(jīng)常失效的問(wèn)題。小的編程團(tuán)隊(duì)得以快速開(kāi)發(fā)出包含了核心功能但并不完善的軟件原型,然后在下一次迭代開(kāi)始前就獲得用戶反饋。競(jìng)爭(zhēng)性的敏捷開(kāi)發(fā)可以讓 5 到 10 人的開(kāi)發(fā)團(tuán)隊(duì)以 2 到 4 周一次迭代的速度快速前進(jìn)。
再一次,受到軟件開(kāi)發(fā)領(lǐng)域成功經(jīng)驗(yàn)的啟發(fā),硬件領(lǐng)域的第三個(gè)機(jī)遇就是敏捷硬件開(kāi)發(fā)。對(duì)架構(gòu)設(shè)計(jì)師們來(lái)說(shuō)也有一個(gè)好消息,現(xiàn)代電子計(jì)算機(jī)輔助設(shè)計(jì)(ECAD)工具提高了抽象級(jí)別,可以讓敏捷開(kāi)發(fā)以及對(duì)應(yīng)的更高級(jí)別的抽象在不同的設(shè)計(jì)之間重復(fù)使用。
如果說(shuō)要把軟件開(kāi)發(fā)中的每四周一次迭代的快速前進(jìn)方式照搬到硬件開(kāi)發(fā),一聽(tīng)之下會(huì)覺(jué)得難以置信,畢竟從硬件設(shè)計(jì)定版到得到芯片成品就有好幾個(gè)月的時(shí)間。而下面的圖 9 就展示了敏捷開(kāi)發(fā)過(guò)程中可以在適當(dāng)?shù)某橄蠹?jí)別上更改原型。最中央的抽象級(jí)別是軟件模擬器,也是在迭代中做改動(dòng)最簡(jiǎn)單、最快的部分。下一層是可以比細(xì)致的軟件模擬器運(yùn)行快數(shù)百倍的 FPGA。在 FPGA 上可以運(yùn)行操作系統(tǒng),也可以進(jìn)行全功能的性能評(píng)測(cè),比如 SPEC 中的測(cè)試項(xiàng)目;這讓原型的評(píng)價(jià)更加準(zhǔn)確。亞馬遜云服務(wù)就提供了 FPGA,架構(gòu)設(shè)計(jì)師們無(wú)需購(gòu)買(mǎi) FPGA 硬件并建立實(shí)驗(yàn)室就可以使用 FPGA 做自己的驗(yàn)證。為了獲得芯片面積和功耗的具體數(shù)值,下一層的 ECAD 工具可以生成芯片的布局圖。在工具運(yùn)行完畢之后還需要人工進(jìn)行一些步驟,對(duì)結(jié)果進(jìn)行微調(diào),確保新的處理器已經(jīng)準(zhǔn)備好投入生產(chǎn)了。處理器設(shè)計(jì)師們把這下一層稱作「tape in」。前面的這四個(gè)級(jí)別都可以使用每四周一次的迭代速度。
圖 9
如果是出于科研目的,我們?cè)?tape in 這一步就可以停下來(lái)了,因?yàn)檫@時(shí)就已經(jīng)可以獲得非常準(zhǔn)確的面積、能耗、性能的估計(jì)數(shù)據(jù)了。不過(guò)如果真的停下來(lái)的話,那就像參加長(zhǎng)跑比賽,最后在重點(diǎn)線前 50 米停了下來(lái),「因?yàn)榭梢詼?zhǔn)確地預(yù)測(cè)出最終要花多少時(shí)間了」。既然已經(jīng)在比賽的準(zhǔn)備以及前面的大部分賽程中投入了許多精力,但只要不沖過(guò)終點(diǎn)線,那就沒(méi)辦法享受到真正的興奮和滿足。所以其實(shí),硬件工程師在有個(gè)方面比軟件工程師強(qiáng),就是因?yàn)樗麄冏罱K會(huì)生產(chǎn)出切實(shí)可感的物品。把芯片成品拿回來(lái)測(cè)量、運(yùn)行真正的程序、把芯片展示給他們的朋友和家人們看,這都是硬件設(shè)計(jì)工作中非常幸福的時(shí)刻。
許多研究人員會(huì)認(rèn)為他們需要在芯片試產(chǎn)之前停下來(lái),因?yàn)樾酒闹圃鞂?shí)在是太貴了。實(shí)際上,當(dāng)芯片很小的時(shí)候,它的制造價(jià)格就非常便宜。架構(gòu)設(shè)計(jì)師們委托半導(dǎo)體廠商制造 100 個(gè) 1mm2 面積的芯片只需要花 1.4 萬(wàn)美元。如果是以 28nm 工藝制作,1mm2 的面積上就可以放下數(shù)百萬(wàn)個(gè)晶體管,足以容納一個(gè) RISC-V 處理器再加一個(gè)英偉達(dá)加速器。如果要制造一個(gè)很大的芯片,那么最外面這一步可能就會(huì)花很多錢(qián),但是如果是為了展現(xiàn)新的想法的話,小的芯片就可以做到。
結(jié)論
「黎明之前正是最灰暗的時(shí)刻」-Thomas Fuller
要從歷史經(jīng)驗(yàn)中學(xué)習(xí),有幾件事架構(gòu)師們必須知道:軟件開(kāi)發(fā)領(lǐng)域的創(chuàng)新點(diǎn)子同樣可以啟發(fā)硬件架構(gòu)設(shè)計(jì)師們,提升硬件/軟件接口設(shè)計(jì)的抽象級(jí)別可以為創(chuàng)新帶來(lái)機(jī)會(huì),以及市場(chǎng)最終會(huì)為計(jì)算機(jī)架構(gòu)之爭(zhēng)畫(huà)上句號(hào)。iAPX-432 和 Itanium 的故事說(shuō)明了硬件架構(gòu)方面的投資可能無(wú)法帶來(lái)對(duì)等的回報(bào),而 S/360、8086、ARM 架構(gòu)則能夠年復(fù)一年地帶來(lái)充沛的盈利。
Dennard Scaling 定律和摩爾定律走向終結(jié),以及標(biāo)準(zhǔn)微處理器的性能提升越來(lái)越慢并不是什么必須解決不可的問(wèn)題,而實(shí)際上,它們完全可以看作是令人激動(dòng)的新機(jī)遇。高級(jí)別、領(lǐng)域?qū)S玫恼Z(yǔ)言和架構(gòu)把架構(gòu)設(shè)計(jì)師們從專用指令集不斷擴(kuò)充的鏈條中解放出來(lái),同樣也釋放了公眾對(duì)于更高的安全性的需求,這都會(huì)帶來(lái)計(jì)算機(jī)架構(gòu)的新的黃金時(shí)代。另外依靠開(kāi)源生態(tài)的幫助,敏捷開(kāi)發(fā)的芯片也會(huì)越來(lái)越令人信服地展現(xiàn)出它的優(yōu)勢(shì),并逐步越來(lái)越快地取得商業(yè)上的成功。對(duì)于通用處理器的設(shè)計(jì)理念,ISA 未來(lái)也將隨著時(shí)間的流逝而越發(fā)顯得熠熠生輝,就像 RISC 一樣。在新的黃金時(shí)代中我們可以期待繼續(xù)看到上個(gè)黃金時(shí)代那樣的高速發(fā)展,只不過(guò)這次首當(dāng)其沖的是價(jià)格、能耗以及安全,性能當(dāng)然也會(huì)有繼續(xù)的提高。
在未來(lái) 10 年中,我們可以期待在計(jì)算機(jī)架構(gòu)領(lǐng)域也看到寒武紀(jì)生物大爆炸那樣地充滿新鮮創(chuàng)意,這對(duì)于學(xué)術(shù)界和工業(yè)界的計(jì)算機(jī)架構(gòu)設(shè)計(jì)師們來(lái)說(shuō)會(huì)是一段充滿激情的時(shí)光。
via? acm.org ,雷鋒網(wǎng) (公眾號(hào):雷鋒網(wǎng)) AI 科技評(píng)論編譯
。