-
>
公路車寶典(ZINN的公路車維修與保養秘籍)
-
>
晶體管電路設計(下)
-
>
基于個性化設計策略的智能交通系統關鍵技術
-
>
花樣百出:貴州少數民族圖案填色
-
>
山東教育出版社有限公司技術轉移與技術創新歷史叢書中國高等技術教育的蘇化(1949—1961)以北京地區為中心
-
>
鐵路機車概要.交流傳動內燃.電力機車
-
>
利維坦的道德困境:早期現代政治哲學的問題與脈絡
LLVM編譯器原理與實踐 版權信息
- ISBN:9787111763543
- 條形碼:9787111763543 ; 978-7-111-76354-3
- 裝幀:平裝-膠訂
- 冊數:暫無
- 重量:暫無
- 所屬分類:>>
LLVM編譯器原理與實踐 本書特色
這本書是關于LLVM這一強大而靈活的編譯技術的詳盡指南,它將幫助開發者理解編譯器的設計和實現。鼓勵每位對編譯器技術有興趣的讀者閱讀這本書,從而提升自身技術能力。
LLVM編譯器原理與實踐 內容簡介
LLVM是伊利諾伊大學的一個研究項目,提供一個現代化的,基于SSA的編譯策略,并能夠同時支持靜態和動態的任意編程語言的編譯目標。LLVM由不同的子項目組成,其中許多是正在生產中使用的商業和開源的項目。它也被廣泛用于學術研究。 本書力求將LLVM基礎知識理論與案例實踐融合在一起進行詳細的介紹,幫助讀者理解LLVM工作原理,同時按照應用與設備需要,使用 LLVM進行相應的優化與部署。本書包含大量示例和代碼片段,幫助讀者掌握LLVM的編譯器開發環境。 本書共11章,包括編譯和安裝LLVM、LLVM外部項目、LLVM編譯器、Clang前端基礎、Clang架構與實踐示例、LLVM IR實踐、LLVM芯片編譯器實踐示例、LLVM編譯器示例代碼分析、LLVM優化示例、LLVM 后端實踐,以及MLIR編譯器。 本書適合算法、軟件、編譯器、人工智能、硬件等專業方向的企業工程技術人員、高校師生、科研工作人員和技術管理人員閱讀。
LLVM編譯器原理與實踐 目錄
第1章 編譯和安裝LLVM/
1.1LLVM系統入門/
1.1.1查看LLVM(包括Clang等子項目)/
1.1.2配置和構建LLVM與Clang/
1.2獨立構建/
1.3軟硬件環境要求/
1.3.1硬件環境/
1.3.2軟件環境/
1.3.3主機C 編譯器和標準庫/
1.3.4獲取流行主機C 工具鏈/
1.4LLVM入門/
1.4.1術語和符號/
1.4.2打開LLVM存檔文件/
1.4.3從Git中簽出LLVM源代碼/
1.4.4本地LLVM配置/
1.4.5編譯LLVM套件源代碼/
1.4.6交叉編譯LLVM/
1.4.7LLVM目標文件的位置/
1.4.8可選配置項目/
1.5目錄布局/
1.6使用LLVM工具鏈的示例/
1.7LLVM常見問題/
1.8LLVM相關鏈接/
第2章 LLVM外部項目/
2.1LLDB調試器/
2.1.1LLDB基礎知識/
2.1.2LLDB控制臺/
2.2C 標準庫libc /
2.2.1libc 庫概述/
2.2.2Ubuntu下安裝Clang和libc /
2.3compiler-rt運行時庫/
2.3.1compiler-rt項目組成/
2.3.2compiler-rt的作用/
2.3.3平臺支持/
2.3.4compiler-rt源代碼結構/
2.3.5構建compiler-rt/
2.4DragonEgg /
2.4.1DragonEgg將LLVM作為GCC后端/
2.4.2DragonEgg實踐/
2.5構建RISC-V LLVM并編譯和運行test-suite/
2.5.1構建RISC-V的前期準備/
2.5.2開始構建/
2.5.3編譯test-suite/
2.5.4運行LLVM test-suite/
2.6Clang附加工具/
第3章 LLVM編譯器/
3.1LLVM與Clang源代碼的下載及編譯/
3.1.1下載并編譯 LLVM/
3.1.2Clang源代碼的下載與編譯/
3.2LLVM編譯器基礎結構/
3.2.1LLVM工作原理/
3.2.2LLVM的主要子項目/
3.2.3LLVM與Clang語法/
3.3LLVM三段式編譯 /
3.3.1傳統編譯器三段式設計及其實現/
3.3.2LLVM的三段式設計的實現/
3.4LLVM與Clang架構/
3.4.1LLVM與Clang架構簡介/
3.4.2編譯架構特點分析/
3.5LLVM與GCC的區別/
3.6LLVM IR/
3.6.1什么是LLVM IR/
3.6.2LLVM IR編譯流程/
3.6.3如何得到IR/
3.6.4IR文件鏈接/
3.6.5IR文件編譯流程/
3.6.6IR語法中的關鍵字/
3.7詞法分析與語法分析/
3.7.1詞法分析/
3.7.2AST結構分析/
3.8交叉編譯器/
3.8.1主機與目標機/
3.8.2為什么要交叉編譯/
3.8.3交叉編譯難點/
3.9后端開發/
3.9.1XLA后端分析/
3.9.2SSA問題分析/
3.9.3目標信息代碼分析/
3.10LLVM示例實踐/
3.10.1如何在ARM上編譯LLVM/Clang/
3.10.2如何編寫LLVM Pass/
3.10.3基于LLVM的依賴分析方案/
3.11LLVM數據并行、時間并行和多核并行/
第4章 Clang前端基礎/
4.1編譯器Clang會代替GCC嗎/
4.1.1GCC概述/
4.1.2Clang概述/
4.1.3GCC基本設計與示例/
4.1.4GCC與Clang的區別/
4.2使用 Clang 靜態分析器進行分析調試/
4.2.1靜態分析器概述/
4.2.2靜態分析器庫的結構/
4.2.3靜態分析器工作原理/
4.2.4內部檢查器/
4.2.5關于 Clang 靜態分析器/
4.3如何進行編譯時間混編優化/
4.4Clang模塊實現原理探究/
4.4.1ModuleMap 與 Umbrella/
4.4.2模塊的構建/
4.4.3Clang模塊復用機制/
4.4.4PCH與PCM文件/
4.5使用Clang校驗AST/
4.5.1制作Clang命令行工具的初衷/
4.5.2制作Clang命令行工具主要步驟/
4.5.3環境搭建/
4.5.4開發框架選擇/
4.5.5代碼開發/
4.6LLVM與Clang的底層原理/
4.6.1傳統編譯器設計/
4.6.2Clang前端/
4.6.3IR的優化/
4.6.4bitcode/
4.6.5編譯流程總結示例/
4.7自定義Clang命令,利用LLVM Pass實現對Objective-C函數的靜態插樁/
4.7.1Objective-C中的常見的函數hook實現思路/
4.7.2什么是LLVM Pass/
4.7.3編譯過程/
4.8指令系統/
4.8.1指令系統概述/
4.8.2指令格式/
4.8.3指令的尋址方式/
4.8.4指令的類型與功能/
4.8.5CISC和RISC的比較/
第5章 Clang架構與實踐示例/
5.1C語言編譯器Clang/
5.1.1Clang和GCC編譯器架構/
5.1.2Clang起源/
5.2Clang模塊內部實現原理及源代碼分析/
5.2.1編譯參數分析/
5.2.2預處理/
5.3好用的代碼檢查工具/
5.4Clang在Objective-C中的使用/
5.4.1終端使用特點/
5.4.2Clang的簡單使用/
5.5Clang重排對象類結構分析/
5.5.1概述/
5.5.2根類、超類、子類/
5.6使用Clang編譯C程序并在安卓設備中執行/
5.7分析Swift高效的原因/
5.7.1Swift的函數派發機制/
5.7.2結構體定義的內存分配/
5.7.3編譯SIL/
5.7.4Clang編譯流程的缺點/
5.7.5Swift的特點及其編譯器的使用流程/
5.8LLVM中矩陣的實現分析/
5.8.1背景說明/
5.8.2功能實現/
5.8.3舉例說明/
第6章 LLVM IR實踐/
6.1LLVM架構簡介/
6.1.1LLVM IR的演變/
6.1.2LLVM IR是什么/
6.1.3LLVM架構/
6.1.4前端生成中間代碼/
6.1.5LLVM后端優化IR/
6.1.6LLVM后端生成匯編代碼/
6.2獲取LLVM IR/
6.2.1LLVM IR的三種形式/
6.2.2LLVM IR結構/
6.2.3標識符與變量/
6.3LLVM IR實踐——Hello world/
6.3.1LLVM IR程序設計方法概述/
6.3.2*基本的程序/
6.3.3基本概念解釋/
6.3.4主程序/
6.4LLVM IR數據表示/
6.4.1匯編層次的數據表示/
6.4.2LLVM IR中的數據表示/
6.4.3鏈接類型/
6.4.4可見性/
6.4.5寄存器/
6.5LLVM IR類型系統/
6.5.1類型系統/
6.5.2元數據類型/
6.5.3屬性/
6.6LLVM IR控制語句/
6.6.1匯編語言層面的控制語句/
6.6.2LLVM IR層面的控制語句/
6.7LLVM IR語法鏈接類型/
6.8LLVM IR函數/
6.8.1定義與聲明/
6.8.2傳遞參數與獲得返回值/
6.8.3內置函數、屬性和元數據/
6.9LLVM IR異常處理/
6.9.1異常處理的要求/
6.9.2LLVM IR的異常處理/
6.9.3怎么拋/
6.9.4怎么接/
第7章 LLVM芯片編譯器實踐示例/
7.1編譯器基本概念/
7.1.1LLVM的模塊化編譯器框架/
7.1.2前端在干什么/
7.1.3后端在干什么/
7.1.4DAG下譯/
7.1.5DAG合法化/
7.1.6小結/
7.2從無到有開發/
7.2.1不必從頭開始開發/
7.2.2需要添加的文件類型/
7.2.3從文件角度看整體框架/
7.2.4從類繼承與派生角度看整體框架/
7.3芯片的整體架構部分/
7.3.1×××.h類文件/
7.3.2×××.td類文件/
7.3.3×××TargetMachine.cpp和×××TargetMachine.h類文件/
7.3.4×××MCTargetDesc類文件/
7.3.5×××baseInfo類文件/
7.3.6×××TargetInfo類文件/
7.3.7×××Subtarget類文件/
7.3.8幾個容易混淆的概念/
7.3.9小結/
7.4寄存器信息/
7.4.1×××Registerinfo.td類文件/
7.4.2×××RegisterInfo類文件/
7.4.3×××SERegisterinfo類文件/
7.5指令描述的.td文件/
7.5.1×××InstrFormats.td類文件/
7.5.2×××InstrInfo.td類文件/
7.5.3依次定義指令/
7.5.4定義指令的自動轉換/
7.5.5小結/
7.6指令描述的.cpp文件/
7.6.1×××InstrInfo.cpp(.h)類文件/
7.6.2×××SEInstrInfo.cpp(.h)類文件/
7.6.3×××AnalyzeImmediate.cpp(.h)類文件/
第8章 LLVM編譯器示例代碼分析/
8.1建立編譯器的基礎框架/
8.2使用 LLVM 實現一個簡單編譯器/
8.2.1目標/
8.2.2詞法分析/
8.2.3語法分析/
8.2.4LLVM IR的代碼生成/
8.2.5優化器/
8.2.6添加JIT編譯器/
8.2.7靜態單一賦值/
8.2.8控制流/
8.2.9用戶自定義操作符/
8.2.10可變變量/
第9章 LLVM優化示例/
9.1LLVM優化示例介紹/
9.1.1編譯器優化目標/
9.1.2LLVM優化Pass如何工作/
9.1.3聚集對象的標量替換/
9.1.4公共子表達式消除/
9.1.5全局變量優化器 /
9.1.6指令合并器/
9.2改進優化條件/
9.2.1偏轉循環移動代碼/
9.2.2運行規范化自然循環/
9.2.3歸納變量簡化/
9.2.4進行比特追蹤死代碼消除/
9.3鏈接時優化/
9.3.1LTO基本概念/
9.3.2LTO優化處理/
9.3.3linkmap分析/
9.4Nutshell LLVM LTO/
9.4.1ThinLTO/
9.4.2高度并行的前端處理和初始優化/
9.5LLVM完全LTO/
9.5.1LLVM完全LTO的目標/
9.5.2LLD的整個執行流程/
9.6LLVM核心類簡明示例/
第10章 LLVM后端實踐/
10.1LLVM后端概述/
10.1.1LLVM后端基本概念/
10.1.2使用Cpu0作為硬件的例子/
10.2LLVM新后端初始化和軟件編譯/
10.2.1新后端初始化和軟件編譯/
10.2.2LLVM 代碼結構/
10.2.3Cpu0后端初始化/
10.2.4LLVM后端結構/
10.2.5增加 AsmPrinter/
10.2.6增加 DAGToDAGISel/
10.2.7增加 Prologue和Epilogue 部分代碼/
10.2.8操作數模式/
10.2.9小結/
10.3算術和邏輯運算指令/
10.3.1算術運算指令/
10.3.2邏輯運算指令/
10.4生成目標文件/
10.4.1簡要說明/
10.4.2文件新增/
10.4.3文件修改/
10.4.4檢驗成果/
10.5全局變量/
10.5.1全局變量編譯選項/
10.5.2代碼修改/
10.5.3檢驗成果/
10.5.4小結/
10.6更多數據類型/
10.6.1實現類型/
10.6.2代碼修改/
10.6.3檢驗成果/
10.7控制流/
10.7.1控制流語句/
10.7.2消除無用的JMP指令/
10.7.3填充跳轉延遲槽/
10.7.4條件MOV指令/
10.8函數調用/
10.8.1棧幀結構/
10.8.2傳入參數/
10.8.3函數調用優化/
10.9ELF文件支持/
10.9.1ELF文件/
10.9.2支持反匯編/
10.10匯編/
10.10.1棧幀管理/
10.10.2匯編器/
10.10.3內聯匯編/
10.11使用仿真器驗證編譯器/
10.11.1運行仿真器/
10.11.2小結/
第11章 MLIR編譯器/
11.1MLIR語言參考/
11.1.1高層結構/
11.1.2MLIR符號/
11.1.3MLIR作用域/
11.1.4控制流和SSACFG作用域/
11.1.5類型系統/
11.1.6方言類型/
11.2MLIR方言及運行分析/
11.2.1MLIR簡介/
11.2.2常見的IR表示系統/
11.2.3MLIR的提出/
11.3方言及運行詳解/
11.3.1方言/
11.3.2運行結構拆分/
11.3.3創建新的方言操作/
11.3.4將方言加載到 MLIRContext 中/
11.3.5定義操作/
11.3.6創建方言流程總結(使用ODS)/
11.4MLIR 運算與算子/
11.4.1MLIR 運算與算子概述/
11.4.2運算類(Operation)/
11.4.3算子類(Op)/
11.4.4MLIR OpBase.td算子類的作用/
11.4.5MLIR 運算的構建過程/
11.4.6MLIR TableGen后端生成算子代碼/
11.5MLIR的緣起/
11.6MLIR部署/
11.6.1MLIR部署流程/
11.6.2MLIR應用/
11.7MLIR介紹/
11.8MLIR基本數據結構/
11.8.1MLIR源代碼目錄/
11.8.2MLIR簡易UML類圖/
11.8.3開發中用到的具體數據結構/
11.9MLIR的出現背景與提供的解決方案/
11.9.1概述/
11.9.2解決方案/
11.10機器學習編譯器:MLIR方言體系/
11.10.1基礎組件/
11.10.2方言體系/
參考文獻/
LLVM編譯器原理與實踐 作者簡介
吳建明,上海交通大學圖像研究所博士研究生,長期在華為上海研究所工作,F為芯盟科技上海研發中心AI芯片總架構師、聯合創始人。長期從事人工智能芯片、自動駕駛、人工智能編譯器與工具鏈、AI Framework框架、CameraISP、Audio/VideoCodec、計算機視覺、深度學習、嵌入式軟件等研究性工作。帶領團隊完成了自動駕駛芯片整體架構設計、軟件系統整體架構設計、人工智能框架編譯器與工具鏈設計、端到端應用場景分析攝像頭目標檢測分析,語音識別分析,推薦系統分析、TensorRT/nvGraph應用GPU部署deploy設計分析等重點項目。在核心期刊發表過10余篇論文,在各論壇有關自動駕駛和芯片設計領域有很高的知名度。
- >
伊索寓言-世界文學名著典藏-全譯本
- >
詩經-先民的歌唱
- >
新文學天穹兩巨星--魯迅與胡適/紅燭學術叢書(紅燭學術叢書)
- >
中國人在烏蘇里邊疆區:歷史與人類學概述
- >
朝聞道
- >
姑媽的寶刀
- >
人文閱讀與收藏·良友文學叢書:一天的工作
- >
巴金-再思錄