我想知道是否可以使用RenderScript引擎来优化算法。
算法对图像进行迭代处理,直到满足某些条件。在处理所需的迭代次数之前无法知道。但我只看到了RenderScript示例,这些示例适用于具有N个元素的定义良好的分配(典型的例子是内核为位图中的每个像素执行)。
一种解决方案是创建Java"而#34;循环,并在每次迭代时调用RenderScript代码(它只有一个Element,一个内核循环),并在算法完成时从java检查。这会有效吗?我的意思是,我必须将一个位图传递给RenderScript,这是否会导致整个副本?在这种情况下,NDK不是更好的解决方案吗?
哪种解决方案效果最好?
谢谢! 胡安·伊格纳西奥
答案 0 :(得分:2)
你可以回到Java进行每次迭代的流量控制,但这不是最好的,需要一些额外的东西,以确保你不会阻止UI线程和类似的东西。
执行此操作的好方法是创建单线程RS函数(不是使用__attribute((内核))或类似的东西创建的函数)并使用rsForEach生成每次迭代。当迭代完成后,rsForEach将返回,您可以通过脚本全局变量检查终止条件,并在必要时启动另一次迭代。这将使开销保持在最低限度,因为您将在整个迭代过程的运行时间内生活在RS环境中(更少的JNI转换,更少的CPU核心的开/关转换,等等)。