當前位置:
首頁 > 新聞 > 圖靈獎得主長文報告:是什麼開啟了計算機架構的新黃金十年?(下)

圖靈獎得主長文報告:是什麼開啟了計算機架構的新黃金十年?(下)

雷鋒網按:近幾年來,不論是普通消費者還是科研人員們都可以感受到兩種浪潮,一種是 CPU 速度的提升越來越不顯著了,我們說 CPU 製造商又在「擠牙膏」;另一方面,在深度學習的刺激下,各個半導體巨頭和一群 AI 初創企業都開始宣傳自己的 AI 晶元。我們彷彿看到一類晶元逐漸走向慢車道,另一類晶元則準備搭台唱戲、躍躍欲試。

這種柳暗花明的背後,顯示的正是計算機計算架構的時代變革;新的方法、新的思維、新的目標引領了新的浪潮。2017 年圖靈獎的兩位得主 John L. Hennessy 和 David A. Patterson 就是這個新浪潮的見證者和引領者。近日他們在 ACM 通訊(Communications of the ACM)發表了一篇長報告,詳細描述了引發計算機架構新時代到來的種種變化,他們也展望未來的十年將是計算機體系架構領域的「新的黃金十年」。

雷鋒網把這篇文章全文編譯如下。本篇為下篇,上篇見這裡。

另外二位還有過一次輕鬆的訪談,可以點擊這裡。

圖靈獎得主長文報告:是什麼開啟了計算機架構的新黃金十年?(下)

打開今日頭條,查看更多圖片ISCA 2018 ,2017 圖靈獎頒獎現場,John L. Hennessy(左) 和 David A. Patterson(右)與 Alan Turing 的半身像合影計算機架構的未來機遇

「我們面前有一些令人目瞪口呆的機會,不過它們把自己偽裝成了看似無法解決的困難」。 -John Gardner

不論是對於 ILP 的技術或者多核心處理器,由於為通用計算設計的微處理器註定了效率較低,再加上Dennard Scaling定律和摩爾定律走向終結,所以在我們看來,處理器架構師和設計師們很有可能再也無法讓通用處理器的性能以之前那樣的速度繼續大幅提高。但是我們仍然需要想辦法繼續提升硬體性能、為未來的新的軟體功能留下發展空間,我們就必須仔細思考這個問題:有沒有其他的有潛力的方案?

比較明顯的方案有兩種,以及把這兩種方案合併在一起的話我們還可以得到第三種方案。

執行性能優化

第一種方案是,現代軟體的編寫中大量使用了高級語言,其中有動態類型和動態存儲管理。然而不幸的是,這些語言的編譯和執行是非常低效的。Leiserson 等人用矩陣乘法的小例子說明了這種低效性。

Python 是一種當前火熱的編程語言,也是一種典型的高級、動態類型語言。如下面圖 7,僅僅是把本來用 Python 編寫的程序用 C 語言重新寫一遍,就可以把程序的性能提高 47 倍。在多核心處理器上並行運行多個循環可以繼續得到大約 7 倍的性能提升。優化程序的存儲布局,讓程序使用處理器中的緩存(而不是外部安裝的內存)可以提升 20 倍性能,最後,如果加入拓展的計算硬體,用能夠在每個指令周期內計算 16 次 32 位運算的單指令多數據並行(SIMD)計算單元進行運算的話,我們還可以再把性能提高9倍。把以上這些改進全部用起來的話,

一個運行在英特爾多核處理器上的、經過高度優化過的程序可以比最初的 Python 版本快超過 6 萬倍。

這當然只是一個很小的例子,一般的程序員可能自己就會使用一個有優化作用的庫來享受這種提升。雖然這個例子把性能的變化展現得很誇張,但是在許許多多的程序中,提升 100 倍或者 1000 倍的性能還是完全可以實現的。

圖靈獎得主長文報告:是什麼開啟了計算機架構的新黃金十年?(下)

圖 7

