PowerVR PerfDoC——PowerVR性能验证

作者:TOM LEWIS

为了让大家在开发基于PowerVR平台应用时更加的轻松,现在将和大家分享一些令人兴奋的消息!

近期我们发布了PVRPerDoc的面向Vulkan验证层的定制版本PerfDoC,对于使用PowerVR硬件的开发人员来说更有用,如果你想了解这些,大家可以到GitHub上查看PVRPerfDoc的完整资料。

https://github.com/powervr-graphics/perfdoc

PerfDoc是什么?

PerfDoc是我们在ARM的朋友开发的Vulkan验证层,验证层是Vulkan API的重要组成部分,与OpenGL ES和之前的API相比,Vulkan API的CPU开销要低得多。Vulkan内置的错误检查非常少,相反开发人员可以选择启用验证层,比如LunarG验证层,它将在应用程序运行时检查API是否被正确使用。

那么PerfDoc与其他验证层有什么不同呢?除了检查Vulkan是否被正常使用(与Vulkan规范一致),它还关注API是否被有效使用。当Vulkan应用程序在PerfDoc层处于活跃状态时,任何错误都将作为回调报告给应用程序或者通过控制台输出,这意味着API的使用效率低,比如创建一个没有缓存的管道,或者使用太多实例化的顶点缓冲区,都可以在开发过程中被捕获和修复。解决PerfDoc检测出的问题可以提高应用程序的性能,并且充分利用Vulkan API。

不幸的是,由于PerfDoc根据ARM对Mali的性能建议验证API的使用,因此其中一些建议实际上可能会影响PowerVR硬件的性能。

这就是我们今天要谈的重点: 我们已经通过自己的PowerVR硬件性能建议来验证API的使用情况。

我们做了些什么?

我们以两种方式为PowerVR定制了PerfDoc:

1. 我们已经使所有的标准检查都可以切换,因此你可以选择应用程序将根据哪些原始性能建议进行检查。默认情况下我们会启用这些检查,它们告诉你如何提升PowerVR性能。

2. 接下来我们添加了许多基于自己PowerVR性能的额外建议,这些建议是由我们经验丰富的开发工程师团队开发制定的,目的是让大家能够在PowerVR设备上运行更多的应用程序。

无论你是Vulkan新手还是富有经验的开发人员,我们制定的方法是确保大家在使用Vulkan开发PowerVR应用时始终都能够优化性能的好方法。

这篇文章的剩余部分我们将给大家介绍这个新的定制层所需要的性能建议,这将帮助大家了解如何更高效的开发应用程序。

记得使用mipmapped和压缩纹理

使用压缩纹理(比如PVRTC、ASTC和ETC2)和mipmapping可以帮助减少内存带宽的压力,因为加载的纹理资源会更小,内存带宽问题是图形密集型应用程序的常见瓶颈,因此在任何应用程序中减少带宽的使用通常都会带来良好的性能提升。


当纹理使用未压缩格式或在其相关的图像视图中没有任何指定的mipmaps级别时,该验证层会输出一个错误,但当图像视图是一个渲染目标时则例外。

获取mipmapped和压缩的纹理资源的一个简单方法是借助我们开发的纹理处理工具:PVRTexTool。这个强大的工具允许纹理编码成各种压缩和未压缩的格式,包括PVRTC、ASTC等,你还可以通过单击生成完整的mipmap链。

当调用涉及大量几何图形时尝试采用索引绘制调用

索引绘制调用可以通过消除顶点缓冲区中的冗余顶点来帮助减少几何图形的数量,PowerVR GPU也针对索引绘制调用进行了优化,这意味着你可以真正注意到复杂几何场景渲染的差异.

如果你真的想进一步提升性能,你也可以对索引和顶点缓冲区进行排序,这将提升缓存效率,PVRGeoPOD是我们开发的场景导出和优化工具,可以自动化完成这些操作.

确保尽可能多的使用帧缓存压缩

PowerVR GPU采用PowerVR图像压缩(PVRIC)技术,这是Imagination公司专有的无损帧缓冲区压缩和解压缩(FBCDC)算法,这种压缩方案通过将图像大小缩小约50%来帮助减少对内存带宽的需求,该验证层将确定如何使用帧缓存压缩。


当创建subpass时尝试采用优化的subpass依赖标志

该验证层可以检查在subpass的过程中设置subpass的依赖项标志,如果选择的标志对于PowerVR架构来说不是最优的,则输出错误。对于PowerVR和其他基于贴片的架构,VK_DEPENDENCY_BY_REGION_BIT是性能的最佳标志,因为整个分片可以保存在执行速度快的片上内存中。

避免对帧缓存进行部分清除

该验证层可以检测到清除整个帧缓存Clear命令,部分清除通常会影响性能,因为它们会导致带宽透支。

启用管道优化

在Vulkan中创建管道时,可以将flags参数设置为VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,这一设定使得所创建的管道不会被优化,以有助于减少管道创建时间,但是它应该只在调试或开发人员构建中设置,而不是发布时构建,否则会对整体性能造成损害。

尽可能将多个渲染通道分割成子通道(subpass)

如果你还习惯使用Vulkan图形库,那么就会很容易忘记subpass。在Vulkan中渲染通道可以被划分为不同的渲染阶段,称为子通道(subpass)。每个子通道都有自己指定的依赖项。这允许驱动程序执行各种优化操作,因为它确切的知道你要做哪些操作。当多个渲染通道被设置为作用于同一个渲染目标时,这个验证层可以检测到并发出警告。在这些情况下,最好将这些渲染通道集成为一个渲染通道的多个子通道。

我们还有更多...

我们已经增加了15项新的检查,包括:
 检查纹理是否使用线性或最佳平铺布局
 确保PowerVR工作组大小是最佳的
 建议纹理格式
 以及更多…..

那么...你还在等什么呢?

大家可以在GitHub上查看PVRPerfDoc的相关资料,这是我们正式发布的PVRPerfDoc v1.0版本的下载链接

我们希望听到关于这个软件或其他我们开发的工具的反馈信息

想了解关于开发技术信息,大家可以关注推特@tom_devtech.

如果大家需要帮助可以在我们的论坛(https://forums.imgtec.com/)或者社区(https://pvrsupport.imgtec.com/)留言反馈。

原文链接:https://www.imgtec.com/blog/powervr-perfdoc-performance-validation-for-p...

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

最新文章