深入Linux GPU:AMD GPU渲染與AI技術(shù)實踐
定 價:99 元
- 作者:劉京洋
- 出版時間:2025/5/1
- ISBN:9787121503269
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP316.85
- 頁碼:328
- 紙張:
- 版次:01
- 開本:16開
近年來,隨著國產(chǎn)Linux桌面系統(tǒng)的逐步推廣、使用Linux內(nèi)核的Android系統(tǒng)的發(fā)展和使用Linux服務(wù)器的云游戲服務(wù)的普及,Linux下的實時渲染應(yīng)用越來越廣。同時隨著大模型計算的蓬勃發(fā)展,顯卡越來越成為計算系統(tǒng)的核心組件。但是Linux下的渲染架構(gòu)與顯卡驅(qū)動一直缺少資料。本書以AMD顯卡為例,主要闡述顯卡計算的原理和顯卡驅(qū)動的組織方式,并對Linux用戶空間到內(nèi)核空間的渲染架構(gòu)的原理和變化進行了深入解釋。包括了從X到Wayland和Android的圖形架構(gòu)的變化和渲染API的系統(tǒng)層工作原理。同時闡述了大模型計算的底層硬件原理。本書主要基于AMD顯卡和Linux下的開源驅(qū)動,從用戶空間驅(qū)動、內(nèi)核空間驅(qū)動、固件和顯卡硬件四個方向分析現(xiàn)代顯卡的渲染與計算的工作原理。第1章與第2章主要介紹顯卡用于渲染、計算和合成的硬件結(jié)構(gòu);第3章與第4章主要介紹用戶空間驅(qū)動;第5章到第8章主要介紹顯卡內(nèi)核空間驅(qū)動,其中,第5章系統(tǒng)性地介紹AMD顯卡內(nèi)核空間驅(qū)動的架構(gòu),第6章主要介紹顯卡的GPU任務(wù)調(diào)度器,第7章與第8章主要關(guān)注顯存管理;第9章主要分析顯卡的頻率、電壓與功耗的關(guān)系;第10章主要介紹顯卡在大規(guī)模AI計算中的應(yīng)用與性能優(yōu)化。游戲與渲染相關(guān)開發(fā)人員、桌面操作系統(tǒng)的開發(fā)人員、希望了解GPU計算原理的AI計算開發(fā)人員、希望學(xué)習(xí)顯示架構(gòu)和AI計算的大學(xué)生。
劉京洋,歷任網(wǎng)易、華為、騰訊三司技術(shù)專家,有39個發(fā)明專利,著有《深入Linux內(nèi)核架構(gòu)與底層原理》(二版)。長期工作在國內(nèi)一線科技公司從事Linux內(nèi)核領(lǐng)域的研發(fā)工作,精通Linux內(nèi)核的各個子系統(tǒng)。近年來隨著顯卡計算的發(fā)展,主要精力投入到顯卡計算方向。目前在騰訊前沿技術(shù)中心從事云端實時渲染計算和顯卡集群AI計算研發(fā)工作。趙新達,2006年碩士畢業(yè)于浙江大學(xué),擁有18年GPU領(lǐng)域經(jīng)驗。先后在VIA、AMD、INTEL和騰訊公司從事GPU相關(guān)研發(fā),專注于GPU Display、2D、3D和虛擬化技術(shù)。近年來,專注于云游戲開發(fā),負(fù)責(zé)硬件平臺選型、開發(fā)和上線,以及云游戲的渲染性能優(yōu)化和兼容性相關(guān)開發(fā)工作,與此同時,擔(dān)任IEEE云游戲國際標(biāo)準(zhǔn)工作組組長。
目錄
第1章 顯卡的硬件結(jié)構(gòu) 1
1.1 AMD顯卡的歷史與核心技術(shù) 1
1.1.1 GCN與RDNA 1
1.1.2 顯卡的分類 2
1.1.3 AMD顯卡的主要技術(shù) 3
1.2 顯卡的計算硬件結(jié)構(gòu) 6
1.2.1 CPU與GPU的硬件區(qū)別 6
1.2.2 著色器的執(zhí)行硬件 7
1.2.3 顯卡指令集 8
1.2.4 SIMT、SIMD與SMT 9
1.2.5 SPU、SIMD與CU 10
1.2.6 線程、Wave與工作組 12
1.2.7 GCN的并行問題和RDNA的解決辦法 13
1.2.8 SE 15
1.2.9 顯卡并行的性能問題 16
1.3 顯卡的硬件圖形管線 17
1.3.1 圖形流水線 17
1.3.2 硬件管線的低功耗:IMR、TBR與TBDR 20
1.3.3 顯卡的壓縮紋理 27
1.3.4 硬件圖形管線的計算著色器通用化 29
1.4 顯卡的內(nèi)存硬件結(jié)構(gòu) 31
1.4.1 獨立顯卡與集成顯卡的顯存區(qū)別 31
1.4.2 顯卡內(nèi)部的內(nèi)存結(jié)構(gòu) 32
1.4.3 顯存的分類 34
1.4.4 內(nèi)存的檢測和糾正 36
1.5 顯卡的顯示輸出 38
1.5.1 顯示方式 38
1.5.2 DCC與EDID 39
第2章 合成與顯示 41
2.1 DRI 41
2.1.1 非直接渲染 41
2.1.2 DRI1 42
2.1.3 DRI2 43
2.1.4 DRI3 44
2.2 X、Wayland、SurfaceFlinger與WindowManager 45
2.2.1 X 45
2.2.2 Wayland 47
2.2.3 SurfaceFlinger與WindowManager 49
2.3 FrameBuffer與送顯 51
2.3.1 FrameBuffer 51
2.3.2 Android的FrameBuffer管理 53
2.3.3 送顯與DC 55
2.4 合成與DPU、VPU 61
2.5 Linux內(nèi)核的合成與送顯:KMS 64
2.5.1 KMS與送顯 64
2.5.2 KMS的主要組件 65
2.5.3 KMS送顯結(jié)構(gòu)的創(chuàng)建 69
2.6 DRI在未來云化渲染的新挑戰(zhàn)與趨勢 70
2.6.1 離屏渲染的發(fā)展 70
2.6.2 Android手游的云端運行 72
第3章 三維圖形渲染管線 78
3.1 三維渲染中的三維坐標(biāo)與模型文件表示 78
3.1.1 坐標(biāo)系統(tǒng) 78
3.1.2 頂點表示與obj模型文件的格式 79
3.2 DirectX、OpenGL與Vulkan 80
3.2.1 DirectX 80
3.2.2 OpenGL 83
3.2.3 Vulkan 85
3.3 Vulkan API的整體架構(gòu) 88
3.3.1 Vulkan管理組件 88
3.3.2 Vulkan管線組件 90
3.3.3 Vulkan資源組件:VkBuffer與VkImage 93
3.3.4 Vulkan同步組件 96
3.4 Vulkan與AMD GPU驅(qū)動之間的功能映射關(guān)系 103
3.4.1 Vulkan:渲染硬件的用戶空間驅(qū)動接口 103
3.4.2 顯卡與隊列 103
3.4.3 VkDeviceMemory 108
3.4.4 BO與Vulkan資源的使用:管線拓?fù)?113
3.4.5 job與VkCommandBuffer 115
3.4.6 Vulkan通用計算與AMD顯卡的硬件并行結(jié)構(gòu) 116
第4章 用戶空間渲染驅(qū)動 119
4.1 OpenGL與Vulkan的運行時 119
4.1.1 OpenGL與EGL 119
4.1.2 Vulkan 122
4.2 libdrm與KMS用戶空間接口 124
4.2.1 libdrm 124
4.2.2 KMS用戶空間接口 126
4.3 用戶空間渲染驅(qū)動:Mesa 130
4.3.1 用戶空間渲染驅(qū)動框架:Gallium3D 130
4.3.2 AMD Vulkan實現(xiàn):RADV 133
4.3.3 其他渲染API實現(xiàn) 134
4.3.4 著色器 134
4.4 軟管線:swrast與SwiftShader 136
4.4.1 Mesa的軟管線:swrast 136
4.4.2 Google的軟管線:SwiftShader 137
4.4.3 SwiftShader與Lavapipe的對比 139
4.5 渲染API的自動化生成:FrameGraph 140
4.5.1 RenderPass與FrameGraph的產(chǎn)生 140
4.5.2 FrameGraph下的Vulkan使用方式 140
第5章 DRM與AMD GPU顯卡驅(qū)動 142
5.1 DRM子系統(tǒng) 142
5.1.1 KMS、GEM與TTM、SCHED 142
5.1.2 DRM ioctl標(biāo)準(zhǔn)接口 143
5.1.3 DRM的模塊參數(shù) 146
5.1.4 DRM與閉源驅(qū)動的現(xiàn)狀 147
5.2 AMD顯卡驅(qū)動AMD GPU 147
5.2.1 AMD顯卡驅(qū)動 147
5.2.2 AMD GPU的用戶空間接口 151
5.3 IP模塊與顯卡固件 153
5.3.1 IP模塊 153
5.3.2 顯卡固件 159
5.4 顯卡命令執(zhí)行隊列 160
5.4.1 PM4數(shù)據(jù)包與CP 160
5.4.2 PM4的格式 162
5.5 中斷與異常 163
5.5.1 AMD顯卡的中斷結(jié)構(gòu) 163
5.5.2 顯卡的異常處理:GPU Reset 164
5.6 AMD GPU使用的Linux公共子框架 165
5.6.1 傳感器與硬件監(jiān)控框架 165
5.6.2 PCIe BAR 168
第6章 GPU任務(wù)調(diào)度器 172
6.1 job與GPU任務(wù)調(diào)度器 172
6.1.1 job與GPU任務(wù)調(diào)度器的概念 172
6.1.2 Entity與Entity優(yōu)先級隊列 172
6.1.3 GPU任務(wù)調(diào)度器 173
6.2 Fence、DMA Reservation與DMA-BUF 174
6.2.1 Fence 174
6.2.2 DMA Reservation 178
6.2.3 DMA-BUF 185
6.3 job的下發(fā):GPU調(diào)度器線程 187
6.3.1 GPU調(diào)度器線程的主要回調(diào)函數(shù) 187
6.3.2 GPU調(diào)度器線程的主體邏輯 189
6.3.3 DRM Sched Fence與job異常處理 196
6.3.4 AMD GPU的Entity擴展 197
6.4 job的產(chǎn)生 198
6.4.1 GPU調(diào)度器線程負(fù)載均衡 198
6.4.2 job的ioctl入口 200
6.5 GPU任務(wù)調(diào)度器的內(nèi)部結(jié)構(gòu) 202
6.5.1 GPU調(diào)度器線程的主要數(shù)據(jù)結(jié)構(gòu) 202
6.5.2 AMD GPU的調(diào)度上下文 204
第7章 GEM、TTM與AMD GPU對象 208
7.1 GEM與TTM的整體概念 208
7.1.1 GEM與TTM 208
7.1.2 BO的類型與關(guān)系 209
7.1.3 用于CPU渲染的VGEM 210
7.2 顯存類型:GEM Domain與TTM Place 210
7.2.1 GEM Domain 210
7.2.2 TTM Place 212
7.3 GEM BO、TTM BO與AMD GPU BO 216
7.3.1 GEM BO 216
7.3.2 TTM BO 218
7.3.3 AMD GPU BO 219
7.4 TTM BO的創(chuàng)建與內(nèi)存分配 223
7.4.1 TTM BO的創(chuàng)建 223
7.4.2 TTM內(nèi)存分配管理器 225
7.4.3 TTM系統(tǒng)內(nèi)存的非固定映射管理器:struct ttm_tt 228
7.5 TTM的顯存交換機制:Evict 230
7.5.1 Evict的作用 230
7.5.2 Evict的流程 230
7.6 BO的CPU映射訪問 234
7.6.1 GEM BO的mmap映射 234
7.6.2 TTM BO的CPU內(nèi)存訪問操作 236
7.6.3 Resizable BAR 237
第8章 應(yīng)用使用的顯卡地址空間:GPUVM 239
8.1 GPU的地址空間:GPUVM與VMID 239
8.1.1 前IOMMU時代:UMA與GART 239
8.1.2 現(xiàn)代AMD GPU的內(nèi)存訪問:GPUVM 240
8.1.3 GPUVM的地址空間:VMID 241
8.1.4 PASID與VMID的映射 244
8.2 VMID頁表與BO狀態(tài)機 245
8.2.1 VMID頁表 245
8.2.2 BO狀態(tài)機 249
第9章 功率控制 252
9.1 結(jié)溫與溫度墻 252
9.1.1 結(jié)溫與溫度墻的定義 252
9.1.2 硬件之間的協(xié)作防撞溫度墻 254
9.1.3 軟件與硬件協(xié)作防撞溫度墻 257
9.2 功耗與散熱 257
9.2.1 功耗的組成:靜態(tài)功耗與動態(tài)功耗 257
9.2.2 散熱的原理 260
9.3 電壓與頻率 266
9.3.1 供電電壓 266
9.3.2 運行電壓 268
9.3.3 頻率 271
9.3.4 制造工藝的頻率電壓價值 272
9.4 顯存訪問的吞吐與延遲 272
9.4.1 顯存的結(jié)構(gòu) 272
9.4.2 吞吐與延遲 273
9.4.3 RAS 275
9.5 顯卡超頻 276
9.5.1 超頻的原理 276
9.5.2 AMD GPU超頻 278
9.6 動態(tài)功耗調(diào)整 280
9.6.1 DVFS與DPM 280
9.6.2 功能開關(guān)的功耗控制技術(shù) 283
9.6.3 其他的顯卡功耗控制技術(shù) 283
9.7 VBIOS與Atom BIOS 283
9.7.1 VBIOS 283
9.7.2 Atom BIOS 284
第10章 顯卡的并行計算與大模型計算 286
10.1 顯卡的并行結(jié)構(gòu) 286
10.1.1 顯卡的并行計算硬件 286
10.1.2 AMD顯卡的并行計算框架:ROCm 289
10.2 并行計算API與集合通信 290
10.2.1 硬件從渲染卡到計算卡 290
10.2.2 并行計算的分類 292
10.2.3 MPI 294
10.3 AI模型的統(tǒng)一架構(gòu) 296
10.3.1 AI模型的通用概念 296
10.3.2 模型的顯存占用 300
10.4 大型模型訓(xùn)練的跨卡跨機計算 303
10.4.1 并行訓(xùn)練模型 303
10.4.2 分布式訓(xùn)練優(yōu)化策略 306
附錄A AMD GPU術(shù)語 309