概念页
GPU 架构案例
GPU Architecture Case Studies
RTR4 第 23.10 节剖析三种架构:面向移动设备、以能效为先的 sort-middle 分块架构 ARM Mali G71 Bifrost;NVIDIA Pascal(GTX 1080)的 SM/TPC/GPC 层级与介于 sort-middle 和 sort-last fragment 之间的 tiled caching;AMD GCN Vega 的计算单元、异步计算引擎、DSBR 与 HBCC。硬件厂商通过对尚未制造的 GPU 做大量参数化仿真来决定 MP 数量、缓存、光栅引擎、ROP 数等——各种单元数量的原因归根结底是"这样效果最好"。
ARM Mali G71 Bifrost(2016)
- 定位:手机、平板、电视;2015 年出货 7.5 亿颗 Mali GPU。电池供电,能效比性能更重要,所以全部 Mali 都是 sort-middle(分块架构),帧缓冲访问留在片上。
- 结构:最多 32 个统一着色引擎(ARM 称 shader core),每个含 3 个 SIMD 宽度为 4 的执行引擎,共 12 个 lane,quad 相当于 warp;每引擎至少 256 个线程在飞以隐藏延迟。FP16 性能最高 2 倍;寄存器旁路(结果只供下一条指令使用时不访问寄存器文件)省电;访存时由 quad 管理器以 4 线程而非 12 线程的细粒度切换。所有访存经 MMU 做虚实地址转换。
- 分块流程:先完成全部几何处理,为每个瓦片建立多边形列表;再逐瓦片光栅化与着色,结果写在片上瓦片内存(瓦片 16×16 像素),完成后经 L2 写回外部内存。顶点着色器拆成位置着色(分箱只需位置)和分块后按需执行的varying 着色,节省带宽;分层分箱器使分箱内存占用更小更可预测,不再与图元大小成正比。几何与下一帧的分块可与当前帧像素处理并行,意味着可能有更多延迟。第一个分块架构是 Pixel-Planes 5。
- 像素本地存储 (PLS):像素着色器可读帧缓冲颜色实现自定义混合,并在瓦片内存中存任意固定大小的每像素数据,从而高效实现延迟着色:第一遍写 G 缓冲到 PLS,第二遍计算光照并累加到 PLS,第三遍算最终颜色,全程瓦片数据留在片上。
- 抗锯齿:按 4 采样旋转网格 (RGSS) 设计;过滤在瓦片离开 GPU 前完成,外部帧缓冲每像素只存一种颜色,只需把片上瓦片缓冲扩大 4 倍或用更小瓦片。可按批次在多重采样与超采样间切换(如 alpha 贴图的树用超采样),也支持 8× 和 16× MSAA。
- 事务消除:瓦片逐出时计算签名(校验和),下一帧签名相同就不写外部内存,对每帧只更新小部分画面的休闲游戏特别有用;sort-last 架构难以实现。智能合成把它用于 UI 合成。还大量使用时钟门控和电源门控。
- 纹理:ASTC、ETC 专用解压单元,压缩纹理以压缩形式存于缓存,读取时即时解压,增大有效缓存。
- 缺点:整个场景数据要先送 GPU 分块,处理后的几何要流出到内存;几何放大(几何着色器、曲面细分)会增加来回传输,Mali 上二者都由 GPU 软件实现,最佳实践指南建议永远不要用几何着色器。
NVIDIA Pascal(GTX 1080)
- SM:4 个处理块,每块 32 个 ALU(CUDA core),可同时执行 4 个 32 线程 warp;每块 8 个 LD/ST、8 个 SFU(正弦、余弦、以 2 为底的指数与对数、倒数、倒数平方根,并支持属性插值),寄存器文件每块 64 kB、每 SM 256 kB;共享指令缓存、各块有指令缓冲;warp 调度器每周期可派发两条 warp 指令;每 SM 两个 24 kB L1(推测是因为单个大 L1 需要更多读写端口)、8 个纹理单元。像素着色时 warp 调度器把 8 个 quad 组成 32 lane;可同时处理顶点、像素、图元等不同类型的 warp,零开销切换。(前代 Tesla 架构用记分板按 warp 类型、指令类型和"公平性"挑选最高优先级就绪 warp。)
- 多形引擎 (PM):顶点获取、曲面细分、同时多投影(可用于高效 VR 渲染)、属性设置、流输出。光栅引擎:三角形设置(含背面剔除)、分层瓦片遍历、z 剔除,并把顶点属性转为平面方程供像素着色器高效求值。
- 层级:SM + PM = TPC;5 个 TPC 共享一个光栅引擎组成 GPC(像一个小 GPU);GTX 1080 有 4 个 GPC,GigaThread 引擎全局分发线程块。合计 20 个 SM、2560 个 ALU、160 个纹理单元(峰值 277.3 Gtexels/s)。
- ROP 与内存:64 个 ROP,8 个一组连到一个 32 位内存控制器和 256 kB L2(共 2 MB);每个 ROP 负责某一内存分区的像素。无损压缩模式:2:1(每瓦片存参考颜色并以更少位编码像素差)、4:1(差值更小、内容平滑时)、8:1(2×2 块常量颜色 4:1 与 2:1 结合),按 8:1 > 4:1 > 2:1 优先,全失败则不压缩。GDDR5X 10 GHz、256 位,峰值 320 GB/s。
- 算力:(FMA 计为 2 次运算,1733 MHz 为加速频率);1080 Ti 有 3584 个 ALU,12.3 TFLOPS。
- tiled caching:NVIDIA 长期是 sort-last fragment;Maxwell 起加入分箱器,几何按足够小的块处理,使变换后的几何和当前瓦片的帧缓冲都留在 L2 中。帧缓冲按广义棋盘格划分给各光栅引擎,三角形发给所有拥有重叠瓦片的引擎,按瓦片解决提交顺序问题,负载更均衡。
- 其他:复制引擎可独立执行 CPU-GPU 间 DMA 传输;Tesla P100 为计算配置(HBM2、4096 位、720 GB/s、原生 FP16);1080 Ti 有 6 个 GPC,GTX 1070 为 1080 减一个 GPC,GTX 1050 为两个各含 3 个 SM 的 GPC——独立功能单元方便做产品系列。
AMD GCN Vega
- 计算单元 (CU):4 个 16 lane 的 SIMD 单元,每个执行 64 线程的 wavefront,一条指令需 4 个周期完成发射;每 CU 每周期 64 次单精度运算,FP16 吞吐翻倍(两个 FP16 打包进一个 32 位寄存器)。每 SIMD 64 kB 寄存器,即每线程 个寄存器;每个指令缓冲可容纳 10 个 wavefront,CU 共 40 个即 2560 线程。标量单元(64 位,标量寄存器每 SIMD 800 个,共 12.5 kB)处理控制流、指针运算等 warp 内共享计算,每 SIMD 一个 48 位共享程序计数器。
- 前端:图形命令处理器、2 个硬件调度器 (HWS)、8 个异步计算引擎 (ACE),加 DMA 引擎,可并行提交,不同队列的任务交错执行;ACE 可组成任务图互相依赖。建议把较小的计算和复制任务与较重的图形任务交错。
- Vega 10:4 条图形管线、4 个计算引擎,每个 16 CU,共 64 CU。图形管线含几何引擎(支持更灵活、更快剔除的图元着色器)和 DSBR(绘制流分箱光栅器):结合 sort-middle 与 sort-last 的优点,图元分配到瓦片,光栅化时瓦片数据留在 L2,像素着色可自动推迟到瓦片内全部几何处理完,相当于在底层做了 z-prepass、每像素只着色一次(透明几何需关闭)。
- CDB(颜色深度块):颜色、深度、模板读写与混合;增量压缩以瓦片中一个像素颜色为基准,瓦片大小按访问模式动态选择,256 字节瓦片最高 8:1;压缩的颜色缓冲作为纹理时由纹理单元解压。光栅器每周期最多 4 个图元,CDB 每周期写 16 像素,小于 16 像素的三角形降低效率;HiZ 缓冲 HTILE 可由开发者编程(如输入遮挡信息)。
- HBCC:让显存(HBM2)像末级缓存一样工作,未命中时自动经 PCIe 取系统内存页并换出较久未用的页;HBM2 与系统内存的共享池称 HBCC 内存段。所有图形块经 L2 访存,支持虚拟内存。片上模块通过一致的 Infinity Fabric 互连。
- 算力:。
| Mali G71 | Pascal GTX 1080 | Vega 10 | |
|---|---|---|---|
| 排序类型 | sort-middle | sort-last fragment + tiled caching | sort-last fragment + DSBR |
| 基本执行单位 | quad(4 线程) | warp(32 线程) | wavefront(64 线程) |
| 帧缓冲驻留 | 片上瓦片内存 | L2 | L2 |
| 典型峰值 | 能效优先 | 8.9 TFLOPS | 13.7 TFLOPS |
出处
- realtime_rendering_4ed.pdf 第 23 章 Graphics Hardware
相关页面
图形学并行图形架构与排序分类Parallel Graphics Architectures & Sort Taxonomy提升图形速度的最佳方式是并行:多个几何单元、光栅化单元和像素处理单元同时工作再合并结果。Amdahl 定律指出串行部分限制总加速比。由于 API 要求按提交顺序处理图元,并行单元之间必须在某处做"模型空间到屏幕空间"的排序,按排序位置分为 sort-first、sort-middle、sort-last fragment、sort-last image 四类,各有负载均衡与带宽取舍。本页还简述光线追踪硬件的共同特征。图形学GPU 计算调度与占用率GPU Compute Scheduling & OccupancyGPU 用大量统一的 ALU 以 SIMD/SIMT 方式锁步执行着色程序,ALU 与寄存器文件、L1、本地数据存储、纹理单元等组成多处理器 (MP),由硬件 warp 调度器零开销地切换 warp 以隐藏纹理和内存访问的长延迟。能同时驻留的 warp 数受寄存器等资源限制,用占用率衡量;占用率低会妨碍延迟隐藏,但过高也可能抖动缓存。本页还讨论像素按 quad 调度和 GPU→CPU 回读延迟。图形学GPU 内存、缓冲压缩与多重缓冲GPU Memory, Buffer Compression & Multiple Buffering带宽是稀缺资源。GPU 通过独立显存或统一内存架构 (UMA)、多级缓存与按瓦片存储提高局部性,并用基于瓦片表的无损压缩和快速清除减少渲染目标的带宽(注意:无损压缩只省带宽,不省内存)。颜色缓冲有高彩、真彩、深色三种模式;显示控制器以固定刷新率或 FreeSync/G-sync 自适应同步把颜色缓冲送到显示器;单/双/三缓冲在撕裂、等待与延迟之间取舍。图形学硬件深度剔除与纹理单元Hardware Depth Culling & Texture UnitsGPU 的深度管线先在瓦片级用 HiZ 单元做 zmax/zmin 粗剔除,再逐采样做 early-z 深度测试以免执行被遮挡片元的像素着色器,必要时退回到着色后的 late depth test;深度缓冲同样有瓦片压缩与快速清除。纹理单元以固定功能硬件完成寻址、过滤、钳位与解压(比软件快可达 40 倍),按 quad 有限差分求导数以选择 LOD,并依靠瓦片化/Morton 交织存储和纹理缓存提高局部性。图形学延迟着色Deferred Shading延迟着色先用一遍几何 pass 把所有可见表面的材质参数写入多张渲染目标(G-buffer),再以后处理方式对这些存储值逐光源计算光照,从而把"几何可见性"与"光照"彻底解耦,并把材质与光源分离。它避免了着色的过度绘制、简化了着色器管理、天然适合贴花,但 G-buffer 占用显存和带宽,且难以直接支持透明和 MSAA。本页也覆盖前向渲染下限制光源影响范围的基础手段与"光照预通道 (light prepass)"类混合方案。图形学抗锯齿Antialiasing渲染本质上是采样,采样频率不足就会混叠(锯齿、闪烁的"萤火虫"、车轮倒转)。屏幕空间抗锯齿在每个像素取多个样本并加权求和:超采样最直接但最贵,MSAA 每像素只着色一次,时间抗锯齿 (TAA) 把样本分散到多帧,形态学方法 (FXAA/SMAA) 作为后处理重建边缘。没有一种方法在所有方面最好。图形学曲面细分与几何着色器Tessellation & Geometry Shader曲面细分、几何着色器和流输出是顶点着色器之后的三个可选阶段。曲面细分把曲面描述按需生成合适数量的三角形;几何着色器能把图元变成别的图元,但效率不好、实际用得少;流输出把处理后的顶点写回内存以便复用。图形学VR 立体渲染优化VR Stereo Rendering OptimizationVR 每帧要为两只眼渲染,并经合成器做镜头畸变与色差校正。本页讲厂商 SDK/API 的帧流程与内建优化(分层合成、隐藏区域网格、裁剪过的畸变网格),立体渲染如何避免工作量翻倍(合并视锥剔除、实例化、多视图扩展、多 GPU 广播、远景单目渲染),以及利用光学和人眼特性减少外围像素着色的技术:多分辨率着色、镜头匹配着色、径向密度遮罩、固定注视点渲染与注视点渲染。图形学大场景渲染与虚拟纹理Large Scenes & Virtual Texturing当场景数据远大于内存(如主机只有 8 GB,而游戏世界有数百 GB)时,需要按需把数据流送进内存。本页讲三类技术:虚拟纹理(把巨大的 mipmap 链切成瓦片,只让可见瓦片驻留在显存,通过页表/间接纹理寻址)、纹理转码(磁盘上用高压缩比的可变码率格式,加载时转成 GPU 块压缩格式),以及按平面瓦片组织资产的通用流送。这些方法几乎总是与剔除和 LOD 配合使用;地形部分见 地形渲染。图形学纹理压缩Texture Compression固定码率纹理压缩由 GPU 实时解码:减少显存占用、增大有效缓存、降低访问带宽,也能在同样内存下用更大纹理。BC (DXTC) 系列是桌面标准,ETC/EAC、PVRTC、ASTC 用于移动平台。它们都是有损的,压缩慢、解压快;法线贴图需要专门处理。游戏开发 · UE5硬件光线追踪与路径追踪器Hardware Ray Tracing & Path TracerUE5 的硬件光线追踪 (HWRT) 大部分功能都集成在 Lumen 里;也有光追阴影等独立功能。Lumen 在显卡、RHI 和操作系统支持时使用 HWRT,否则回退到软件光追;反射光线可以用表面缓存(快)或命中点光照(质量高)来着色;实例超过 10 万时,HWRT 的场景更新开销很大。路径追踪器 (Path Tracer) 是渐进式、硬件加速的无偏渲染模式,用作 ground truth 参考和影视级最终输出,与 Sequencer/Movie Render Queue 集成。综合帧时间预算与渲染性能Frame Budget & Rendering Performance本页把 wiki 中分散在 RTR4 第 18~23 章的性能知识串成一条线:一帧的时间预算由最慢的管线阶段决定,先用毫秒帧时间度量并定位瓶颈,再按瓶颈所在位置——CPU/驱动、几何、像素、带宽/内存——选用对应手段;最后从 GPU 硬件机制(占用率、HiZ/early-z、压缩、分块架构)理解这些手段为何有效。各结论的细节与出处见所链接的概念页。