PVRIC:降低内存带宽

作者:Robin Britton

由于屏幕分辨率的提高以及越来越复杂的渲染管道,使得游戏和其他应用对于带宽的要求也越来越高,大量的数据需要从内存拷贝或者写入。现在用户普遍认为在无其他特殊情况下设备应该能够支持2K的屏幕分辨率,高端游戏则具有更大的几何复杂性,真正在屏幕上显示图像之前渲染管道通常要涉及多个中间渲染目标。即使一些休闲类游戏也可能具有一些全屏后的处理效果,需要帧缓存数据从片外存储器中读取和写入。内存访问是非常消耗功率的,占用带宽越大功耗则越高,这对于功率预算紧张的嵌入式系统尤其是个棘手的问题。

PowerVR GPU采用 PVR3C三重压缩技术来解决这个问题,这三重压缩解决方案包括纹理压缩(涉及PVRTC和ASTC)、几何压缩(PVRGC)和本文的主题图像压缩(PVRIC)。

PVRIC:降低内存带宽

PowerVR图片压缩(PVRIC)

如上文所说,在现代实时图形应用中内存带宽的最大压力之一就是生成高质量图像所需的大量中间渲染对象。一个明显的例子就是创建立方体环境贴图( cube maps),通常用于反射效果。这包括从一个不动点向六个方向渲染一个场景,最后结果会形成一个立方体的贴图纹理,然后对场景中的对象进行类似反射的采样。其他示例包括分辨率缩放、渲染小地图或其他场景视点、渲染平面反射贴图,更不用说无尽的屏幕空间和后期处理效果了,比如可分离模糊处理、 SSAO 景深效果以及色调映射等。

PVRIC:降低内存带宽

一个立方体贴图的六个面可用于汽车上的近似反射,在汽车的窗户上可以看到天空的倒影。

PVRIC通过高效、无损的压缩方案大大降低了内存带宽成本,这种压缩方案通常会使得图像大小减少50%(依赖于很多元素)。前文提到的目标渲染在写入GPU之前就进行了压缩,然后从内存中读取时会被解压,因为这种压缩是无损的,所以可以从解压数据中重构得到完美的原始图像,这也意味着图像的质量不会降低。

PVRIC:降低内存带宽

上图展示了与GPU的所有交互,但更有利的是这有可能会将PVRIC技术集成到SoC级别的显示管道中,使得最终的渲染图像在写入内存之前会进行压缩,然后在显示控制器中进行解压,这将更有效地节省总体带宽。

在许多移动游戏和App中,纹理资源通常都会采用众所周知的格式进行压缩,比如 ETC、PVRTC等,但是开发者会选择保留一部分未经压缩的纹理资源,比如字体或UI纹理,这些纹理在缩放时需要保持清晰和不失真。PVRIC方案的另一个好处是它允许将相同的无损压缩应用到任何未经压缩的纹理上,然后上传给GPU(如果纹理使用的是多种被支持的格式之一),根据不同的应用,这可能会带来更大幅度的带宽减少。

应用带宽分析

我们在Synaptics BG5CT板卡(集成 PowerVR Series8XE GE8310 GPU,它采用了最新一代的PVRIC技术——PVRICv3)上运行API trace测试了多款流行的应用,我们看到了这种压缩方案所带来的性能提升,尤其是带宽消耗的显著降低。

下面的视频展示了不同应用的实时分析效果,并提供了实时带宽占用情况:

下面的表格展示了不同应用的测试结果,需要注意的是,在这款器件上PVRIC并没有集成到SoC的显示管道中,如果集成了那么我们将会看到最后的帧缓存图像会有更好的压缩效果,正如前文所述。因为我们使用的是安卓平台,帧缓存压缩会应用到最终的渲染操作,Android SurfaceFlinger会将这些压缩帧写入内存,读取到GPU中。如果是这样,那么SoC显示管道也将受益于SurfaceFlinger的最终合成结果。

PVRIC:降低内存带宽