有一個有趣的研究方向是,考慮其中的一些性能差距是否可以用更好的編譯器技術來補上,當然了也可以同時搭配一些計算架構的改進。雖然高效的語言翻譯、以及高效實現 Python 這類的高級腳本語言確實有很大困難,但潛在的性能收益也是巨大的。即便我們只實現了這些潛力中的 25% 就已經可以讓 Python 程序的運行速度提高數十倍甚至一百倍。這個簡單的例子就清晰地展示了關注軟體工程師的生產力的現代編程語言和關注程序性能表現的傳統方法之間的巨大鴻溝。

設計專用硬體

領域專用的計算架構。除了改進軟體執行效率的第一種方案之外,第二種方案更加以硬體為中心,那就是為某個特定的領域問題設計專用的計算架構,從而為這些問題帶來顯著的性能(和效率)提升。這種方案的名字,DSA,「domain-specific architectures」,描述的就是這種為特定的領域問題而專門定製設計的處理器,它們可編程,同樣也是圖靈完備的,但只適用於特定的某一類問題。從這個角度來講,它們和專用集成電路 ASIC 之間也有所不同,ASIC 只執行單一的功能,對應的程序代碼幾乎從不變化。DSA 則常被稱為加速器,相比於把程序的所有功能都在為通用計算的 CPU 上執行,DSA 可以讓程序中的一部分計算運行得更快。更重要的是,DSA 可以讓一些程序得到明顯更高的性能,因為它們就是為了貼近這些程序的計算需求而設計的。圖像處理單元 GPU、深度學習中使用的神經網路晶元、軟體定義網路處理器 SDN 都是典型的例子。DSA 可以達到高得多的性能表現和高得多的能量效率,是由於以下四個原因:

  • 第一點,也是最重要的一點,DSA 可以為具體的領域問題採用更為高效的並行計算設計。比如,單指令多數據並行(SIMD)就比多指令多數據並行(MIMD)的效率高得多,因為它只需要獲取一條指令流就可以讓處理單元在鎖定步驟內執行運算。SIMD 的靈活性固然不如 MIMD 高,但是它很符合許多 DSA 的需求。DSA 中還有可能使用 VLIW 方案來實現 ILP,而不是使用更複雜的亂序執行機制。正如前面提到的,VLIW 無力與通用計算代碼競爭,但是在有限制條件的領域中它就可以高效得多,因為它的控制機制簡單得多。尤其是,多數的高端通用計算處理器都是亂序執行的超標量處理器,對於指令初始化和指令完成都需要複雜的控制邏輯。相比之下,VLIW 在編譯的時候就已經執行好了必需的分析和流程規劃,在顯示並行的程序中就可以起到很好的效果。

  • 第二,DSA 可以更高效地利用不同層次的存儲器。Horowitz 指出,讀寫存儲器的成本已經變得高於數學運算的成本了。比如,從一個 32KB 容量的緩存里讀取一個塊需要消耗的能量差不多要比執行一次 32 位整型加法高 200 倍。正因為這種差別的存在,想要達到高的能源效率,優化存儲器的讀寫就至關重要。通用計算處理器執行代碼的方式是,一般來說存儲器的讀寫都具有時間和空間上的局部性,但是其他狀況是在程序編譯時很難預測的。所以 CPU 會配合使用多級緩存,以便增加存儲器帶寬,同時緩解相對較慢的片外存儲(內存,DRAM)的高延遲問題。CPU 消耗的電能里,常常有一半都是花在了這些多級緩存上面,不過它們的作用也就是避免了大多數對片外 DRAM 的訪問,要知道,讀寫 DRAM 消耗的能源要比讀寫最後一級緩存還要高差不多 10 倍。

    緩存的缺點會在這兩種情況下暴露出來:

    當數據集非常大的時候,緩存的時間和空間局部性都很差;

    當緩存表現得非常好的時候,也就是說局部性非常高的時候,這其實說明大多數緩存都是空閑的。

    在那些存儲器的讀寫模式有良好定義、在編譯時就可以發現的應用中(典型的 DSL 都符合),程序員和程序的編譯器都可以優化存儲器的使用,效果要比動態分配緩存更好。所以 DSA 通常會使用一個層次式的存儲器,它的操作也是由軟體明確定義的,這和向量處理器的運行方式很類似。對於適合的應用,用戶控制的存儲器消耗的能源要比緩存低多了。

  • 第三,在適當的時候,DSA 可以用更低的精度做運算。通用計算 CPU 一般支持 32 位和 64 位整型以及浮點數據運算。不過對於機器學習和圖形領域的許多應用來說,這樣的精度都高於實際需求了。比如在深度神經網路中,推理任務經常使用 4 位、8 位或者 16 位的整型,以獲取更高的數據吞吐量、更高的計算吞吐量。類似地,在深度神經網路的訓練中需要使用浮點類型,32 位就已經夠用了,16 位很多時候都可以。

  • 第四,如果程序是用領域專用語言(DSL)編寫的,由於語言本身對並行化有更好的支持,DSA 也就可以從中受益。這改進了存儲器讀取的結構和表示,也可以更容易地把應用程序映射到一個領域專用的處理器上去。

