1

我想知道是否可以使用 RenderScript 引擎来优化算法。

该算法对图像进行迭代处理,直到满足某些条件。在处理所需的迭代次数之前无法知道。但是我只看到了在具有 N 个元素的定义明确的分配上工作的 RenderScript 示例(典型示例是内核为位图中的每个像素执行)。

一种解决方案是创建一个 Java“while”循环,并在每次迭代时调用 RenderScript 代码(它将只有一个元素,一个内核循环),并在算法完成时从 java 检查。这会高效吗?我的意思是,我必须将位图传递给 RenderScript,这会导致制作整个副本吗?在这种情况下,NDK 不是更好的解决方案吗?

哪个是解决这个问题的最佳性能方法?

谢谢!胡安·伊格纳西奥

4

1 回答 1

2

您可以在每次迭代时返回 Java 进行流控制,但这不是最好的,并且需要一堆额外的东西来确保您不会阻塞 UI 线程之类的东西。

做到这一点的好方法是创建一个单线程 RS 函数(不是使用 __attribute((kernel)) 或类似函数创建的函数)并使用 rsForEach 生成每次迭代。迭代完成后,rsForEach 将返回,您可以通过脚本全局变量检查终止条件,并在必要时启动另一个迭代。这也将开销保持在最低限度,因为您将在整个迭代过程的运行时处于 RS 环境中(更少的 JNI 转换,更少的 CPU 内核的开/关转换,诸如此类)。

于 2013-09-30T16:48:16.853 回答