【问题标题】:OpenGL ES vs OpenCL vs RenderScript for Android Image Processing用于 Android 图像处理的 OpenGL ES vs OpenCL vs RenderScript
【发布时间】:2019-09-30 03:12:48
【问题描述】:

我需要为 Android 构建一个图像处理应用程序。性能是主要要求,我希望使用 gpu 计算。我想知道这 3 个库中哪个最好用。

我知道 OpenGL 主要用于图形,但也支持计算机着色器。

我不确定 OpenCL 在 Android 上的支持程度如何

RenderScript 缺乏文档,我认为它比其他库慢。

【问题讨论】:

  • 从测试用例的迷你基准开始,例如所有三个版本 gl、cl、rs 的高斯模糊。然后比较运行时性能、市场渗透率和开发性能。我想,如果它有效,opencl 将是有利的,因为如果算法是为异构计算(多设备)开发的,它也可以同时使用 cpu 部分。特别是如果 gpu 和 cpu 共享相同的全局内存。如果设备支持,它还可以使用本地内存(片内,快速)等功能,因此请测试它。

标签: android image-processing gpgpu


【解决方案1】:

对于图像处理应用程序,最繁重的部分是处理(转换/操作)内存中图像的像素,而不是将图像渲染到屏幕/缓冲区。

当然,这种处理是通用的,需要通用计算 API。

因此,我们可以消除 OpenGL ES。它支持着色器,但 OpenGL ES 着色语言非常有限,绝对不适合一般处理。

RenderScript,根据this

RenderScript 不使用任何 GPU 或 DSP 内核。这是谷歌故意含糊不清的文档所鼓励的一种常见误解。 RenderScript 曾经有一个与 OpenGL ES 的接口,但它已被弃用,并且从未被用于动画壁纸之外。 RenderScript 将使用多个 CPU 内核(如果可用),但我怀疑 RenderScript 将被 OpenCL 取代。

我在一家大型视频游戏公司工作,我们没有任何使用 RenderScript 的计划。我们认为 Vulkan 是一个更好的选择。我建议你也选择 Vulkan,但问题是现在支持 Vulkan 的 Android 设备数量很少。

因此,要回答您的问题,请使用 OpenCL。尽管 OpenCL 不是 Android 平台的一部分,但许多制造商提供驱动程序甚至 SDK 来支持 Android 上的 OpenCL。至少,在支持的设备数量上,它比 Vulkan 要好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多