領域專用語言

DSA 需要把編程語言中的高級操作對應到硬體架構上去,但是想要從 Python、Java、C、Fortan 這樣的為通用型計算設計的語言中提取這樣的結構和信息實在是太難了。領域專用語言(DSL)讓這個過程變得可以實現,而且也讓我們有機會高效地為 DSA 編程。比如,DSL 中可以定義顯式的向量、稠密矩陣、稀疏矩陣操作,這樣 DSL 的編譯器就可以高效地把這些操作映射到處理器中。許多語言屬於 DSL,比如矩陣運算語言 Matlab,深度神經網路編程用的數據流語言 TensorFlow,DSN 編程語言 P4,以及描述圖像處理中高級變換操作的 Halide。

使用 DSL 的時候也有一個挑戰,就是如何讓硬體架構設計保持足夠的獨立性,這樣在一種 DSL 中編寫的軟體可以遷移到不同的硬體架構,同時在把軟體映射到下方的 DSA 的時候還能過保持足夠高的效率。比如,TensorFlow 中的 XLA 系統可以把編寫的程序翻譯成使用不同處理器的版本,在英偉達 GPU 和谷歌 TPU 上都可以運行。在 DSA 之間平衡可遷移性的同時還要保持足夠高的效率,這對語言設計師、編譯器設計師、DSA 架構師們來說都是一個有意思的科研挑戰。

下面用 TPUv1 這款 DSA 晶元舉例做詳細的解釋。谷歌 TPUv1 的設計目標是加速神經網路的推理過程。這款 TPU 從 2015 年就投入了生產環境開始使用,它支持著谷歌的各種應用計算需求,包括搜索查詢、語言翻譯、圖像識別,一直到 DeepMind 的圍棋/象棋 AI AlphaGo/AlphaZero。這個晶元的設計目標就是把深度神經網路推理時的性能表現和能量效率提升 10 倍。

如下方圖 8 所示,TPU 的內核結構設計和通用計算處理器完全不同。其中的主計算單元是一個矩陣計算單元,這是一個脈動列表結構,它可以在每個時鐘周期進行一次 256x256 矩陣的乘法加法運算。在這項功能上聯合使用的 8 位精度、高效率的脈動架構、SIMD 控制、專門劃分出的一大片晶元面積,最終讓這個乘法累加器的每時鐘周期性能比一般的單核心通用計算 CPU 提升了大約 100 倍。而且,TPU 中並沒有使用緩存,它使用的是大小為 24MB 的本地存儲器,這相當於是 2015 年時期的相同功耗的 CPU 上帶有的緩存空間的 2 倍。最後,激活值存儲器和權重存儲器(以及保留權重的 FIFO 架構)都通過一個用戶控制的高帶寬存儲通道連接在一起。在基於谷歌數據中心的六種常見推理問題的加權性能統計中,TPU 要比通用計算 CPU 快 29 倍。由於 TPU 消耗的電能還不到 CPU 的一半,在處理這些負載時 TPU 的能量效率要比通用計算 CPU 高 80 倍還不止。

圖靈獎得主長文報告:是什麼開啟了計算機架構的新黃金十年?(下)

圖 8

總結

我們分析了通過提高硬體效率來提升程序運行性能的兩種不同的方案。方案一,改進通常是解釋執行的現代高級編程語言的性能;方案二,設計領域專用的計算架構,相比於通用計算 CPU 的表現,這樣可以極大改進運行速度和能源效率。DSL 也是改進硬體/軟體介面,從而讓計算架構設計師們可以做出 DSA 這樣的創新的另一個重要例子。

