高级性能分析:使用PVRTune 的Fantasy Warrior 3D

在上一篇文章中,我阐述了如何使用PVRTune GPU性能记录工具中的时间数据和高级计数器识别Fantasy Warrior 3D演示在基于PowerVR的目标设备上运行时是否受CPU限制。

本文中,我将描述一些PVRTune的高级分析计数器,并阐述如何使用这些计数器更好地分析GPU工作负载。

每三角形的顶点值

每个三角形的顶点数都有一个平均值。输入的顶点数量除以输入的三角形数量便是这个平均值。此计数器显示了已转化的顶点如何在三角形中实现共享。

这个值在最大值3(表明没有共享且每个三角形每顶点都有一个索引)及数值接近或低于1中进行变化。数值越低,则待处理的几何图形最优。

如果对几何数据进行合理分类,便可以提高顶点处理的效率。一般要遵循的原则是:指数缓冲区中领近三角形之间共享的顶点数越多,每个三角形顶点值则越低。

在这款游戏中,每三角形顶点值是1.5,则意味着比理想值(每三角形顶点值< = 1)略高。为获得最佳性能,三角形应按空间位置来分类,以提高转化后顶点的缓存效率。

可以使用Imagination的三角形分类算法来优化网格。最新发布的PowerVR图形SDK v4.0中包含了此分类算法(可查阅PVRTGeometry.h文件)。

三角形剔除

这个值表示数据写入参数缓冲区之前经剔除后转化的三角形百分比。这些剔除的三角形包括子像素、背面和离屏多边形。

在这款游戏中,该值(80.2%)非常高。这意味着GPU已经浪费了很多时间处理被贴图排斥的多边形(GPU –贴图负载)。可以使用PVRTrace决定是否存在很多离屏多边形或者背面剔除是否总是失效。

HSR效率

该计数器可以展示隐面消除(HSR)的有效性 (更多关于HSR的信息点击此处),其在处理之前排除了模糊的像素。这可表示用来着色的像素与提交总像素的百分比。

任何被不透明的多边形阻挡且任何不可见的像素在早期都是被排除的。这样可避免不可见像素的处理和纹理加工成本过高,最大化地优化了性能并节省了内存带宽。

该款游戏中的HSR效率(21.0%)有点偏低。可以使用PVRTrace检查是否场景中有太多混合对象或是否所有不透明绘图出现在透明绘图之前。

ISP过载

图像合成处理器(ISP)是PowerVR GPU的一部分,并在深度和模板测试中获取原始数据并进行隐面消除 (HSR)。该计数器可以展示是否此单元已成为一个瓶颈。

此款游戏的ISP计数器呈现的值高达75.6%。ISP过载事件非常罕见,只有当一个或多个贴图必须处理大量重叠的多边形(如高透支)时才会发生。可以使用PVRTrace发现场景中是否有高透支现象。

Z加载/存储

对于大多数的渲染,深度和模板缓冲区仅包含必须完成相关渲染的临时数据。在PowerVR GPU架构中,片上深度和模板缓冲区则用于存储这些数据。当利用适当的API机制时,应用程序不会从片上缓冲区中上传或编辑数据。这使应用程序可以避免临时的缓冲区进行冗余系统内存传输。

Z加载/存储事件表明,已经对GPU中的深度/模板数据进行上传或处理。除非一个给定的应用程序需要保持深度或模板信息,应用程序应该使用适当的API机制来避免这些成本颇高的数据传输操作。

数值在0%以上表示发生了Z加载/存储。为避免这些操作,应确保不需要保存的深度和模板缓冲区在每个渲染开始时就已被清除,且在渲染结束后便已无效。

纹理加载

该计数器可以表示相比其峰值吞吐量,纹理单元的平均负荷值。

高数值(如超过50%)则表明纹理单元花费了大量的时间从系统内存中获取纹理的数据和/或执行线性插值滤波操作。

当负载很高时,应使用以下计数器获得更多的参考信息:

纹理过载(%):如果纹理负载高,则可能出现纹理过载。这将降低活动槽的占用率,进而降低着色器处理因数据关联性引起的隐藏延迟的能力。

这款游戏中的纹理负载是80.6%——这个数值非常高。这可能是由于高透支或场景中有太多混合对象导致的。纹理过载计数器应该帮助我们缩小瓶颈。

纹理过载

纹理过载时计数器会加以显示。每次纹理过载都表明,纹理样本请求队列已满,如着色处理单元提交需求的速度比纹理单元处理的速度要快得多。

该款游戏纹理过载值高达11.3%,因为像素着色器不能隐藏纹理获取需求的延迟。我们可以使用PVRTrace调查更多信息和纹理预热来改善纹理提取操作。也可以使用PVR着色编辑器来优化像素着色,以减少相关纹理的读取。

总结

该款游戏是一个典型的CPU受限案例。但我们也可以发现以下问题:

需要应用三角形顶点分类来提高每三角形顶点数的比例。

需要检查是否有很多离屏多边形或背面剔除失效的情况。

需要检查是否有很多透明的物体或在绘制遮挡物之前就已绘制了透明对象。

需要减少透支及优化纹理的使用。

需要优化着色器代码。

这些措施可以在我们解决渲染线程问题后进一步改善游戏的性能。在下一篇文章,我将阐述如何使用PVRTrace来隔离无效的OpenGL ES API调用,并展示上述改进措施的源代码。

原文链接:
http://blog.imgtec.com/powervr/advanced-performance-analysis-fantasy-war...

声明:
本文为原创文章,转载需注明作者、出处及原文链接,否则,本网站将保留追究其法律责任的权利

--电子创新网--
粤ICP备12070055号