《深入理解LLVM:MLIR原理與OpenAI Triton實現分析》封麵

深入理解LLVM:MLIR原理與OpenAI Triton實現分析 內容簡介

本書由國內頭部科技企業資深編譯器專家團隊傾力撰寫,凝練團隊多年深耕MLIR的研究成果與工程實踐經驗。其主要設計思路如下。

 
1)係統闡釋MLIR核心原理與基礎概念,全景梳理各方言間的層級關係與協同機製,並深入探討針對不同計算場景的優化策略。
2)為強化實戰能力,以OpenAI Triton為標杆案例,細致解構其基於MLIR的實現流程與工程細節,幫助讀者深度理解MLIR代碼體係,從容應對實際業務開發挑戰。
3)以60餘幅手繪架構/流程圖、270餘段精講代碼為脈絡,由淺入深地剖析MLIR技術體係,助力讀者快速建立認知框架。

 
具體而言,本書共15章,分為4部分。

第一部分為MLIR基礎知識(第1~7章),係統講解MLIR的核心概念與底層機製,是理解後續內容的基石。

第二部分為MLIR方言詳解(第8~12章),全麵梳理MLIR生態中的核心方言體係,帶領讀者了解其強大的表達能力與優化潛力。

第三部分為MLIR實戰項目剖析(即第13章),以OpenAI的Triton DSL為例,係統剖析MLIR的設計理念及其編譯優化與降級流程。

第四部分為MLIR中的數學知識與應用(第14~15章),介紹實現MLIR高級優化的理論基礎。

深入理解LLVM:MLIR原理與OpenAI Triton實現分析 作者簡介

彭成寒:AI編譯器與虛擬機技術專家,目前專注於LLVM、MLIR相關的AI編譯器研究,並在JVM、V8和WebAssembly等虛擬機技術方麵有著豐富的研發經驗。深耕IT領域近20年,曾涉足應用軟件和大數據開發等多個領域,並著有《深入理解LLVM:代碼生成》《JVM G1源碼分析和調優》《新一代垃圾回收器ZGC設計與實現》《深入探索JVM垃圾回收:ARM服務器垃圾回收的挑戰和優化》等重要領域專著。

 
俞佳嘉:華為編譯器與編程語言實驗室鴻蒙開發者生態構建技術首席專家。擁有10餘年底層技術研發經驗,曾在Intel、Microsoft、華為等公司從事過編譯器、虛擬機、指令翻譯等相關研發工作,並深入參與了Intel Houdini、華為方舟編譯器等產品的核心研發工作。
李靈:從事AI編譯器研發工作,擁有7年編譯器和虛擬機相關研發工作經驗,曾深度參與多項LLVM/MLIR編譯器研發工作。
李存:從事AI編譯器相關工作,擁有6年體係結構相關底軟研發經驗,曾深度參與龍芯中科二進製翻譯器、華為AI編譯器項目。

深入理解LLVM:MLIR原理與OpenAI Triton實現分析 目錄

