[引擎开发]深入GPU和渲染优化(基础篇)

[引擎开发]深⼊GPU和渲染优化(基础篇)
GPU/渲染优化是引擎开发中⾮常重要的⼀个环节,实际上在⼯程中做任何渲染相关的内容,都需要考虑到背后的原理和性能。另⼀⽅⾯,GPU/渲染优化是⼀个⾮常宽泛的课题,它不仅涉及到针对底层GPU的架构做出的相关优化,图形API的设计和使⽤的优化,也会涉及到CPU中渲染数据准备的优化,或者shader编写的优化等多⽅⾯的内容。
[本⽂⼤纲]
基础概念
GPU架构概述
带宽
ALU
SIMD
流程控制
像素填充率
IMR架构
TBR/TDBR架构
现代图形API与硬件
⼯作提交和命令队列
命令队列类型
命令队列同步
命令队列内存管理
命令队列调⽤
资源创建和显存管理
纹理/buffer资源
PSO/状态量资源
资源的绑定
资源的同步
显存管理
带宽优化
影响带宽的操作
架构与带宽
纹理优化
纹理占⽤
纹理mipmap
纹理过滤
纹理采样和绑定
纹理与Buffer
Drawcall优化
减少绘制物体的数量
视锥体剔除
⼩物件视距剔除
发泡技术遮挡剔除
pass合并
合并drawcall
批处理
实例化
远景代理
合并和简化⽹格体
公告牌/烘焙
多线程⽣成drawcall
GPUDriven
Overdraw优化
不透明物体的overdraw
Alpha Test的overdraw
Alpha Test的overdraw
Alpha Blend的overdraw
LOD设置
quad overdraw
prepass
Shader优化
ALU
分⽀
寄存器
基础概念
GPU架构概述
GPU,全称为Graphics Processing Unit,即图形处理单元。
GPU主要包含控制模块,计算模块和输出模块。
渲染输出单元,纹理映射单元和着⾊器处理单元/ 流处理器
计算模块
计算模块由通⽤计算单元组成,即GPGPU,它适⽤于所有shader类型。透视望远镜
TPC
通⽤计算单元中,最核⼼的计算模块,称为Texture Process Cluster(TPC),它负责:        (1)纹理采样
(2)顶点插值,顶点剔除
(3)shader载⼊
(4)shader计算
图元引擎(Primitive Engine, PE)
在渲染管线中负责顶点数据读取,三⾓形剔除等操作。
流(多)处理器(Streaming Multi-processor, SM)
TPC中最核⼼的部件。
包含独⽴的Cache,Register,线程资源调度器,浮点运算核⼼,读写单元等。
流处理器(Streaming-Processor,SP)
SM由多个SP和其它资源组成。
Warp
每个SP分为多个warp,它是流处理器调度的基础模块。
通常来说,warp可能包含32个thread,它们将并⾏运⾏。
每个thread有⾃⼰的寄存器和本地内存。
On Chip Memory
⽚上存储器。是访问速度极快,尺⼨极⼩的存储器。
纹理映射单元(Texture Mapping Unit,TMP)
着⾊器的⼀部分,能执⾏纹理采样。
渲染输出单元(Render Ouput Unit, ROP)
渲染流⽔线的最后⼀步,它将处理抗锯齿,并执⾏读取/写⼊缓冲区的操作。
SoC(System on Chip)
移动端将CPU,GPU,内存,显存,GPS等整合在⼀个芯⽚上的解决⽅案。
带宽
带宽是衡量显卡性能的⼀个重要指标,它反映了显存数据传输的能⼒(IO)
显存位宽:显存在⼀个时钟周期传输数据的位数;
显存频率:显存的速度,为时钟周期的倒数;
显存带宽:显存频率 * 显存位宽 / 8,单位为字节每秒;
如果把数据读取传输看作⽔管传输的话,位宽代表了⽔管的半径,频率则反映了⽔流的速度,带宽即单位时间内能够传输的⽔量;位宽越⼤,频率越⾼,则带宽越⼤,传输数据的能⼒越强。
数据的频繁传输⾮常耗电,因此我们认为带宽是影响⼿机发热的重要因素之⼀。
ALU
即Arithmetic logic unit,算术逻辑单元,它是多类型计算电路的基本部件,计算电路包括中央处理单元(CPU)、浮点处理单元(FPU)和图形处理单元(GPU)等。
通常⽽⾔,我们会在shader计算中涉及到算术指令,如按位运算/关系运算/浮点运算等。它是衡量shader复杂度的重要指标之⼀。SIMD
SIMD,即Single Instruction Multiple Data,⽤⼀个指令并⾏地对多个数据进⾏运算。和CPU⼀样,GPU同样有对应的SIMD。
shader中⼤量会涉及到向量和矩阵的运算,SIMD的硬件设计有利于加速GPU计算。
显存
快速水分测定GPU上内存称为显存,它的设计和CPU⽐较相似,都为多级缓存机制,包含register,L1/L2 Cache和DRAM等多个模块。因此,在GPU开发时,也需要考虑缓存命中的问题。
和CPU不同的地⽅在于:
① GPU的寄存器数量远多于CPU
② warp内部的thread有⾃⼰独⽴的寄存器和Local Memory
③ SM中有独⽴的⽤于贴图缓存的L1 Cache,⽤于shader指令缓存的L1 Cache,作为内部线程间Shared Memory的L1 Cache等
④ SM有独⽴的常量区内存,⽤于存储constant buffer和texture等shader资源
⑤ 有全局空间的显存
⑥ SM的L2缓存是公⽤的
在硬件设计上,PC端的显存为GPU独⽴的可直接访问的内存,⽽Mobile上CPU/GPU使⽤的内存处于同⼀物理内存上,GPU仅有逻辑上独⽴的内存区间,由GPU控制管理。
在内存分配上,显存需要直接操作内存,并且访问内存时也要求内存对齐。
在内存管理上,CPU有缺页中断等机制,但GPU不⽀持页错误。
流程控制(flow-control)
流程控制,通俗⽽⾔,就是计算过程中遇到的分⽀(if)。相⽐CPU,GPU具有较弱的流程控制能⼒。iccn
对于CPU⽽⾔,它具有分⽀预测的功能,会根据原先的分⽀结果预测下⼀次分⽀⾛向,只有预测错误才会产⽣额外开销。
⽽对于GPU⽽⾔,它的流程控制基于active mask技术。假设warp中包含32个thread,GPU将使⽤⼀个bit mask判断32个thread 的分⽀状态,对应位为1代表需要执⾏对应的分⽀。warp执⾏分⽀时,将先执⾏所有true(或false)的分⽀,等所有分⽀执⾏完成后,再执⾏所有false(或true)的分⽀,整体执⾏时间为两者之和。这⼀过程将打断warp的并⾏化。
active mask技术
因此,我们应该尽可能避免流程控制。
像素填充率(pixel fillrate)
图形处理单元在每秒内渲染的像素数量。它也是衡量显卡性能的指标之⼀。回收钽电容
在实际计算中,分辨率、Overdraw次数、Shader计算复杂度和Fill Rate成正⽐。
IMR架构
IMR,即Immediate Mode Rendering,是常⽤于PC端的渲染管线。它的架构设计⽐较简单清晰,整个管线是连续执⾏的,执⾏完上⼀个任务后,将⽴刻执⾏下⼀个任务,⽆需相互等待。
20kv高压直流电源当接收到⼀个绘制指令后,这⼀绘制会⽴即开始执⾏,并且将依次顺序经过如下步骤:
(1)顶点处理(Vertex Processing):从内存读取顶点索引,并根据索引查相关顶点缓冲区,加载顶点数据。顶点着⾊器加载到SM中并执⾏。
(2)裁剪和剔除(Clip & Cull):在这⼀过程中,PE将剔除裁剪空间(clip space)外的三⾓形,并且进⾏背⾯剔除操作。
(3)光栅化(Raster):执⾏光栅化,从⼏何转化为像素,像素打包成warp,重新流⼊SM,并根据重⼼坐标插值顶点属性。
(4)提前可见性测试(Early Visibility Test):对于没有Alpha Test的像素,由ZROP执⾏early-Z test,通过后进⼊下⼀环节。
(5)纹理和着⾊(Texture & Shade):执⾏像素着⾊器。
(6)Alpha测试(Alpha Test)
(7)可见性测试(Late Visibility Test):对于有Alpha Test的像素,由ZROP执⾏late-Z test,并根据结果决定是否更新帧缓冲的颜⾊和深度。
(8)Alpha混合(Alpha Blend):对于通过测试的像素,CROP根据blend计算并更新颜⾊缓冲区。
TBR/TDBR架构
TBR,即Tile-Based Rendering;TDBR,即Tile-Deferred-Based Rendering,是常⽤于移动端的渲染管线。它的核⼼思想是牺牲执⾏效率,优化带宽消耗,以更好地适配移动端硬件。
不连续的TBR/TBDR
如前⽂所提,对于IMR⽽⾔,管线是连续执⾏的。⽽对于TBR/TBDR⽽⾔,它的整个过程是不连续的,这⼀不连续具体体现在:
(1)提交drawcall阶段。得到绘制指令后,不会⽴即开始绘制操作,⽽是将所有绘制指令缓存起来,到最后才进⾏绘制;
(2)顶点着⾊阶段。对所有绘制指令执⾏vs,并将绘制结果保存起来;

本文发布于:2024-09-22 04:05:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/250631.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:计算   显存   顶点   内存
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议