那么这些结果到底意味着什么?这些数字可能有点儿误导人。我们可以清楚的看到所有应用占用的总带宽都有所减少,但有些应用比其他应用带宽的降低程度要大得多,正如上文所提到的PVRIC技术涵盖了纹理的渲染和解压缩,但这只是总带宽的一部分,几何图形、着色器等等也会占用一定的带宽,但是它们并不会受PVRIC操作的影响,所以对于整体带宽的占用情况我们能做的只是降低,虽然系统范围内的数据保持在较高的水平,但是我们想隔离受PVRIC影响的相关带宽参数,借助我们的内部分析工具可以让我们更精确的完成这些操作(虽然我们不能消除一切——比如纹理压缩)。

在这里,我们隔离的只是GPU在执行渲染操作时占用的带宽,而忽略了贴图操作所需要的几何处理。为了简化这一过程,测试平台上已经禁止了这些任务的重复。我们还能够识别和忽略其他进程的任务,现在我们需要分析为什么有些app会那样运行,这需要我们了解app是如何在图形API层工作的,不妨深入了解一下PVRTrace

《minecraft》(《我的世界》)

PVRIC:降低内存带宽

我们使用PVRTrace对Minecraft这款应用进行分析,我们发现总体带宽节省率比较低(大约2.42%),但是隔离图片/纹理带宽方面显示带宽节省率则更高(大约17.76%)。Minecraft采用的是完全未压缩的纹理技术,因此PVRIC的效果比较显著,尽管这与典型场景中几何图形的数量(大约13万4千个三角形)相比非常的少,更不用说很多纹理的尺寸非常的小,PVRIC只是完成了它所能实现的,但是对于Minecraft并没有太多的事情可以做。请记住:通过集成到显示管道中,我们可以看到发送给显示控制器的帧缓存更好的优化效果。

《愤怒的小鸟 2》

PVRIC:降低内存带宽

在愤怒的小鸟 2这款应用中,几何图形(1万6千个三角形)和纹理内容各自占用的带宽比例则更协调一些,因此我们能够更加清晰的看到PVRIC所带来的好处,系统整体带宽节省43%,隔离带宽节省56%。这款游戏既采用了压缩的纹理格式也采用了一些未压缩的纹理格式,因此PVRIC非常起作用。此外,整个场景在进行最终的展示之前会采用渲染中间件的形式(很多应用都使用这种技术来处理分辨率缩放或后续处理操作),这两种因素的结合对于PVRIC技术是很好的展示。

《真实赛车 3》

PVRIC:降低内存带宽

真实赛车3是另一款使用大量几何图形(测试时显示16万个三角形)的应用,而且纹理/曲面也占用了相当一部分的带宽。纹理压缩技术(PowerVR的PVRTC技术)在这款应用中被广泛采用,这非常棒,但是还有很多未压缩的纹理需要借助PVRIC技术来处理,此外还涉及一组512 x 512的立方体环境贴图和全屏幕纹理渲染。最后的百分比可能不太明显,但是这很好的展示了PVRIC与PVRTC相结合所带来的好处,PVRTC可用于处理大部分的纹理,PVRIC则用于处理其他内容。

从这些工作负载中可以看出,无论图像数据是否占用应用程序的大部分带宽,采用PVRIC技术后都会带来显著的影响,在很大程度上减少了图像占用的带宽。

功耗分析

为了能够更清楚的了解PVRIC技术和降低带宽对于功耗的影响,我们修改了平台,使其支持功耗分析并连接了数据采集设备从而可以收集一些功耗数据,下面的图表就是我们的发现:

PVRIC:降低内存带宽

在愤怒的小鸟2同一段5秒的运行过程中,我们发现:使用PVRIC时内存的功耗会更低一些,采用两组数据之间的差值并进行平滑处理,我们发现内存功耗降低了18%。这个效果非常的显著,对于采用电池驱动的设备比如移动手机可以在充电之前使用更长的时间,当然对于功耗和电池寿命的影响还有很多其他因素,而且不同设备之间也会有所差别。

PVRIC:降低内存带宽

总结

总而言之,PVRIC技术是PVR3C压缩策略关键的组成部分,对于使用的带宽来说其压缩比可高达(有时甚至超过)2:1。这会对设备存储器的功耗产生实质性的影响,通过对我们纹理和几何压缩方案的测试,很明显可以得出PVR3C是全面的带宽效率方案,能够从整体上提高系统的效率,从而让我们能够实现更加全面的低功耗解决方案。

原文链接:https://www.imgtec.com/blog/reducing-bandwidth-pvric/

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

最新文章