我有一些基本算法(dct/idct和其他一些算法)移植到nexus 10上并在nexus10上工作(至少在功能上是预期的)。由于这些算法是第一次实现,所以它们的执行时间目前都是秒,这是可以理解的。
但是,考虑到renderscript的体系结构,我发现这些算法要么在cpu上运行,要么在gpu上运行,这取决于其他并行应用程序活动。例如,在我的应用程序中,有一个用于图像和该视图上的任何活动的滚动视图,基本上将renderscript的执行推送到cpu。如果没有活动,则算法在GPU上运行。我通过ARM-DS5-MALI/A15痕迹看到了这个现场。
这种情况表现为调试/调整的噩梦,因为算法在CPU(双核)上运行时与GPU(MALI)相比的性能增量约为2秒,因此很难衡量我在算法代码上所做的性能改进。
有办法解决这个问题吗?一个可能的解决方案是至少有一个调试配置选项来选择renderscript代码的目标类型(arm,gpu)?

最佳答案

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

这将强制执行在参考CPU实现上运行。没有等效于强制GPU执行的操作,因为许多条件可能会使其在运行时无法执行。
同样有用的是:
adb shell setprop debug.rs.max-threads 1

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

07-24 09:49
查看更多