GPU 剖析

自动关联目录:GPU 剖析

1. 定位

GPU 剖析的目标是"定位到具体哪个 Pass"。到 Pass 之前的所有数字都只是线索,不是结论。

一句话定位:GPU 时间不可信的情况比你想的多(异步计算、CPU-bound、抓帧干扰),所以这一篇的第一节是"怎么得到可信的数字"。

2. 先拿到可信的数字

干扰处理
异步计算r.RDG.AsyncCompute 0(仅用于分析,发布版绝不能关,见 RDG 渲染图)
CPU-boundCPU-bound 时 stat gpu 不可靠,用 profilegpu 或平台工具
开着可视化关掉所有 Show > Visualize(见 渲染调试与抓帧)
抓帧工具拖慢固定帧率(DumpGPU 的 FixedTickRate)

3. 工具分层

层工具看什么
快速stat gpuGPU 各分类耗时
抓一帧profilegpu按 Pass 列出耗时
中间资源DumpGPU每个 RT 的内容(见 渲染调试与抓帧)
图形 API 级RenderDoc / PIX / AGI / Xcode最细,看实际调用
图结构RDG Insights并行区间、异步计算重叠

平台工具(详见 UE性能优化工具 的 GPU 章节):Adreno GPU、Mali GPU(G77 Counters)、Android GPU Inspector (AGI)、Metal GPU 等。

4. GPU 时间的常见归因

Pass 类别对应排查方向
Shadow Depths见 虚拟阴影贴图:页数与缓存作废
Shadow ProjectionVSM 篇:SMRT 采样数
LumenLumen:Final Gather / Scene 质量
NaniteNanite:簇与材质
TSRTSR:历史分辨率与 feed
BasePass材质指令数、draw call
Translucency半透明与排序:overdraw
PostProcessing后处理与体积:pass 数量与运行分辨率

先按 Pass 归类,再进对应特性篇——本分支只负责"定位到 Pass"。

5. 常见瓶颈与优先手段

瓶颈优先手段
填充率 / 带宽降分辨率、砍全屏 pass、降 RT 精度
材质指令数简化材质(Shader Complexity 视图)
overdrawQuad Overdraw 视图;减少大面积半透明
draw call实例化、合并、Nanite
三角形通常不是瓶颈,除非极端
阴影VSM 篇
时域超分TSR 篇

移动端的第一瓶颈几乎总是带宽(见 移动端渲染)。

6. 代价与权衡

手段收益代价注意
profilegpu精确到 Pass抓帧期间慢代表抓的那一帧
RenderDoc / PIX最细学习成本、抓帧慢开发机用
r.RDG.AsyncCompute 0计时可信不代表真实发布性能仅分析用
DumpGPU看中间资源数据量大用 Stream=1 与 Root 过滤
可视化视图直观有成本profile 前关掉

7. 踩坑与排查

坑现象怎么验证
信了 CPU-bound 时的 stat gpu归因错误用 profilegpu 或平台工具
没关异步计算计时忽高忽低r.RDG.AsyncCompute 0 再测
开着可视化测偏高关掉
只测一个视角结论片面固定多点位/回放
只看总 GPU 时间不知道改哪必须拆到 Pass
编辑器测与打包不同测打包版本
移动端在桌面工具上测结论不适用用 AGI / Xcode

8. 排查顺序

1. stat unit 确认 GPU 高
2. 关可视化 + r.RDG.AsyncCompute 0
3. profilegpu → 定位最贵 Pass
4. 按 Pass 类别进对应特性篇
5. 需要看中间资源 → DumpGPU
6. 需要 API 级 → RenderDoc / PIX / AGI
7. 改完复测(同点位、同画质档)

参考