1.2.以Mali GPU为例解读GPU指标
1.2.1 Mail GPU performance counters
Job:=GPU实际执行的单位,存在两种类型:
Non-fragment job:vertex shading,tiling,compute shading
Fragment job:fragment shading
Job manager有两个job slots:可以同时处理non-fragment & fragment job
GPU active即GPU time。
GPU performence指标解读:
下图为Mali-G77 perf.counter
Fragment Front-end
当Primitive rasterize后,会产生许多以2*2fragment为单位的Quads。
shader内dFdx,dFdy的计算便是依赖quad的结构。
partial quad:=该quad有人一个fragment不在primitive内部。在符合某些条件下(no discard:alpha to coverage,no depth write in shader,no blending)。
FPK(mali架构特有):Forward Pixel Kill
在render opaque fragments的情况下,当quad在FPK buffer排队等待进入Execution core执行时,会再根据新进quad的ZS状态剔除前面排队的quad。(类似于HSR,即不透明绘制时绘制最后进入quad的内容。)
接着每4个quads(数量依架构不同),会在组成一个warp,排进queque等待执行。此时一个warp内有16个单元会进行平行运算,概念上可视为16 threads,每个thread在同一时间是执行一样的指令,但是处理的资料会不同。
在执行fragment shader时,每个thread对应一个fragment,且同一warp内的fragments不一定都来自于同一个primitive,在执行vertex shader时,每个thread则是对应于一个vertex。
Warp的排程与执行:
假设
1.我们一次只能执行一个instruction stream
2.根据shader registers的用量,目前只能分配给4 active warps使用,
若shader使用过多registers,能同时执行的thread数量会降低,active warps数量会降低,遇到stall时,可替换的选择性变少,hide latency能力降低
(若Mail-G77shader使用超过32registers,thread数量会从1024降成512(64to32warps)。
Execution core:
1.2.2 Fragment指标
1.2.3 Tiling指标
Tiler culling的单位是Primitive
Facing test culling在一般3D rendering大约会在50%。
Micro geotmetry problem:sample_test_culled rate 超过10%
当primitive在image Plane所投影之范围未包含任何一个Pixel sample时,会遭到剔除。
当此问题发生时,建议制作geometry LOD 或是CPU software object culling。
注意:请留意每个pipeline stage处理单位:Tiler culling:primitive;Early-ZS culling:quad;Execution core:warp
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理