想要通過這些方式取得程序性能的顯著提高,需要一支垂直集成的設計團隊,他們需要了解應用、了解領域專用語言以及對應的編譯器技術、了解計算機架構和組件,並且了解其中蘊含的實現技術。在整個計算機產業鏈變得水平整合之前,計算領域的許多早期工作都表現出了強烈的「垂直集成、可以跨越多個不同的抽象層次」的特點。而在現在這個新時代中,垂直整合能力變得更為重要,能夠做出重要的權衡並進行檢驗和優化的團隊將會佔有先機。

這些改進機會已經引發了計算架構創新的新浪潮,吸引了許多來自不同計算架構設計邏輯的競爭者:

  • GPU - 英偉達 GPU 有許多核心,每個都有很大的寄存器,有許多硬體線程,也有緩存

  • TPU - 谷歌 TPU 主要依賴其中的大規模二維脈動乘法累加器,以及依靠軟體控制片上存儲

  • FPGA - 微軟在數據中心中部署了現場可編程邏輯陣列(FPGA),這些數據中心是專為神經網路應用優化的

  • CPU - 英特爾提供的 CPU 帶有許多核心,然後用大容量的多級別緩存和一維 SIMD 指令增強 CPU 的性能;英特爾也提供微軟使用的 FPGA,以及另一種更接近 TPU 的新型神經網路處理器。

除了這些大體量的競爭者之外,也有好幾十家初創企業提出了自己的想法。為了滿足不斷增長的計算需求,計算架構設計師們把這樣的晶元成百上千地互相連接起來,形成了為神經網路計算服務的超級計算機。

深度神經網路的瀑布式結構也為計算機架構設計帶來一段有趣的時光。很難預測 2019 年中這些不同的方向中是否會出現勝利者,但是市場最終一定會為這場競爭分出勝負,就像它過去也曾分出了一場計算機架構之爭的勝負一樣。

開放的架構

受到開源軟體的成功的啟發,計算機架構的第二個發展機遇在於開放 ISA。為了創建一個「處理器的 Linux」,這個領域需要工業標準級別的開放 ISA,這樣整個生態中才可以創建開源的核心,在不同公司持有各自的專有核心架構的環境中形成補充。如果許多組織結構都使用同樣的 ISA 設計處理器,更激烈的競爭可能會帶來的更快的創新和發展。這裡的發展目標是為不同的使用用途提供不同規模的處理器設計,可以有 100 美元一個的處理器,也可以有幾美分一個的處理器。

這裡的第一個例子就是 RISC-V,UC 伯克利大學開發的第五代 RISC 架構。在 RISC-V 基金會的管理之下,RISC-V 有一整個生態維護著這個架構。選擇了開放,也就讓這個 ISA 也可以在公眾中露面,軟體和硬體專家們也可以在做出最終決定之前就展開合作。開放體系還會帶來一個好處,就是 ISA 很少會出於純市場營銷的原因而擴大,相比之下專有指令集就經常會為了市場營銷而增擴充指令集。

首先,RISC-V 是一個模塊化的指令集。一小組基礎指令首先支持整個開源軟體框架的運行,然後有一些標準的拓展指令,設計師們可以根據自己的需求添加或者刪除。基礎指令含有 32 位和 64 位地址的版本。RISC-V 指令集的增長完全可以只依靠可選的拓展指令的增加,支持軟體框架運行的基礎指令不增加任何新的拓展也不會有任何問題。專有指令集的處理器架構一般都會需要向前的二進位兼容性,這意味著如果一家處理器製造商決定在某一代處理器中增加一個新的功能,那麼這家製造商未來的所有處理器都需要保留對這個功能的支持。但 RISC-V 就不需要這樣,所有的功能增強都是可選的,而且如果沒有應用需要的話就可以隨時刪除。目前 RISC-V 中有如下幾個標準的拓展指令集,用首字母作為它們的簡稱

  • M. 整型乘法/除法

  • A. 原子內存操作

  • F/D. 單精度/雙精度浮點運算

  • C. 壓縮指令

