如果上一步在GPU上运行,Renderscript内在函数会减慢管道速度

时间:2014-03-31 19:19:35

标签: android renderscript

我的开发环境如下:

Device: Nexus 5
Android: 4.4.2
SDK Tools: 22.6.1
Platform Tools: 19.0.1
Build tools: 19.0.3
Build Target: level 19
Min Target: level 19

我正在做一些图像处理应用程序。基本上我需要对图像进行预处理步骤,然后使用卷积5x5来过滤图像。在预处理步骤中,我成功地使脚本在GPU上运行并获得了良好的性能。由于Renderscript提供了5x5卷积内在函数,我想用它来尽可能快地制作整个流水线。但是,我发现在预处理步骤非常慢之后使用5x5卷积内在函数。相反,如果我使用adb工具强制所有脚本在CP​​U上运行,那么5x5卷积内在函数的速度要快得多。在这两种情况下,预处理步骤所消耗的时间基本相同。因此,内在函数的表现产生了不同。

另外,在我使用的代码中

Allocation.USAGE_SHARED

在创建所有分配时,希望共享内存可以促进CPU和GPU之间的内存访问。

由于我了解内在函数在CPU上运行,这种行为是否可以预期?或者我错过了什么?有没有办法让GPU脚本/ CPU内在函数混合代码快?非常感谢!

1 个答案:

答案 0 :(得分:1)

5X5卷入Intrinsic(在CPU的默认android rs驱动程序中)使用Neon。这非常快,我的测量结果也是如此。一般来说,我没有发现任何rs apis然后在两个5x5矩阵上使用5x5卷积。这是一个问题,因为它可以防止编写更复杂的内核。

鉴于您注意到的性能差异,您的设备上的GPU驱动程序很可能支持5X5卷积内在函数,该内在函数可能比使用neon的CPU 5X5 convolveIntrinsic运行得慢。因此,强制使用renderscript的CPU使用率可以提供更好的性能。