Ucam全能相机:解决计算密集型照片处理
- +1 你赞过了
【天极网数码频道】“与高通在MARE(多核异步运行环境)方面的合作为我们带来了一项重要的竞争优势:能够更快地实施高性能算法。没有MARE,我们的UCam照片应用便无法提供高性能并行滤镜功能。”
-邹鹏程,中科创达战略产品高级副总裁
突出特点
•
•方法简单,使用五分之一的Pthread代码即可处理线程和并行计算
•
•与单线程版本的Ucam全能相机相比,图像处理速度提高60%
•MARE(多核异步运行环境)库处理安卓线程池管理和线程同步,从而程序员不必进行相关处理(从而聚焦于业务细节处理)
应用程序故事
使用多少摄像应用才能使用户感到满意?很多,特别是在亚洲。
中科创达认识到,中国和日本的用户必须运行一个应用用于筛选和分享,一个应用用于读取条形码,一个应用用于美化,并运行更多的应用来实现拼贴、画中画、动画GIF和面部检测等功能。他们创造了一种功能齐全的摄像机平台–Ucam,可以让开发人员将与摄像机有关的功能插入一个单独的应用。Ucam全能相机允许开发人员推广新功能,不需要从头开始构建应用,而且为用户提供了无需安装和学习全新应用的新功能。
免费的UCam全能相机应用具有20种不同的摄像机功能,在GooglePlay广受欢迎,获得数千次五星级评价。
在多核CPU上进行并行计算
随着Ucam全能相机的普及程度和功能不断发展,很多市场开始关注中科创达的工程成就:
•
•手机屏幕大小和摄像头分辨率不断增加。
•
•中科创达开始推出更多计算密集型特效,比如渐变、3D视图和漫画滤镜。
•
•UCamUI包括静态预览,可以显示具有所有可用特效的图像。工程师们希望显示摄像机传感器发送的20fps现场图像的实时预览。
简而言之,不断发展的产品需要更强大的功能。中科创达的工程师们深知,多核移动设备比服务器或PC具有更丰富的功能。他们认识到,现在需要修改Ucam全能相机才能使用所有可用的CPU内核。他们决定通过实施并行计算来实现两项特别密集的功能:并行滤镜和动画GIF。
他们首先求助于POSIX线程(简称Pthread)在多个CPU内核上并行运行任务。中科创达的工程师们利用自己的队列和线程池编写了一个原型,来处理并行滤镜和来自传感器的连续图像馈送。
中科创达战略产品高级副总裁邹鹏程表示:“我们尝试使用Pthread进行并行计算,因为我们的很多程序员都曾在学校里学过这方面的知识。但是,普通程序员很难掌握Pthread中的线程管理任务(包括同步、对话等),所以我们另辟蹊径。”
借助MARE简化并行计算–2天时间
通过与高通研究院(QualcommResearch)的长期关系,中科创达了解了高通的多核异步运行环境(MARE)。中科创达的工程师们认为MARE极具吸引力,原因在于它:
•
•作为一个C++库,可以与最新的标准安卓NDK配合使用。
•
•包括一个运行时和任务调度程序,因此不需要构建自己的运行时环境。
•
•允许在多个内核的应用层上并行运行多项任务,而且不需要深入访问系统。
旨在减少实施并行机制工作的MARE的编程模型也吸引了工程师们。他们将UCam修改为可以使用基本线程管理API(应用程序编程接口),允许MARE决定如何最恰当地实现任务的并行计算和同步。这意味着应用不需要知道有多少线程正在使用当中、有多少内核可供使用,或者哪些任务已经在哪些内核上运行。借助MARE中的动态库,载入内存的唯一API就是应用需要的一个API,因此不会大量增加内存占用。
对于首个并行计算版本的Ucam全能相机,中科创达的工程师们只需要修改启动每项任务的代码,如下所示:
mare::runtime::init();
mare::group_ptrg=mare::create_group("doEffect");
for(inti=0;i
inteffectType=effectPtr[i];
mare::launch(g,[&SendMsgFunc,&img,effectType,i]{
if(img==NULL){
return;
}
doEffectImg(SendMsgFunc,img,effectType,i);
});
}
mare::wait_for(g);
mare::runtime::shutdown();
最终版本使用不足五分之一的Pthread原型代码,即可处理并行滤镜。实施MARE(多核异步运行环境)不需要更改Ucam全能相机算法的代码,只需花费一名工程师大约两天时间。有关更复杂特效(比如漫画滤镜)的后续开发花费大约一周时间。
性能提高60%
中科创达在多家制造商(其中包括Snapdragon骁龙)提供的多项设备和多个处理器上进行了测试。邹鹏程解释说:“可供应用使用的内核越多,性能越好,处理摄像机发送的一帧图像所需的时间越少。但是,对提高性能需求最大的是较低端手机的用户,因此,我们针对这些用户进行了大量的测试。借助MARE(多核异步运行环境)提供的并行计算,
UCam全能相机完成图像任务处理的速度比其单线程版本快60%。性能比Pthread原型快10%,原因就在于MARE(多核异步运行环境)能够非常高效地管理线程池。”
Ucam全能相机不需要确定当前设备上多个内核的可用性–MARE(多核异步运行环境)可以处理这项任务–因此,无论设备或处理器如何,中科创达仍然可以将Ucam全能相机作为一个单独的.apk在GooglePlay上提供。由于集成了并行滤镜器,Ucam全能相机不但吸引了许多最终用户,而且还吸引了ODM/OEM客户。
邹鹏程表示:“我们一直希望融入更多我们自己的知识产权,打造我们自己的产品,与高通研究院的合作为我们提供了了解如何使用我们自有技术的机会。借助高通研究院的技术,我们能够接触更多的客户,并在产品成熟度方面获得更多信心。”
后续行动
邹鹏程强调,有三种类型的任务适合并行计算:
•
•并行任务–许多可以并行运行的孤立任务或松散耦合型任务(例如浏览)
•
•松散耦合型计算–可以分为多个松散耦合型计算单元并行运行的一项计算任务,通常具有最少的转换工作(在Ucam全能相机中并行滤镜)
•紧密耦合型计算–一项需要更多转换工作的任务中的一种复杂算法(漫画滤镜、实时边缘检测)
MARE(多核异步运行环境)可用于并行处理以性能为导向的应用程序类别的任务,比如游戏、计算机视觉和多媒体处理,当然还包括手势。下载MARESDK(软件开发工具包)并了解如何轻松地设计自己的安卓应用,从而充分利用用户移动设备中的所有内核。
最新资讯
热门视频
新品评测