我有一些基本算法(DCT / IDCT和其他一些)在Nexus 10上移植和工作(正如预期的至少功能)。由于这些算法是第一次实现,它们的执行时间目前是跑到秒,这是可以理解的。
但是,考虑到Renderscript的体系结构,我发现这些算法可以在CPU或GPU上运行,具体取决于其他并行应用程序活动。例如,在我的应用程序中,有一个用于图像的滚动视图和该视图上的任何活动,实质上是将renderscript执行推送到CPU。如果没有活动,算法将在GPU上运行。我通过ARM-DS5 Mali / A15跟踪看到这个。
这种情况表现为调试/调整噩梦,因为算法在CPU(双核)与GPU(Mali)上运行时的性能增量大约为2秒,因此很难衡量性能改进我正在做我的算法代码。
有没有办法解决这个问题?一种可能的解决方案是至少有一个调试可配置选项来为renderscript代码选择目标类型(ARM,GPU)?
答案 0 :(得分:11)
adb shell setprop debug.rs.default-CPU-driver 1
这将强制执行在参考CPU实现上运行。没有相同的东西可以强制GPU,因为许多条件可能会在运行时使其无法实现。
同样有用的是:
adb shell setprop debug.rs.max-threads 1
将CPU核心数量限制为1(或者设置为设备CPU数量的任何其他值)