PowerVR ‘Rogue’:为图形和GPU计算设计一个最优的架构

当我们设计PowerVR ‘Rogue’架构的时候,我们对所有的部件都进行了改造,并且针对效率进行了优化(在以后的文章中会对此进行更多的说明)。我们从GPU计算的角度做了更深入的思考,并为此做出了一些改进,在这篇文章中,我将要聚焦在PowerVR Series6 GPU设计中,与GPU计算改进相关的两个关键特性上。

PowerVR ‘Rogue’ GPU以标量ALU为主体,追求最高的计算资源利用率和易编程性

与以往GPU设计采用矢量引擎不同,PowerVR ‘Rogue’架构是围绕标量处理引擎来构建的。这种标量处理的架构有很多优点 – 最主要的是在软件开发上更容易实现最优化。这种易开发性一方面可以使编译团队从中获益(不需要在编译层次进行复杂的、高成本的矢量化操作),另一方面,开发人员的工作会变得更加容易,因为是否把他们的算法矢量化已经变得不再重要。下图描述了这个优点:

1

如图所示,标量架构并不关心算法是使用标量运算(R)、vec2 运算(RG)、vec3(RGB)还是完整 vec4(RGBA)来编写的,而矢量架构对此就非常敏感。对于基于矢量处理的架构,效率问题需要软件人员去考虑如何解决,而不是通过标量架构直接去处理。

对于图像处理算法的优化来说,这种架构上的效率是非常重要的。这是在移动领域中GPU计算最受欢迎和最合理的应用之一,许多算法在第一步不能处理色彩信息,而只能处理强度信息。这种算法在标量处理架构上是完全没有问题的。

但是,对于一个设计糟糕的矢量架构,开发人员需要面临25%的峰值性能或者需要花费很大代价去把整个算法矢量化,以便于一次性处理多个强度值(比如4个像素)

对于简单的算法来说,算法矢量化还是容易做到的,但是复杂的算法中通常是不同的矢量宽度混合在一起,这样矢量化就会变得非常复杂。通常情况下,开发人员都专注于最主流的架构的优化,根据目前的市场份额比例,象PowerVR ‘Rogue’这样的基于标量的架构,看起来极有可能成为移动市场的主流(考虑到在效率方面的改进,这并不会让人感到意外)。PC市场会进一步加强开发人员的这种关注度,因为它的计算架构也是采用了标量流水线,因此,算法从PC市场到移动市场进行移植,就不需要在标量方面再进行优化,而对于基于矢量的GPU设计来说,这是做不到的。

PowerVR ‘Rogue’ GPU改进支持本地存储器

计算API可以访问不同类型的存储器,因为实现上的不同,这些存储器的性能等级也会有所差异,通常被称为本地存储器(快速存储器)和全局存储器。

如果写算法的时候只使用全局存储器,你只需要象正常情况那样根据地址对数据进行读写,通过一个标准的cache结构去访问系统存储器。但如果使用本地存储器,可以重写算法,把数据预先加载到本地存储器中(一种片上cache),然后在计算处理过程中,算法访问的就是这个快速的本地存储器,并存储中间结果,算法执行完毕后,把最终结果通过总线突发方式(burst)写到系统存储器中。

显然,后一种方法看起来会有更大的带宽和更低的功耗,因为数据都被加载到本地存储器中,后面的所有存储器访问都是在片内完成的。而第一种方法看起来投机成本较高(任何cache的实现都取决于运气:如果你比较幸运,数据仍然还在cache里;如果你比较不走运,由于其它的数据访问,之前的数据已经被清理出去了,那么你就需要重新去取数)。

如果你还记得其它文章中介绍的Tile Based Deferred Rendering(TBDR)的工作方式,你可能会记得使用我们的分块排序,要保证cache能100%有效(见链接)。因此,Imagination采用高效快速的片内存储器来实现这个等效的概念就不足为奇了。

2

在PowerVR ‘Rogue’架构中,有许多跟计算使用场景相关的优化,当它们从第三方进入市场后,我们还要通过研究实际的移动计算使用案例,来使我们的架构更加高效和有效。

原文链接: http://blog.imgtec.com/powervr/powervr-rogue-designing-an-optimal-archit...

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