Contents 目  錄
前言
第一部分 MLIR基礎知識
第1章 緒論 2
1.1 當前編譯器的發展現狀與麵臨的
問題 3
1.2 引入MLIR後的變化 5
1.3 MLIR使用示例 7
1.3.1 高層抽象模型 7
1.3.2 接入MLIR體係 8
1.3.3 使用線性代數描述代碼 9
1.3.4 使用仿射描述代碼 11
1.3.5 接入LLVM體係 12
1.3.6 MLIR使用示例小結 13
1.4 MLIR的不足 14
1.5 本章小結 15
第2章 MLIR概述 16
2.1 IR的組成、結構與存儲 16
2.1.1 組成 17
2.1.2 結構 19
2.1.3 存儲 20
2.2 關鍵功能 21
2.2.1 謂詞、約束、特質和接口 21
2.2.2 匹配與重寫 21
2.2.3 調試 22
2.2.4 表描述語言及工具 23
2.3 其他功能 23
2.4 本章小結 24
第3章 類型、屬性、操作和方言
詳解 25
3.1 類型 25
3.1.1 定義與注冊 26
3.1.2 文法 33
3.1.3 使用方式 35
3.2 屬性 37
3.2.1 定義與注冊 37
3.2.2 文法 38
3.2.3 特性 39
3.3 操作 39
3.3.1 定義 39
3.3.2 內存布局 48
3.3.3 文法 53
3.4 方言 54
3.4.1 定義 54
3.4.2 擴展 57
3.4.3 管理操作、類型和屬性 59
3.4.4 方言示例:內建方言 60
3.5 編譯上下文管理 63
3.6 本章小結 65
第4章 謂詞、特質和接口 66
4.1 謂詞 66
4.1.1 謂詞概述 66
4.1.2 MLIR中的常見謂詞 70
4.2 特質 71
4.2.1 特質的用途 71
4.2.2 特質的定義和使用 72
4.2.3 MLIR中的常見特質 74
4.3 接口 76
4.3.1 方言接口 77
4.3.2 操作接口 79
4.4 本章小結 90
第5章 Pass係統的工作流程 91
5.1 Pass、PassManager與Pass Pipeline
的應用 91
5.1.1 Pass介紹 92
5.1.2 在TD中定義Pass 93
5.1.3 注冊Pass與Pass Pipeline 97
5.1.4 Pass的執行順序 99
5.1.5 Pass的約束 100
5.1.6 Pass的插樁機製 101
5.1.7 標準插樁 103
5.2 分析與分析管理 105
5.3 本章小結 106
第6章 操作匹配與重寫機製 107
6.1 操作匹配的設計與實現 108
6.1.1 模式 108
6.1.2 重寫 110
6.1.3 應用 113
6.2 MLIR框架中的兩種典型應用 114
6.2.1 貪婪匹配 114
6.2.2 方言降級 120
6.2.3 常量折疊與模式匹配機製 126
6.3 本章小結 127
第7章 MLIR中常見的通用優化
技術 128
7.1 操作數位置排序 128
7.2 IR歸一化 129
7.3 控製流下沉 130
7.4 公共子表達式消除 131
7.5 IR驗證器 132
7.6 循環不變量外提 132
7.7 內存到寄存器轉換 133
7.8 拓撲排序 135
7.9 聚合類型的標量替換 136
7.9.1 應用示例 136
7.9.2 實現過程 136
7.10 內聯 137
7.10.1 應用示例 137
7.10.2 實現過程 139
7.11 稀疏條件常量傳播 140
7.11.1 MLIR數據流分析框架 140
7.11.2 sccp的實現 142
7.12 本章小結 144
第二部分 MLIR方言詳解
第8章 業務接入方言 148
8.1 業務接入方言概述 148
8.2 tosa方言 149
8.2.1 上下遊關係 150
8.2.2 優化 150
8.2.3 降級示例 151
8.3 本章小結 153
第9章 優化方言 154
9.1 linalg方言 154
9.1.1 目標與定位 155
9.1.2 上下遊關係 156
9.1.3 重要操作 162
9.1.4 優化與變換 170
9.2 affine方言 180
9.2.1 affine方言概述 180
9.2.2 仿射表達式與半仿射表達式 181
9.2.3 部分操作分類與說明 183
9.2.4 上下遊關係 184
9.2.5 優化與變換 185
9.2.6 降級示例 186
9.2.7 擴展閱讀:affine方言與傳統
多麵體編譯的異同 187
9.3 vector方言 188
9.3.1 vector方言概述 188
9.3.2 常用操作 190
9.3.3 上下遊關係 193
9.3.4 優化與變換 194
9.3.5 降級示例 196
9.4 bufferization方言 197
9.4.1 bufferization方言概述 197
9.4.2 優化與變換 198
9.4.3 降級示例 202
9.5 應用示例 203
9.6 本章小結 206
第10章 結構方言與數據方言 208
10.1 結構方言 208
10.1.1 func方言 209
10.1.2 scf方言 211
10.1.3 cf方言 216
10.2 數據方言 218
10.2.1 builtin方言 218
10.2.2 arith方言 218
10.2.3 index方言 221
10.2.4 complex方言 222
10.2.5 tensor方言 224
10.2.6 sparse_tensor方言 226
10.2.7 memref方言 227
10.2.8 shape方言 231
10.2.9 math方言 233
10.3 本章小結 235
第11章 目標輸出方言 236
11.1 llvm方言 236
11.1.1 類型 237
11.1.2 屬性 239
11.1.3 操作 239
11.1.4 降級示例 240
11.2 硬件方言 241
11.2.1 硬件方言概述 241
11.2.2 arm_sme方言 243
11.2.3 GPU相關知識概述 248
11.2.4 gpu方言 251
11.2.5 nvgpu方言 258
11.2.6 nvvm方言 261
11.3 本章小結 266
第12章 元編程方言 267
12.1 transform方言 267
12.1.1 transform方言概述 267
12.1.2 transform方言的擴展實現 270
12.1.3 變換機製實現的難點 271
12.1.4 關鍵操作 272
12.1.5 transform方言的應用與擴展 273
12.1.6 輔助接口與特質 274
12.1.7 方言擴展說明 275
12.2 pdl與pdl_interp方言及pdll 277
12.2.1 pdl方言 277
12.2.2 pdl_interp方言 278
12.2.3 pdll 279
12.3 irdl方言 281
12.3.1 概述 281
12.3.2 關鍵操作 282
12.3.3 應用示例 282
12.4 本章小結 283
第三部分 MLIR實戰項目剖析
第13章 Triton DSL的設計與編譯
 優化 286