其次,RISC-V 有一個特色是 ISA 的簡潔性。下面提供了一組 RISC-V 與 ARM 公司在近似時間開發的 ARMv8 架構的對比,雖然對比的內容不是完全可以量化的。

  • 指令更少。RISC-V 的指令更少,基礎指令只有 50 條,這個數量和這些指令的性質和最初的 RISC-I 驚人地相似。其它的幾個標準拓展指令集,M、A、F 和 D,一共增加 53 條指令,再加上 C 的另外 34 條,一共也只有 137 條。ARMv8 則有超過 500 條。

  • 指令格式更少。RISC-V 的指令格式更少,只有 6 種,而 ARMv8 至少有 14 種。

第三,RISC-V 的簡潔性不僅降低了設計處理器的複雜度,也減小了驗證硬體正確性的難度。由於 RISC-V 的目標就是要應用在包括資料庫的高性能計算晶元到 IoT 設備上的低功耗晶元上,設計驗證也可以在開發成本中佔據不小的比例。

第四,RISC-V 是一個完全從頭開始的設計,它是在初始設計的 25 年後開始的。它的設計師們從前幾代的設計中吸取了許多錯誤經驗。與第一代的 RISC 架構不同,RISC-V 避開了依賴微架構和依賴技術的特徵(比如延遲分支和延遲載入)以及很新的創新(比如寄存器窗口),實際上這些功能都隨著編譯器技術的發展而被替代了。

最後,RISC-V 還可以為定製化設計的加速器提供很大的操作指令設計空間,這為 DSA 提供了良好的支持。

除了 RISC-V 之外,英偉達也在 2017 年發布了一個免費開放的架構,名為英偉達深度學習加速器(NVDLA),這是一個用於深度學習推理的標量、可配置的 DSA。它的可選配置包括數據類型(8 位整型、16 位整型、16 位浮點)以及其中的二維乘法矩陣的大小。根據不同的配置,晶元面積可以有 0.5mm2 到 3mm2 的不同大小,功耗也有 20mW 到 200mW 不同。這個架構的 ISA、軟體架構、實現方案也都是全部開放的。

開放的簡單架構實際上會帶來安全方面的好處。首先,安全專家們並不相信模糊不清就可以帶來安全,所以開放的技術實現方案對他們更有吸引力;開放的技術實現也就需要開放的架構。同等重要的是,有越來越多的人和組織機構參與,也就可以圍繞安全的架構設計做出更多改進。專用的架構把參與者局限為企業的員工,而開放的架構允許全世界學術和工業界的人參與提高安全性。更重要的是,這樣開放的架構、技術實現、軟體架構,再加上 FPGA 的高可塑性,都意味著架構設計師們可以在線部署並評價新的解決方案,而且這個周期不再是以年計,而是以周計。雖然 FPGA 比定製化晶元慢大約 10 倍,但這樣的性能表現也已經足以支持用戶的在線使用,也就可以針對真正的攻擊者更及時地做出安全改進。我們期待開放的計算架構未來成為架構設計師和安全專家們進行軟硬體聯合設計的典型範例。

敏捷硬體開發

Beck 等人撰寫的《軟體敏捷開發手冊》為軟體開發領域帶來了一場革命,它克服了傳統瀑布式開發中精心設計的開發計劃和文檔經常失效的問題。小的編程團隊得以快速開發出包含了核心功能但並不完善的軟體原型,然後在下一次迭代開始前就獲得用戶反饋。競爭性的敏捷開發可以讓 5 到 10 人的開發團隊以 2 到 4 周一次迭代的速度快速前進。

再一次,受到軟體開發領域成功經驗的啟發,硬體領域的第三個機遇就是敏捷硬體開發。對架構設計師們來說也有一個好消息,現代電子計算機輔助設計(ECAD)工具提高了抽象級別,可以讓敏捷開發以及對應的更高級別的抽象在不同的設計之間重複使用。

