算法优化相关图例分享

高通平台图像算法优化

图像性能优化涉及到的知识点较多,并且知识点之间的并无直接的逻辑关系。总的来说目的都是一样的:就是尽可能利用现有硬件提升运算时的并发性。

多核异构的方式能在同等功耗的情况下尽可能提升运算速率 。高通的多核异构实现如下:

在这里插入图片描述

运行在不同的硬件上需要对应不同的编程模型,本文对此做了简单的总结。

1.运行在GPU(Andreno):

1.1 RenderScript

RenderScript 是 google 退出运行在 Android 平台上的并行编程语言,能在运行时决定将计算任务合理分配给CPU 和 GPU。在 frameworks/rs目录能看到 RenderScript 源码和实例。其中rsDefines.h 定义了 RenderScript 使用的基本数据结构。

RenderScript 通过以下方式实现:

在这里插入图片描述
详情:https://source.android.google.cn/devices/architecture/vndk/renderscript

在这里插入图片描述
RenderScript和framework的关系

RenderScript 和OpenCL相似,算子封装在 kernel 函数中,例如以下代码是将输入图片中所有 RGB 反色:

#pragma version(1)
#pragma rs java_package_name(com.hc.renderscript)
uchar4 __attribute__((kernel)) invert(uchar4 in)
{
   
  uchar4 out = in;
  out.r = 255- in.r;
  out.g = 255-in.g;
  out.b = 255-in.b;
  return out;
 
}

以上代码会在运行时作用与输入图像的每个像素。

Google 一直在大力推广 RenderScript 作为图像处理的主力优化语言,但是目前看来普及率很低。个人推测有以下原因:
1.关于 RenderScript 的资料非常少,而且想要熟悉使用这个工具需要对 Android Framework 编译环境有深入了解。对于开发者而言,很难知道算法在设备运行时的细节。
2.RenderScript 优化能力有待商榷,在native层没有什么优势。毕竟平台商比Google更熟悉自家硬件,平台商有更多的手段针对自家硬件作优化。

1.2 OpenCL

OpenCL(全称Open Computing Language,开放运算语言)
Andreno GPU 支持OpenCL,具体参考文档: https://developer.qualcomm.com › qfile › 80-nb295-11_a
高通最新 camera 架构 CamX 上也有 GPU 的专属节点,目录位于:chi-cdk\vendor\node\gpu

该节点代码以 OpenCL 的方式对 GPU 进行编程。
工作流程如下:

  1. 设备初始化
  2. 准备主机端数据(分配主机端内存+获取数据)
  3. 分配设备端内存
  4. 将主机端数据拷贝到设备端
  5. 设备启动内核函数,进行运算,将结果写到设备端内存
  6. 将设备端结果拷贝回主机端
  7. 读取主机端内存,进行后续处理
  8. 释放资源
    在这里插入图片描述
    OpenCL 反色函数如下:
         __kernel void MatrixMatrixAddSimple( const int matrixRows,

                                          const 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值