图形学 · GraphicsNote
GPU 执行模型、同步与性能门禁
GPU Execution, Synchronization & Performance Gates
GPU 程序由线程组/波前或 warp 执行,受寄存器、共享内存、带宽、延迟和依赖关系共同约束;同步则定义资源访问的可见性与先后关系。性能门禁的目标不是让每次构建都跑完整 profiling,而是用稳定、分层的证据尽早发现帧时间、内存和功耗回归。
执行与同步模型
GPU 通常以线程组为调度单位,分支发散、寄存器压力和共享内存占用会限制并发驻留;占用率高也不等于性能好,带宽受限、缓存未命中或同步气泡仍可能成为瓶颈。
资源同步至少需要明确:
- 执行依赖:哪个命令必须先完成。
- 内存可见性:写入何时对后续读取可见。
- 资源状态/布局:渲染目标、纹理、缓冲区当前用途。
- 队列所有权:图形、计算、复制队列之间如何交接。
D3D12 fence、Vulkan synchronization primitives 和引擎抽象都应服务于这些语义。过度同步会降低并行度;缺失同步则产生非确定性画面或设备错误。
应用:分层性能门禁
flowchart TD
C["提交"] --> Q["快速包体/编译/Smoke"]
Q --> M["固定场景帧时间与内存采样"]
M --> T{"超阈值?"}
T -->|"否"| N["夜间多设备矩阵"]
T -->|"是"| B["阻断并附带基线/差异"]
N --> R["趋势报告"]
R --> B2{"持续回归?"}
B2 -->|"是"| B
B2 -->|"否"| D["发布候选"]建议门禁指标:P50/P95 帧时间、GPU/CPU 帧时间、峰值显存、加载时长、shader 编译时间、包体大小和功耗。每个指标必须固定场景、分辨率、画质、驱动/设备、预热方式和采样窗口;否则阈值不可比较。
阈值与诊断
- 快速门禁只做少量稳定场景,目标是发现明显回归。
- 夜间门禁覆盖代表性设备和长时间运行,观察温控、泄漏和碎片化。
- 报告同时保留原始采样、基线版本、提交哈希和环境信息。
- 阈值触发后回到 RenderDoc/Nsight/PIX 等工具做根因定位;门禁页不替代工具使用页。
- 对有噪声的指标使用分位数、置信区间或连续多次触发,避免单次抖动阻断。
取舍与常见坑
- 只盯 GPU 占用率:占用率不是帧时间,必须结合队列、带宽、同步和关键 pass。
- 在开发机设硬阈值:硬件、驱动和温度变化会造成误报;固定设备池或分层基线。
- 把 profiling 全塞进每次提交:反馈过慢;快速门禁与深度分析分层。
- 用平均值掩盖长尾:P95/P99 和最坏场景更接近玩家体验。
- 忽视同步正确性:性能优化前先保证资源依赖正确,避免“更快地显示错误”。
出处 · Sources
相关页面
图形学GPU 计算调度与占用率GPU Compute Scheduling & OccupancyGPU 用大量统一的 ALU 以 SIMD/SIMT 方式锁步执行着色程序,ALU 与寄存器文件、L1、本地数据存储、纹理单元等组成多处理器 (MP),由硬件 warp 调度器零开销地切换 warp 以隐藏纹理和内存访问的长延迟。能同时驻留的 warp 数受寄存器等资源限制,用占用率衡量;占用率低会妨碍延迟隐藏,但过高也可能抖动缓存。本页还讨论像素按 quad 调度和 GPU→CPU 回读延迟。图形学渲染瓶颈定位与性能度量Bottleneck Location & Performance Measurement渲染管线中最慢的阶段(瓶颈)决定整体吞吐量。优化就是"找到瓶颈 → 优化到瓶颈转移 → 重复",并让非瓶颈阶段做到与瓶颈同样多的工作以换取画质。定位靠逐阶段增减负载的实验和性能工具;度量要用毫秒帧时间而不是 FPS。两条箴言:了解你的架构 (KNOW YOUR ARCHITECTURE);测量、测量、再测量。游戏开发跨引擎 CI-CD 与自动构建Cross-Engine CI-CD & Automated Builds跨引擎 CI/CD 的核心不是把编辑器搬到服务器,而是把源码、配置、依赖、测试和构建产物变成可追踪、可重复、可回滚的流水线。引擎差异应被封装在构建适配层,上层统一执行质量门禁。图形学GPU 内存、缓冲压缩与多重缓冲GPU Memory, Buffer Compression & Multiple Buffering带宽是稀缺资源。GPU 通过独立显存或统一内存架构 (UMA)、多级缓存与按瓦片存储提高局部性,并用基于瓦片表的无损压缩和快速清除减少渲染目标的带宽(注意:无损压缩只省带宽,不省内存)。颜色缓冲有高彩、真彩、深色三种模式;显示控制器以固定刷新率或 FreeSync/G-sync 自适应同步把颜色缓冲送到显示器;单/双/三缓冲在撕裂、等待与延迟之间取舍。