强制 Renderscript 在 CPU 或 GPU 上运行(至少出于性能调优目的)



我有一些基本的算法(DCT/IDCT和其他一些)移植并在Nexus 10上工作(至少在功能上)。由于这些算法是首次实现,因此它们的执行时间目前运行到秒,这是可以理解的。

但是,考虑到 Renderscript 的架构,我看到这些算法在 CPU 或 GPU 上运行,具体取决于其他并行应用程序活动。例如,在我的应用程序中,有一个用于图像的滚动视图,并且此视图上的任何活动本质上都将渲染脚本执行推送到 CPU。如果没有活动,算法将在 GPU 上运行。我通过 ARM-DS5 Mali/A15 跟踪现场看到了这一点。

这种情况本身就是调试/调优的噩梦,因为算法在 CPU(双核)与 GPU(马里)上运行时的性能增量约为 2 秒,因此很难衡量我在算法代码上所做的性能改进。

有没有办法解决这个问题?一种可能的解决方案是至少有一个调试可配置性选项来选择渲染脚本代码的目标类型(ARM、GPU)?

adb shell setprop debug.rs.default-CPU-driver 1

这将强制在参考 CPU 实现上运行执行。没有等效的强制将事情强制到 GPU,因为许多条件可能使它在运行时无法实现。

同样有用的还有:

adb shell setprop debug.rs.max-threads 1

这会将要使用的 CPU 内核数限制为 1(或您为设备的 CPU 计数设置的任何其他值)

最新更新