暂无商品咨询信息 [发表商品咨询]
近年来,随着国产Linux桌面系统的逐步推广、使用Linux内核的Android系统的发展和使用Linux服务器的云游戏服务的普及,Linux下的实时渲染应用越来越广。同时随着大模型计算的蓬勃发展,显卡越来越成为计算系统的核心组件。但是Linux下的渲染架构与显卡驱动一直缺少资料。本书以AMD显卡为例,主要阐述显卡计算的原理和显卡驱动的组织方式,并对Linux用户空间到内核空间的渲染架构的原理和变化进行了深入解释。包括了从X到Wayland和Android的图形架构的变化和渲染API的系统层工作原理。同时阐述了大模型计算的底层硬件原理。本书主要基于AMD显卡和Linux下的开源驱动,从用户空间驱动、内核空间驱动、固件和显卡硬件四个方向分析现代显卡的渲染与计算的工作原理。第1章与第2章主要介绍显卡用于渲染、计算和合成的硬件结构;第3章与第4章主要介绍用户空间驱动;第5章到第8章主要介绍显卡内核空间驱动,其中,第5章系统性地介绍AMD显卡内核空间驱动的架构,第6章主要介绍显卡的GPU任务调度器,第7章与第8章主要关注显存管理;第9章主要分析显卡的频率、电压与功耗的关系;第10章主要介绍显卡在大规模AI计算中的应用与性能优化。游戏与渲染相关开发人员、桌面操作系统的开发人员、希望了解GPU计算原理的AI计算开发人员、希望学习显示架构和AI计算的大学生。
目录
第1章 显卡的硬件结构 1
1.1 AMD显卡的历史与核心技术 1
1.1.1 GCN与RDNA 1
1.1.2 显卡的分类 2
1.1.3 AMD显卡的主要技术 3
1.2 显卡的计算硬件结构 6
1.2.1 CPU与GPU的硬件区别 6
1.2.2 着色器的执行硬件 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 显卡的内存硬件结构 31
1.4.1 独立显卡与集成显卡的显存区别 31
1.4.2 显卡内部的内存结构 32
1.4.3 显存的分类 34
1.4.4 内存的检测和纠正 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内核的合成与送显:KMS 64
2.5.1 KMS与送显 64
2.5.2 KMS的主要组件 65
2.5.3 KMS送显结构的创建 69
2.6 DRI在未来云化渲染的新挑战与趋势 70
2.6.1 离屏渲染的发展 70
2.6.2 Android手游的云端运行 72
第3章 三维图形渲染管线 78
3.1 三维渲染中的三维坐标与模型文件表示 78
3.1.1 坐标系统 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的整体架构 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驱动之间的功能映射关系 103
3.4.1 Vulkan:渲染硬件的用户空间驱动接口 103
3.4.2 显卡与队列 103
3.4.3 VkDeviceMemory 108
3.4.4 BO与Vulkan资源的使用:管线拓扑 113
3.4.5 job与VkCommandBuffer 115
3.4.6 Vulkan通用计算与AMD显卡的硬件并行结构 116
第4章 用户空间渲染驱动 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 用户空间渲染驱动:Mesa 130
4.3.1 用户空间渲染驱动框架:Gallium3D 130
4.3.2 AMD Vulkan实现:RADV 133
4.3.3 其他渲染API实现 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的产生 140
4.5.2 FrameGraph下的Vulkan使用方式 140
第5章 DRM与AMD GPU显卡驱动 142
5.1 DRM子系统 142
5.1.1 KMS、GEM与TTM、SCHED 142
5.1.2 DRM ioctl标准接口 143
5.1.3 DRM的模块参数 146
5.1.4 DRM与闭源驱动的现状 147
5.2 AMD显卡驱动AMD GPU 147
5.2.1 AMD显卡驱动 147
5.2.2 AMD GPU的用户空间接口 151
5.3 IP模块与显卡固件 153
5.3.1 IP模块 153
5.3.2 显卡固件 159
5.4 显卡命令执行队列 160
5.4.1 PM4数据包与CP 160
5.4.2 PM4的格式 162
5.5 中断与异常 163
5.5.1 AMD显卡的中断结构 163
5.5.2 显卡的异常处理:GPU Reset 164
5.6 AMD GPU使用的Linux公共子框架 165
5.6.1 传感器与硬件监控框架 165
5.6.2 PCIe BAR 168
第6章 GPU任务调度器 172
6.1 job与GPU任务调度器 172
6.1.1 job与GPU任务调度器的概念 172
6.1.2 Entity与Entity优先级队列 172
6.1.3 GPU任务调度器 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的下发:GPU调度器线程 187
6.3.1 GPU调度器线程的主要回调函数 187
6.3.2 GPU调度器线程的主体逻辑 189
6.3.3 DRM Sched Fence与job异常处理 196
6.3.4 AMD GPU的Entity扩展 197
6.4 job的产生 198
6.4.1 GPU调度器线程负载均衡 198
6.4.2 job的ioctl入口 200
6.5 GPU任务调度器的内部结构 202
6.5.1 GPU调度器线程的主要数据结构 202
6.5.2 AMD GPU的调度上下文 204
第7章 GEM、TTM与AMD GPU对象 208
7.1 GEM与TTM的整体概念 208
7.1.1 GEM与TTM 208
7.1.2 BO的类型与关系 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的创建与内存分配 223
7.4.1 TTM BO的创建 223
7.4.2 TTM内存分配管理器 225
7.4.3 TTM系统内存的非固定映射管理器: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内存访问操作 236
7.6.3 Resizable BAR 237
第8章 应用使用的显卡地址空间:GPUVM 239
8.1 GPU的地址空间:GPUVM与VMID 239
8.1.1 前IOMMU时代:UMA与GART 239
8.1.2 现代AMD GPU的内存访问:GPUVM 240
8.1.3 GPUVM的地址空间:VMID 241
8.1.4 PASID与VMID的映射 244
8.2 VMID页表与BO状态机 245
8.2.1 VMID页表 245
8.2.2 BO状态机 249
第9章 功率控制 252
9.1 结温与温度墙 252
9.1.1 结温与温度墙的定义 252
9.1.2 硬件之间的协作防撞温度墙 254
9.1.3 软件与硬件协作防撞温度墙 257
9.2 功耗与散热 257
9.2.1 功耗的组成:静态功耗与动态功耗 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 显存的结构 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 动态功耗调整 280
9.6.1 DVFS与DPM 280
9.6.2 功能开关的功耗控制技术 283
9.6.3 其他的显卡功耗控制技术 283
9.7 VBIOS与Atom BIOS 283
9.7.1 VBIOS 283
9.7.2 Atom BIOS 284
第10章 显卡的并行计算与大模型计算 286
10.1 显卡的并行结构 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模型的统一架构 296
10.3.1 AI模型的通用概念 296
10.3.2 模型的显存占用 300
10.4 大型模型训练的跨卡跨机计算 303
10.4.1 并行训练模型 303
10.4.2 分布式训练优化策略 306
附录A AMD GPU术语 309
基本信息 | |
---|---|
出版社 | 电子工业出版社 |
ISBN | 9787121503269 |
条码 | 9787121503269 |
编者 | 刘京洋 著 |
译者 | -- |
出版年月 | 2025-05-01 00:00:00.0 |
开本 | 其他 |
装帧 | 平装 |
页数 | 328 |
字数 | |
版次 | 1 |
印次 | 1 |
纸张 |
暂无商品评论信息 [发表商品评论]
暂无商品咨询信息 [发表商品咨询]