13.1 GPU優化挑戰與Triton DSL設計
思路 286
13.2 Triton DSL的編譯 288
13.2.1 Triton中的方言 288
13.2.2 Triton的編譯過程 290
13.3 Triton的編譯優化及降級 291
13.3.1 編譯過程的優化與降級 291
13.3.2 Python代碼解析與Triton IR
生成 295
13.3.3 Triton IR的優化 298
13.3.4 TritonGPU IR中的數據布局 303
13.3.5 TritonGPU IR的優化 311
13.3.6 基於MLIR社區方言的優化與
降級 363
13.4 Triton的未來發展趨勢 364
13.5 本章小結 366
第四部分 MLIR中的數學知識與應用
第14章 多麵體編譯理論概述 368
14.1 仿射集、凸集、錐與多麵體的
 定義 369
14.2 凸集的保凸運算 370
14.3 凸函數的保凸運算 371
14.4 一般優化與凸優化問題 371
14.4.1 一般優化問題的形式 372
14.4.2 凸優化問題的形式 372
14.5 循環優化 373
14.5.1 循環中的內存依賴分析 373
14.5.2 循環並行 377
14.5.3 循環融合 385
14.5.4 循環分塊 390
14.6 本章小結 391
第15章 整數規劃求解方法 392
15.1 方程組求解 392
15.1.1 高斯消元法 393
15.1.2 傅裏葉-莫茨金消元法 395
15.2 線性規劃與單純形法 397
15.2.1 線性規劃 397
15.2.2 單純形法的發展與理論
基礎 398
15.2.3 單純形法簡介 401
15.3 整數規劃與分支定界法 406
15.4 Presburger算術 407
15.4.1 概述 408
15.4.2 化簡 409
15.4.3 集合操作 409
15.5 MLIR中的整數規劃求解分析 410
15.5.1 無目標的可行性求解與單純
形表變換 411
15.5.2 整數規劃求解的變量分類與
實現方式 412
15.6 本章小結 414
附錄 其他方言 415

最後修改:2026 年 10 月 17 日