相關主題
商品描述
這是一部全景式解析開源GPGPU設計的力作,旨在打通從理論原理到項目實踐的全鏈路。
? 貫穿全棧,視野宏大
從GPU發展史、指令集設計、微架構剖析,到OpenCL編程模型與LLVM編譯器工具鏈,提供一站式GPGPU知識體系。
? 硬核剖析,深入細節
立足“乘影”開源項目,對流式多處理器(SM)、緩存子系統、內存管理單元(MMU)及Tensor Core等關鍵模塊進行深度解讀。
? 實踐導向,資源完備
本書不僅是理論指南,更是實戰手冊,提供全棧開源代碼與全流程實操指南,助力讀者將知識轉化為技能。
? 生態完整,工具先進
詳解基於OpenCL與LLVM的現代GPGPU軟件棧,涵蓋編程、編譯、驅動等核心環節,構建完整的開發與運行環境。
本書為渴望掌握通用並行計算核心技術的工程師、研究者和學生,點亮了“從零到一”設計和實現GPGPU的完整路徑。"
"本書聚焦通用並行計算GPGPU 技術及其實踐,系統回顧GPU 從圖形渲染到通用計算的演化歷程,深入解析GPU指令集、微架構、軟件工具鏈設計。本書分為4 部分:第 1 部分回顧GPGPU的時代背景與發展歷程,介紹主要開源項目;第2 部分探討GPU設計思想與指令集,並引出乘影GPGPU自定義指令集;第3 部分剖析乘影GPGPU硬件微架構,包括流式多處理器單元、CTA調度器、緩存子系統、內存管理單元以及張量計算系統等關鍵模塊;第4 部分介紹基於OpenCL的編程模型、LLVM 編譯器及驅動工具鏈,構建完整的GPGPU軟件生態。本書兼顧理論與實操,既涵蓋GPU並行計算的核心原理與關鍵技術,又結合乘影開源項目的實踐示例,幫助讀者深入理解並掌握現代GPGPU的設計與實現路徑。
本書適合對GPU 架構、並行計算與開源硬件生態感興趣的工程師、學生和研究人員閱讀。
作者簡介
何虎,上海清華國際創新中心副主任,清華大學集成電路學院副教授,博士生導師,清華大學工業與車規半導體芯片研究中心主任。主要研究方向是高性能處理器。在TCAD,TCAS、TVLSI,Frontiers in Neuroscience,MICRO等國際期刊和會議上發表多篇論文。曾獲北京市科學技術獎一等獎等三項省部級獎勵。出版《通用圖形處理器指令集架構和軟硬件設計》《車規級芯片技術》等專著。承擔清華大學“超大規模集成電路CAD”和“大規模集成電路測試方法學”課程教學。
馬鳴遠,清華大學集成電路學院博士研究生,本科畢業於清華大學物理系。曾獲清華大學優良畢業生、北京市優秀畢業生等榮譽。
於芳菲,清華大學集成電路學院碩士研究生,2022年獲得學士學位,2025年獲得碩士學位,專註於GPGPU指令集架構及硬件設計研究。目前就職於阿裏巴巴達摩院。"
目錄大綱
第1部分 背景與概覽/ 1
第1章 行業背景和發展/ 2
1.1 GPGPU的歷史與發展/ 2
1.1.1 早期計算機圖形的發展/ 2
1.1.2 專用圖形處理器的誕生/ 7
1.2 GPU的可編程化與GPGPU的萌芽/ 11
1.2.1 可編程著色器時代(2001—2006年)/ 11
1.2.2 通用計算需求的增長/ 12
1.3 GPGPU通用計算時代的興起(2006年起)/ 14
1.3.1 統一渲染架構的引入/ 14
1.3.2 CUDA的推出與影響/ 14
1.3.3 OpenCL的出現與標準化/ 15
1.3.4 計算著色器的引入與GPGPU的成熟/ 16
1.4 光線追蹤與AI時代/ 16
1.4.1 光線追蹤的崛起:從離線到實時/ 16
1.4.2 AI驅動的GPU變革/ 17
1.5 GPU的未來:架構演化與技術創新/ 17
1.5.1 硬件架構的持續演化/ 17
1.5.2 網格著色器/ 18
1.5.3 封裝和互連技術的演進/ 18
1.5.4 GPGPU技術的挑戰/ 21
1.6 本章小結/ 22
第2章 開源項目與開發進展/ 23
2.1 主要開源GPGPU項目概覽/ 23
2.1.1 OpenVGA/ 23
2.1.2 Nyuzi Processor(2012)/ 24
2.1.3 MIAOW(2015)/ 25
2.1.4 FGPU:An SIMT-Architecture for FPGAs(2016)/ 26
2.1.5 Vortex(2019)/ 27
2.1.6 乘影GPGPU/ 29
2.2 開源GPU模擬器項目概況/ 30
2.2.1 GPGPU-Sim/ 30
2.2.2 gem5-gpu/ 31
2.3 開源項目情況與分析/ 32
第2部分 GPU設計思想和指令集/ 35
第3章 從並行思想到GPGPU/ 37
3.1 指令級並行/ 37
3.1.1 流水線/ 37
3.1.2 亂序執行/ 38
3.1.3 超標量技術/ 38
3.2 線程級並行/ 39
3.2.1 粗粒度多線程/ 40
3.2.2 細粒度多線程/ 41
3.2.3 同時多線程/ 41
3.2.4 多核處理器/ 41
3.2.5 討論/ 42
3.3 數據級並行/ 43
3.3.1 向量化與性能提升/ 43
3.3.2 Amdahl定律與向量加速的整體影響/ 45
3.3.3 內存帶寬與數據獲取/ 45
3.3.4 SIMD硬件的形態變換/ 47
3.3.5 NPU/ 48
3.4 GPGPU/ 51
3.5 比較、討論和小結/ 55
3.5.1 橫向對比/ 55
3.5.2 軟硬件協同優化新趨勢/ 56
第4章 NVIDIA GPU指令集/ 57
4.1 寄存器/ 59
4.1.1 通用寄存器/ 59
4.1.2 特殊寄存器/ 59
4.1.3 Predicate寄存器/ 60
4.1.4 Uniform寄存器/ 61
4.1.5 討論/ 61
4.2 內存和緩存/ 61
4.3 運算/ 62
4.3.1 浮點數運算/ 62
4.3.2 整數運算/ 65
4.3.3 Warp級別運算/ 66
4.4 本章小結/ 66
第5章 AMD GPU指令集/ 68
5.1 架構簡介/ 69
5.2 寄存器/ 70
5.2.1 控制寄存器/ 70
5.2.2 通用寄存器/ 70
5.3 指令格式/ 71
5.3.1 常用指令字段/ 71
5.3.2 緩存控制修飾符/ 72
5.4 程序控制指令/ 73
5.5 標量指令/ 73
5.6 向量指令/ 74
5.6.1 編碼格式及特點/ 74
5.6.2 16b計算/ 74
5.6.3 VOPD:雙發射計算/ 75
5.6.4 矩陣乘加指令/ 75
5.7 內存和緩存/ 76
5.7.1 Flat訪存/ 77
5.7.2 Global訪存/ 78
5.7.3 Scratch訪存/ 78
5.8 本章小結/ 78
第6章 RISC-V及其向量擴展/ 80
6.1 RISC-V指令集概述/ 80
6.1.1 RISC-V起源/ 80
6.1.2 RISC-V架構特點/ 80
6.2 RISC-V指令集/ 81
6.2.1 基礎指令集/ 81
6.2.2 擴展指令集/ 83
6.3 RISC-V向量擴展概述/ 85
6.3.1 向量擴展的引入/ 85
6.3.2 向量寄存器和狀態映射/ 86
6.3.3 RISC-V向量擴展的關鍵特性/ 86
6.4 RISC-V向量擴展的指令集/ 87
6.4.1 向量擴展指令集格式/ 87
6.4.2 向量masking/ 89
6.5 RISC-V向量擴展的應用/ 89
第7章 乘影GPGPU指令集/ 90
7.1 編程模型映射方案/ 90
7.2 指令設計說明/ 92
7.2.1 RISC-V標量指令/ 92
7.2.2 RISC-V向量指令/ 93
7.3 自定義指令/ 93
7.3.1 分支控制指令/ 94
7.3.2 寄存器擴展指令/ 95
7.3.3 同步和任務控制指令/ 96
7.3.4 自定義矩陣乘加指令/ 98
7.3.5 自定義計算指令/ 99
7.3.6 自定義訪存指令/ 99
7.3.7 自定義64位地址空間立即數訪存指令/ 101
7.3.8 自定義異步覆制指令/ 101
7.3.9 自定義訪存前綴指令/ 103
7.3.10 自定義計算前綴指令/ 104
7.4 寄存器/ 105
7.4.1 通用寄存器堆設計方案/ 105
7.4.2 CSR方案/ 105
7.4.3 應用程序二進制接口/ 106
7.5 內存模型和內存分配方案/ 106
7.6 本章小結/ 107
第3部分 乘影GPGPU硬件微架構/ 109
第8章 流式多處理器單元核心微架構/ 111
8.1 線程束調度器/ 114
8.1.1 線程束調度器架構/ 115
8.1.2 線程束調度的討論/ 117
8.2 流水線前端設計/ 120
8.2.1 取指單元/ 120
8.2.2 譯碼單元/ 122
8.2.3 指令緩沖/ 124
8.2.4 記分板/ 126
8.2.5 線程分支與SIMT-Stack/ 127
8.2.6 SIMT分支的討論/ 129
8.3 流水線後端設計/ 133
8.3.1 操作數收集器和寄存器文件/ 133
8.3.2 標量單元/ 136
8.3.3 浮點數乘法器/ 139
8.3.4 向量執行單元/ 142
8.3.5 特殊函數單元/ 145
8.3.6 乘法單元/ 147
8.3.7 LSU/ 147
8.3.8 寫回單元/ 150
8.3.9 標量與仿射數據模式的擴展討論/ 151
8.4 本章小結/ 152
第9章 CTA調度器/ 153
9.1 線程塊調度策略概述/ 154
9.1.1 防止資源擁塞與負載不均的節流調度策略/ 154
9.1.2 針對線程塊間空間局部性的調度策略/ 155
9.1.3 針對多內核函數的調度策略/ 156
9.2 線程塊調度器的功能概述/ 157
9.3 線程塊調度器的基本結構/ 158
9.3.1 頂層設計/ 159
9.3.2 子模塊功能/ 159
9.4 資源判定流程/ 160
9.4.1 資源表緩存的語義/ 161
9.4.2 資源表緩存的項數/ 163
9.4.3 本節小結/ 165
9.5 硬件實現/ 165
9.5.1 線程塊緩沖區/ 165
9.5.2 資源分配器/ 166
9.5.3 資源表/ 169
9.5.4 計算單元接口/ 172
9.5.5 線程索引/ 173
9.6 功能斷言/ 174
9.7 本章小結/ 175
第10章 乘影GPGPU緩存子系統/ 176
10.1 共享內存系統的內存模型/ 176
10.1.1 共享內存系統的一致性、同步、連貫性/ 176
10.1.2 內存模型/ 179
10.2 連貫性指導的緩存一致性設計方案/ 189
10.3 GPGPU存儲系統概述/ 190
10.3.1 GPGPU的片上存儲系統/ 190
10.3.2 GPGPU緩存系統特點/ 191
10.3.3 共享內存設計與Bank Conflict/ 192
10.3.4 融合內存/ 194
10.4 一級緩存子系統硬件設計/ 195
10.4.1 一級緩存子系統接口/ 195
10.4.2 DCache設計概覽/ 199
10.4.3 子模組設計/ 202
10.4.4 訪存單元請求流水線時序行為/ 208
10.4.5 二級緩存響應流水線時序行為/ 210
10.5 二級緩存子系統硬件設計/ 210
10.6 原子模塊硬件設計/ 213
10.6.1 原子操作介紹/ 213
10.6.2 原子模塊硬件設計/ 214
10.7 通用圖形處理器的訪存特點及優化方向/ 217
10.8 本章小結/ 218
第11章 內存管理單元/ 219
11.1 引言/ 219
11.2 內存管理單元與虛擬內存技術概述/ 219
11.2.1 MMU的定義/ 220
11.2.2 虛擬內存/ 220
11.2.3 RISC-V的虛擬內存規範/ 221
11.2.4 GPU上的虛擬地址/ 223
11.3 乘影GPGPU中的MMU設計/ 225
11.3.1 一級TLB/ 225
11.3.2 二級TLB系統/ 226
11.3.3 輔助TLB存儲/ 227
11.3.4 頁表遍歷轉換單元/ 228
11.3.5 根頁表地址映射表與地址空間管理/ 229
11.3.6 本節小結/ 229
11.3.7 軟件頁表維護/ 230
11.4 拓展討論/ 230
11.5 本章小結/ 231
第12章 張量計算系統/ 233
12.1 Tensor Core/ 233
12.1.1 神經網絡計算特征/ 234
12.1.2 張量計算單元/ 241
12.1.3 乘影GPGPU Tensor Core設計/ 248
12.1.4 討論/ 252
12.2 Direct Memory Engine/ 253
12.2.1 數據訪存加速器設計背景/ 253
12.2.2 乘影GPGPU的DMA Engine架構設計/ 258
12.3 本章小結/ 268
第4部分 乘影GPGPU軟件工具鏈/ 269
第13章 OpenCL編程模型介紹/ 270
13.1 執行模型/ 271
13.2 軟件線程與硬件資源/ 275
13.3 存儲模型/ 276
13.4 本章小結/ 278
第14章 基於OpenCL的編譯器設計/ 279
14.1 編譯器的基本概念/ 279
14.1.1 編譯器的工作流程/ 279
14.1.2 編譯器的結構組成/ 280
14.1.3 編譯器的類型/ 280
14.1.4 編譯器與解釋器的區別/ 281
14.2 編譯器的作用和重要性/ 281
14.3 為什麼選擇LLVM/ 282
14.3.1 架構與靈活性/ 282
14.3.2 優化能力與跨平臺社區生態/ 283
14.3.3 面向未來的機器學習與MLIR集成/ 283
14.4 LLVM編譯器概述/ 284
14.4.1 LLVM的歷史與發展/ 284
14.4.2 LLVM的架構/ 284
14.5 LLVM編譯器的模塊化架構/ 286
14.5.1 前端/ 286
14.5.2 中端/ 288
14.5.3 後端/ 294
14.6 OpenCL和乘影GPGPU編譯器的結合/ 301
14.6.1 OpenCL C編程語言/ 301
14.6.2 Clang編譯器編譯OpenCL C的流程/ 304
14.6.3 OpenCL C的libclc函數庫/ 305
第15章 驅動工具鏈/ 308
15.1 OpenCL運行時工作流程/ 308
15.2 OpenCL運行時實現/ 311
15.2.1 設備信息/ 311
15.2.2 OpenCL命令隊列與事件修改/ 311
15.2.3 內存管理/ 312
15.2.4 設備執行/ 313
15.3 乘影驅動程序設計/ 315
15.3.1 硬件抽象層API/ 316
15.3.2 進程管理/ 316
15.3.3 基於驅動程序的虛擬設備實現/ 317
15.4 本章小結/ 318
參考文獻/ 319