如果說要把軟體開發中的每四周一次迭代的快速前進方式照搬到硬體開發,一聽之下會覺得難以置信,畢竟從硬體設計定版到得到晶元成品就有好幾個月的時間。而下面的圖 9 就展示了敏捷開發過程中可以在適當的抽象級別上更改原型。最中央的抽象級別是軟體模擬器,也是在迭代中做改動最簡單、最快的部分。下一層是可以比細緻的軟體模擬器運行快數百倍的 FPGA。在 FPGA 上可以運行操作系統,也可以進行全功能的性能評測,比如 SPEC 中的測試項目;這讓原型的評價更加準確。亞馬遜雲服務就提供了 FPGA,架構設計師們無需購買 FPGA 硬體並建立實驗室就可以使用 FPGA 做自己的驗證。為了獲得晶元面積和功耗的具體數值,下一層的 ECAD 工具可以生成晶元的布局圖。在工具運行完畢之後還需要人工進行一些步驟,對結果進行微調,確保新的處理器已經準備好投入生產了。處理器設計師們把這下一層稱作「tape in」。前面的這四個級別都可以使用每四周一次的迭代速度。

圖靈獎得主長文報告:是什麼開啟了計算機架構的新黃金十年?(下)

圖 9

如果是出於科研目的,我們在 tape in 這一步就可以停下來了,因為這時就已經可以獲得非常準確的面積、能耗、性能的估計數據了。不過如果真的停下來的話,那就像參加長跑比賽,最後在重點線前 50 米停了下來,「因為可以準確地預測出最終要花多少時間了」。既然已經在比賽的準備以及前面的大部分賽程中投入了許多精力,但只要不衝過終點線,那就沒辦法享受到真正的興奮和滿足。所以其實,硬體工程師在有個方面比軟體工程師強,就是因為他們最終會生產出切實可感的物品。把晶元成品拿回來測量、運行真正的程序、把晶元展示給他們的朋友和家人們看,這都是硬體設計工作中非常幸福的時刻。

許多研究人員會認為他們需要在晶元試產之前停下來,因為晶元的製造實在是太貴了。實際上,當晶元很小的時候,它的製造價格就非常便宜。架構設計師們委託半導體廠商製造 100 個 1mm2 面積的晶元只需要花 1.4 萬美元。如果是以 28nm 工藝製作,1mm2 的面積上就可以放下數百萬個晶體管,足以容納一個 RISC-V 處理器再加一個英偉達加速器。如果要製造一個很大的晶元,那麼最外面這一步可能就會花很多錢,但是如果是為了展現新的想法的話,小的晶元就可以做到。

結論

「黎明之前正是最灰暗的時刻」-Thomas Fuller

要從歷史經驗中學習,有幾件事架構師們必須知道:軟體開發領域的創新點子同樣可以啟發硬體架構設計師們,提升硬體/軟體介面設計的抽象級別可以為創新帶來機會,以及市場最終會為計算機架構之爭畫上句號。iAPX-432 和 Itanium 的故事說明了硬體架構方面的投資可能無法帶來對等的回報,而 S/360、8086、ARM 架構則能夠年復一年地帶來充沛的盈利。

Dennard Scaling 定律和摩爾定律走向終結,以及標準微處理器的性能提升越來越慢並不是什麼必須解決不可的問題,而實際上,它們完全可以看作是令人激動的新機遇。高級別、領域專用的語言和架構把架構設計師們從專用指令集不斷擴充的鏈條中解放出來,同樣也釋放了公眾對於更高的安全性的需求,這都會帶來計算機架構的新的黃金時代。另外依靠開源生態的幫助,敏捷開發的晶元也會越來越令人信服地展現出它的優勢,並逐步越來越快地取得商業上的成功。對於通用處理器的設計理念,ISA 未來也將隨著時間的流逝而越發顯得熠熠生輝,就像 RISC 一樣。在新的黃金時代中我們可以期待繼續看到上個黃金時代那樣的高速發展,只不過這次首當其衝的是價格、能耗以及安全,性能當然也會有繼續的提高。

在未來 10 年中,我們可以期待在計算機架構領域也看到寒武紀生物大爆炸那樣地充滿新鮮創意,這對於學術界和工業界的計算機架構設計師們來說會是一段充滿激情的時光。

via acm.org,雷鋒網 AI 科技評論編譯

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

CES 2019 開展前夕,一大波新品已襲來!
X86 當道,華為「鯤鵬」能否展翅?

TAG:雷鋒網 |