Android系统中的PowerVR成像框架

在我先前所攥写有关异构结构的文章中,我将内存带宽界定为实现低功耗计算机视觉算法的主要瓶颈。

所幸的是,Imagination创建了一个较为新颖的解决方案,用于解决移动和嵌入式设备中出现的此类问题——其方式为PowerVR成像框架。

PowerVR成像框架介绍

用于Android系统的PowerVR成像框架由一组扩展的OpenCL和EGL应用程序编程接口(API)组成,这样可以使在PowerVR GPU上运行的软件与其它部件如CPU、ISP和VDE保持有效的互操作性。这些扩展使共享内存分配和软件管道得以跨多个硬件组件,且没有冗余的内存拷贝(即零拷贝)。

此外,有了这些扩展,YUV图像可以直接操作,这是很多计算机视觉算法所需要的;当数据从内存读入硬件寄存器,YUV图像也可以由GPU进行本地读取,并转换为RGB实时动态数据,这样可避免带宽成本,否则在格式转换时,还必须首先复制内存中RGB格式的图像。

下图展示了Android系统中图像处理软件流水的前端,其在ISP和GPU中实现了零拷贝流。ISP要求获得图像传感数据的预处理,并将其写入系统内存中的Android Gralloc(图形分配)缓冲区。在本例中,ISP生成了YUV NV12格式的图像数据,并将亮度和色度数据存储在两个不同的平面中。GPU随后读取图像数据,并分别在Y面和UV面运行。

使用PowerVR成像框架可配置系统,如下所示:首先,使用框架将两个EGL图像指针实例化(EGLImageKHR类型),将其映射到Y平面和UV平面;然后在GPU上进行OpenCL处理,随后从EGL图像中创建两个OpenCL图像指针(image2d_t类型)。

PowerVR成像框架

要从框架零拷贝支持中获取优势,需编写OpenCL内核,因此需要两个图像参数和一个取样器。PowerVR GPU可以使用专用的硬件结构即纹理处理单元(TPU)在这些变量上执行读取(或抽样)操作。对第一个图像返回亮度(y)值进行抽样,还要对第二个包含色度(u,v)对的图像返回向量进行抽样。

对图像进行取样时,TPU也可以配置为执行功能,如图像插值和边界像素处理。PowerVR系列6 GPU主要基于标量架构,这意味着,当运行向量的单个部件时没有发生效率损失。

下图展示了PowerVR成像框架如何在Android内进行集成,并配有零拷贝流插图示例。框架在Android软件栈的库层进行集成,使API(OpenCL/OpenGL ES)之间及新兴的API(OpenVX)之间保持有效的互操作性。这些API中所编写的代码可以ISP、CPU、VDE等底层硬件中有效地互通并共享数据。在此示例中,ISP数据帧放置于存储中,并直接流入GPU进行处理,例如使用零拷贝来实现以上所述内容。对于每个输入帧,GPU可产生输出帧,并映射到EGL_GL_TEXTURE_2D对象中,用于渲染至屏幕。

Android

在Android中,可通过相机硬件抽象层(HAL)访问ISP硬件,通过视频HAL访问VDE硬件。由于框架在库层进行集成,设计者便可以采用更个性化更具差异化的解决方案来扩展或替代现有的相机及媒体播放程序。

你会发现,当下可用的移动设备中已经集成了很多扩展的PowerVR成像框架,包括Asus ZenFone 2 ZE551ML智能手机(Intel Atom Z3680处理器,PowerVR G6430 GPU)。

请通过官方发布了解更多有关PowerVR成像框架及其如何为OEM所用的资讯。

请继续关注我们的博客。在下一篇博客里,我们将带你走进进行图像处理的异构计算案例。

Further reading 扩展阅读

以下为已发布的异构计算的系列文章:

PowerVR异构计算的完整术语
异构计算移动系统简介
为PowerVR Rogue GPU编写OpenCL内核的快速指引
增强异构软件的性能和效率
Android系统的PowerVR成像框架
异构计算案例研究:图像卷积滤波
• 深入研究:利用PowerVR实现计算机视觉
• 深入研究:计算机视觉的硬件IP
• 深入研究:PowerVR上的OpenCL人脸检测技术
• PowerVR图像框架支持支持零拷贝流
• PowerVR成像框架桌面相机
• 测试GPU计算性能
• Imagination智能高效的移动计算方法

原文链接:
http://blog.imgtec.com/powervr/the-powervr-imaging-framework-for-android

二维码

欢迎扫码加入移动GPU开发交流群!

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