面對軟件和硬件在細節(jié)抽象上存在的巨大差異,為探索一條提高軟件定義芯片易用性和計算效率的有效途徑,本書提出一套通用的算子恢復技術,為高級語言程序和芯片硬件架起一座高效溝通的橋梁。
本書系統(tǒng)地介紹了軟件定義芯片的概念、國內外研究與產業(yè)現(xiàn)狀、基本原理、需要研究的關鍵問題和研究平臺,深入闡述了編譯領域的多種指令選擇技術,又基于指令選擇技術、圖匹配技術、最優(yōu)化原理方法和軟件逆向思維提出面向軟件定義芯片通用的算子恢復技術,將細粒度的通用操作集合恢復成粗粒度的芯片算子操作,為增強軟件定義芯片的易用性和計算效率提供一套可行方案,并提供了相關的工程實現(xiàn)核心代碼。
本書作者提出一套通用的算子恢復技術,在高級語言程序和芯片硬件之間架起一座橋梁,目的在于提高軟件定義芯片的易用性和計算效率。本書對相關技術進行深入闡述,并附有工程代碼,將對計算機科學與技術和電子科學與技術專業(yè)的科研人員、高年級本科生、低年級研究生,以及相關行業(yè)的工程師大有裨益。
隨著現(xiàn)代社會向數(shù)字化、自動化、智能化的方向轉型發(fā)展,人們對計算服務的需求與日俱增。近半個世紀以來,集成電路工藝技術的進步是提高計算結構能力的主要措施之一,隨著摩爾定律和登納德縮放比例定律放緩甚至走向終結,此方法正在逐漸失效。
眾所周知,功耗墻問題的出現(xiàn)使得集成電路的功耗約束在許多應用中變得更加嚴格。集成電路工藝進步帶來的性能收益越來越小,這使得硬件架構可實現(xiàn)的計算能力受到嚴重限制。因此,計算機架構設計師不得不將注意力從性能轉移到能效上;計算電路的靈活性也成為不容忽視的設計考慮要素。
隨著新興應用不斷涌現(xiàn)、用戶需求持續(xù)增加、科技能力快速進步以及軟件升級越來越快,不能適應軟件變化的硬件實現(xiàn)形式將面臨生命周期過短和一次性工程成本過高的難題。效率、靈活性和易用性已成為新硬件架構設計中三個最關鍵的評價指標。
對于主流計算架構,滿足這些新需求極具挑戰(zhàn)性。專用集成電路(ApplicationSpecific Integrated Circuit,ASIC)能效雖高,但不具備靈活性;而馮·諾依曼處理器,如通用處理器(General Purpose Processor,GPP)、圖形處理單元(Graphics Processing Unit,GPU)、數(shù)字信號處理器(Digital Signal Processor,DSP)雖足夠靈活,但能效太低,F(xiàn)場可編程邏輯門陣列(Field ProgrammableGate Array,FPGA)因具備定制實現(xiàn)大規(guī)模數(shù)字邏輯、快速完成產品定型等能力而被廣為使用,在通信、網(wǎng)絡、航天、國防等領域擁有牢固的重要地位。因其單比特編程粒度、靜態(tài)配置等本征屬性造成了能量效率低、容量受限、使用門檻高等問題,無法滿足不斷提高的應用需求。近年來,通過采用擴大硬件規(guī)模、異構計算、高級語言編程等方法,F(xiàn)PGA進行了持續(xù)的技術升級,但受其本征屬性限制,上述問題始終未能從根本上得到解決。如果FPGA的基礎架構不發(fā)生根本性的改變,其未來將充滿重重困難。
軟件定義芯片采用以粗粒度為主的混合編程粒度與動態(tài)配置相結合的方式,可以從根本上解決以上制約FPGA發(fā)展的技術難題,并同時滿足能效和靈活性的需求;旌暇幊塘6饶艽蠓鶞p小資源冗余,提升芯片能效;動態(tài)配置通過時分復用能擺脫承載容量的限制,與高級語言配合可提高芯片的可編程性、降低使用門檻。
軟件定義芯片已成為世界強國戰(zhàn)略必爭的科研高地。2018年,美國國防高級研究計劃局(Defense Advanced Research Projects Agency,DARPA)為啟動電子振興計劃斥資7100萬美元,組織全美最強力量,開展了對軟件定義芯片的聯(lián)合攻關。歐盟推出的地平線2020也對該方向給予高度的重視和持續(xù)的研發(fā)支持。
編程語言正朝著更高層次、更為抽象的表達方式演進;硬件體系結構卻向更加復雜的方向發(fā)展。隨著應用程序和硬件之間的抽象差距越來越大,編譯器在自動利用硬件資源以實現(xiàn)最佳性能方面變得越來越捉襟見肘。多數(shù)人習慣于串行化思維模式,高級語言通常描述的是串行執(zhí)行過程,軟件研發(fā)人員使用高級語言編程時效率更高。如何讓不了解硬件設計的軟件人員采用純軟件思維就能對軟件定義芯片進行高效編程,以降低使用門檻、拓展使用范圍、加快應用的迭代與部署速度,即提高軟件定義芯片的易用性,不僅是一項艱巨的挑戰(zhàn),也是一個亟待解決的問題。
軟件定義芯片的功能,最終要靠程序員編寫的軟件來實現(xiàn)。一套硬件能否吸引大量用戶投入精力去開發(fā)軟件的一個必要條件是硬件支持的軟件需向前兼容,即用戶之前編寫的軟件能比較方便地在新的芯片上正確運行。一個優(yōu)秀的編譯系統(tǒng)可以在不過多地影響程序員生產力的條件下,有效地挖掘軟件定義芯片的硬件潛能,為用戶提供更加方便且高效地使用芯片硬件資源的方法。
面對軟件和硬件在細節(jié)抽象上存在的巨大差異,為探索一條提高軟件定義芯片的易用性和計算效率的有效途徑,本書提出一套通用的算子恢復技術,為高級語言程序和芯片硬件架起一座通用且能實現(xiàn)高效溝通的橋梁?捎行Ы鉀Q塊際指令、多輸出指令及循環(huán)控制等傳統(tǒng)方法難以處理的問題。
本書首先系統(tǒng)地介紹了計算架構發(fā)展的歷程、軟件定義芯片的概念及需要重點研究的關鍵問題。第二章介紹基于LLVM開發(fā)的研究平臺。第三章系統(tǒng)地介紹編譯領域的指令選擇技術,基于模式匹配、模式選擇兩大維度及樹全覆蓋、DAG全覆蓋和圖全覆蓋三大策略對多種技術進行深入闡述,為通用算子恢復技術的提出賦予了基礎理論的支撐。第四章詳細介紹通用算子恢復技術,基于圖匹配技術、最優(yōu)化原理(Principle of Optimality,PO)方法和軟件逆向(Software Reverse,SR)思維將細粒度的通用操作集恢復成粗粒度的芯片算子操作,為增強軟件定義芯片的編程效率和計算效率提供一套可行方案。
第五章基于通用算子恢復技術及配套算法給出通用算子恢復系統(tǒng)的工程實現(xiàn)核心代碼,并對代碼進行詳細的分析介紹。第六章對面向軟件定義芯片通用的算子恢復技術及恢復系統(tǒng)進行總結,并展望了提高軟件定義芯片易用性、計算效率和靈活性的發(fā)展趨勢。
本書是基于筆者在清華大學移動計算研究中心從事的科學研究工作而撰寫的,在寫作過程中,朱建峰博士、王婷博士和博士生張?zhí)┤唤o予了諸多寶貴建議和幫助。在此對他們表示衷心的感謝!最后,特別感謝我的妻子關霞,沒有她在背后默默的支持和鼓勵,本書絕沒有面世的可能。
限于筆者時間和水平均有限,書中定然存在一些不足之處,敬請讀者不吝指正。
吳偉峰2024年3月于清華園
吳偉峰
博士,清華大學移動計算研究中心工程師。研究領域包括:編譯器、編程語言研發(fā)、多語言程序自動轉換、二進制翻譯、反編譯、高性能計算和數(shù)據(jù)庫加密應用等。目前主要致力于軟件定義芯片配套編譯系統(tǒng)的研究及開發(fā)工作。
第1章 軟件定義芯片 1
1.1 概述 1
1.1.1 計算架構發(fā)展歷程 1
1.1.2 軟件定義芯片簡介 3
1.2 重點研究方向 6
1.2.1 硬件架構與高效性 7
1.2.2 編程模型與靈活性 8
1.2.3 編譯框架與易用性9
參考文獻.11
第2章 基于LLVM的研發(fā)平臺14
2.1 LLVM介紹14
2.1.1 經典編譯器設計概覽 16
2.1.2 現(xiàn)有實踐17
2.1.3 LLVM中間碼18
2.1.4 LLVM三段式設計 19
2.1.5 模塊化設計附帶閃點 23
2.2 研發(fā)平臺介紹24
2.2.1 CMake構建選項24
2.2.2 循環(huán)體 DFG圖生成 25
2.3 限制27
參考文獻 27
第3章 指令選擇技術 28
3.1 概述29
3.1.1 指令選擇介紹 29
3.1.2 機器指令特征 32
3.1.3 最優(yōu)指令選擇 34
3.1.4 指令選擇的早期發(fā)展 35
3.1.5 相關知識及定義 36
3.1.6 指令選擇的基礎分類 40
3.1.7 指令選擇的歸質任務劃分49
3.2 技術介紹 49
3.2.1 初級技術 49
3.2.2 模式匹配 52
3.2.3 模式選擇 68
3.3 展望83
3.3.1 待研究主題83
3.3.2 挑戰(zhàn)84
參考文獻 85
第4章 通用算子恢復技術97
4.1 提高軟件定義芯片易用性的相關技術 97
4.2 算子恢復技術的引入98
4.3 軟件定義芯片通用算子恢復系統(tǒng) 99
4.3.1 軟件定義芯片抽象算子100
4.3.2 通用算子恢復系統(tǒng)的輸入 106
4.3.3 算子基本模板圖匹配 117
4.3.4 算子聚合126
4.3.5 算子選擇127
4.3.6 算子生成131
4.3.7 復雜度分析 132
4.3.8 總結 135
參考文獻135
第5章 通用算子恢復系統(tǒng)實現(xiàn)136
5.1 DFG 圖數(shù)據(jù)結構 136
5.1.1 結點操作碼定義136
5.1.2 結點數(shù)據(jù)結構138
5.1.3 邊數(shù)據(jù)結構 139
5.1.4 圖數(shù)據(jù)結構 140
5.2 算子基本模板庫工程示例 140
5.2.1 DOT語言 141
5.2.2 算子基本模板工程示例142
5.3 圖匹配優(yōu)先級序列工程示例 147
5.4 算子聚合模板庫工程示例 148
5.4.1 AU算子聚合模板151
5.4.2 二級 LU算子聚合模板155
5.4.3 三級 LU算子聚合模板159
5.4.4 SU模式一算子聚合模板179
5.4.5 SU模式二算子聚合模板180
5.4.6 SU模式三算子聚合模板183
5.5 算子基本模板庫圖匹配工程示例 190
5.5.1 算子基本模板匹配總控函數(shù) 190
5.5.2 算子基本模板匹配函數(shù)191
5.5.3 結點匹配函數(shù)193
5.5.4 結點向上匹配函數(shù) 198
5.5.5 基本算子恢復函數(shù) 199
5.6 算子聚合工程示例 203
5.6.1 LU算子抽象轉換函數(shù) 204
5.6.2 算子聚合模板匹配總控函數(shù) 205
5.6.3 算子聚合模板匹配函數(shù)207
5.6.4 LU抽象算子還原函數(shù) 215
5.7 算子選擇工程示例 216
5.8 算子生成工程示例224
參考文獻238
第6章 結語與展望 239
6.1 結語 239
6.2 展望239
6.2.1 軟件定義芯片的虛擬化240
6.2.2 利用機器學習進行在線訓練 241
參考文獻243
索引245