后摩爾定律時代,CPU 性能提升放緩,計算力增長式微。多核之后,CPU 還能借助哪些方向實現突圍?在這篇文章中,中國科學院計算技術研究所研究員包云崗對這一問題進行了詳細解讀。
2020 年底給某大廠做過一個報告,包含兩部分內容:一部分是關于計算機體系結構,尤其是 CPU 結構的演變;另一部分關于處理器芯片設計方法。這里把第一部分內容貼出來回答一下這個知乎問題。1. 首先回顧一下計算機體系結構領域三個定律:摩爾定律、牧村定律、貝爾定律。摩爾定律就不用多說了,但想表達一個觀點是摩爾定律未死,只是不斷放緩。2. 摩爾定律讓芯片上的晶體管數量不斷增加,但一個問題是這些晶體管都被充分用起來了嗎?最近 MIT 團隊在《Science》上發(fā)表了一篇文章《There’s plenty of room at the Top: What will drive computer performance after Moore’s law?》,給出他們的答案:顯然沒有!
可以來看一下 MIT 團隊開展的一個小實驗(見下面 PPT):假設用 Python 實現一個矩陣乘法的性能是 1,那么用 C 語言重寫后性能可以提高 50 倍,如果再充分挖掘體系結構特性(如循環(huán)并行化、訪存優(yōu)化、SIMD 等),那么性能甚至可以提高 63000 倍。然而,真正能如此深入理解體系結構、寫出這種極致性能的程序員絕對是鳳毛麟角。
問題是這么大的性能差異到底算好還是壞?從軟件開發(fā)角度來看,這顯然不是好事。這意味著大多數程序員無法充分發(fā)揮 CPU 的性能,無法充分利用好晶體管。這不能怪程序員,更主要還是因為 CPU 微結構太復雜了,導致軟件難以發(fā)揮出硬件性能。
如何解決這個問題?領域專用架構 DSA(Domain-Specific Architecture)就是一個有效的方法。DSA 可以針對特定領域應用程序,定制微結構,從而實現數量級提高性能功耗比。這相當于是把頂尖程序員的知識直接實現到硬件上。3. 第二個定律是牧村定律(也有稱「牧村波動」)。1987 年, 原日立公司總工程師牧村次夫(Tsugio Makimoto) 提出,半導體產品發(fā)展歷程總是在「標準化」與「定制化」之間交替擺動,大概每十年波動一次。牧村定律背后是性能功耗和開發(fā)效率之間的平衡。
對于處理器來說,就是專用結構和通用結構之間的平衡。最近這一波開始轉向了追求性能功耗,于是專用結構開始更受關注。4. 第三個定律是貝爾定律。這是 Gordon Bell 在 1972 年提出的一個觀察,具體內容如下面的 PPT 所述。值得一提的是超級計算機應用最高獎 “戈登 · 貝爾獎” 就是以他的名字命名。
5. 貝爾定律指明了未來一個新的發(fā)展趨勢,也就是 AIoT 時代的到來。這將會是一個處理器需求再度爆發(fā)的時代,但同時也會是一個需求碎片化的時代,不同的領域、不同行業(yè)對芯片需求會有所不同,比如集成不同的傳感器、不同的加速器等等。如何應對碎片化需求?這又將會是一個挑戰(zhàn)。
6. 這三個定律都驅動計算機體系結構向一個方向發(fā)展,那就是「DSA」。如何實現 DSA,這又涉及到兩個方面:
為了追求性能功耗,有三條主要的設計原則(見下面 PPT);
為了應對碎片化需求,則需要發(fā)展出處理器敏捷設計新方法。(這個回答就不介紹敏捷設計方法了)7. 在談一些具體技術之前,我們可以先總體看一下過去幾十年 CPU 性能是如何提升的。下面這頁 PPT 列出了 1995-2015 這二十年 Intel 處理器的架構演進過程——這是一個不斷迭代優(yōu)化的過程,集成了上百個架構優(yōu)化技術。
這些技術之間還存在很多耦合,帶來很大的設計復雜度。比如 2011 年在 Sandy Bridge 上引入了大頁面技術,要實現這個功能,會涉及到超標量、亂序執(zhí)行、大內存、SSE 指令、多核、硬件虛擬化、uOP Fusion 等等一系列 CPU 模塊和功能的修改,還涉及操作系統(tǒng)、編譯器、函數庫等軟件層次修改,可謂是牽一發(fā)動全身。(經常看到有人說芯片設計很簡單,也許是因為還沒有接觸過 CPU 芯片的設計,不知道 CPU 設計的復雜度)
8. 處理器內部有非常復雜的狀態(tài),其狀態(tài)變化是由程序驅動的。也就是說,處理器狀態(tài)取決于程序行為(見下面 PPT),而 CPU 體系結構層次的優(yōu)化思路就是發(fā)現程序行為中的共性特征并進行加速。
如何發(fā)現程序行為中的共性特征,就是處理器優(yōu)化的關鍵點,這需要對程序行為、操作系統(tǒng)、編程與編譯、體系結構等多個層次都有很好的理解,這也是計算機體系結構博士的基本要求。這也是為什么很多國外的計算機體系結構方向屬于 Computer Science 系。
題外話:這兩天看到國內成立集成電路一級學科,這是一個好消息。不過要能培育 CPU 設計人才,在課程設計上不要忽視了操作系統(tǒng)、編程與編譯這些傳統(tǒng)計算機科學的課程。9. 舉兩個發(fā)現熱點應用和熱點代碼、并在體系結構層次上優(yōu)化的例子。一個例子是發(fā)現在不少領域 TCP/IP 協(xié)議棧五層協(xié)議(L5Ps)存在很多大量共性操作,比如加密解密等,于是直接在網卡上實現了一個針對 L5Ps 的加速器,大幅加速了網絡包處理能力。另一個例子是這次疫情導致云計算數據中心大量算力都用來做視頻轉碼,于是設計了一個硬件加速器專門來加速視頻轉碼,大幅提升了數據中心效率。
發(fā)現和識別這種熱點應用和熱點代碼并不容易,需要由很強大的基礎設施和分析設備。比如 Google 在其數據中心內部有一個 GWP 工具,能對整個數據中心應用在很低的開銷下進行監(jiān)測與統(tǒng)計,找到算力被那些熱點程序 / 代碼消耗,當前的 CPU 哪些部件是瓶頸。比如 GWP 顯示在 Google 數據中心內部有 5% 的算力被用來做壓縮。
正是得益于這些基礎工具,Google 很早就發(fā)現 AI 應用在數據中心中應用比例越來越高,于是開始專門設計 TPU 來加速 AI 應用。11. 下面分別從三個方面來介紹體系結構層面的常見優(yōu)化思路:減少數據移動、降低數據精度、提高處理并行度。
首先看一下如何減少數據移動。第一個切入點是指令集——指令集是程序語義的一種表達方式。同一個算法可以用不同粒度的指令集來表達,但執(zhí)行效率會有很大的差別。一般而言,粒度越大,表達能力變弱,但是執(zhí)行效率會變高。12. 通用指令集為了能覆蓋盡可能多的應用,所以往往需要支持上千條指令,導致流水線前端設計(取指、譯碼、分支預測等)變得很復雜,對性能與功耗都會產生負面影響。13. 針對某一個領域設計專用指令集,則可以大大減少指令數量,并且可以增大操作粒度、融合訪存優(yōu)化,實現數量級提高性能功耗比。下面 PPT 的這組數據是斯坦福大學團隊曾經做過的一項研究,從這個圖可以看出,使用了「Magic Instruction」后,性能功耗比大幅提升幾十倍。而這種 Magic Instruction 其實就是一個非常具體的表達式以及對應的電路實現(見 PPT 右下角)。14. 第二個減少數據移動的常用方法就是充分發(fā)揮緩存的作用。訪存部件其實是處理器最重要的部分了,涉及許多技術點(如下面 PPT)。很多人都關注處理器的流水線多寬多深,但其實大多數時候,訪存才是對處理器性能影響最大的。
關于訪存優(yōu)化,也有一系列技術,包括替換、預取等等。這些技術到今天也依然是體系結構研究的重點,這里就不展開細講了。15. 不再展開介紹訪存優(yōu)化技術,就選最近比較熱的內存壓縮方向介紹一下。
IBM 在最新的 Z15 處理器中增加了一個內存壓縮加速模塊,比軟件壓縮效率提高 388 倍,效果非常突出。16. 英偉達也在研究如何在 GPU 中通過內存壓縮技術來提升片上存儲的有效容量,從而提高應用性能。17. Intel 在訪存優(yōu)化上很下功夫,可以通過對比兩款 Intel CPU 來一窺究竟。Core 2 Due T9600 和 Pentium G850 兩塊 CPU,工藝差一代,但頻率相近,分別是 2.8GHz 和 2.9GHz,但性能差了 77%——SPEC CPU 分值 G850 是 31.7 分,而 T9600 只有 17.9 分。
頻率相當,為何性能會差這么多?事實上,G850 的 Cache 容量比 T9600 還要小——6MB L2 vs. 256KB L2 + 3MB L3。
如果再仔細對比下去,就會發(fā)現這兩款處理器最大的區(qū)別在于 G850 適配的內存控制器中引入 FMA(Fast Memory Access)優(yōu)化技術,大幅提高了訪存性能。