我的测试平台:
Development OS: Windows 7 32-bit
Phone: Nexus 5
Phone OS version: Android 4.4
SDK bundle: adt-bundle-windows-x86-20131030
Build-tool version: 19
SDK tool version: 22.3
Platform tool version: 19
我写了一个非常简单的Renderscript如下:
#pragma rs_fp_relaxed
uchar4 __attribute__((kernel)) someKernel(uchar4 in, uint32_t x, uint32_t y){
return in;
}
我也用过
adb shell setprop debug.rs.default-CPU-driver 1
强制脚本在CPU上运行以进行性能比较。
在计算运行时间之前,我还使用了让脚本运行一小段时间进行预热。
为了确保我知道代码是在GPU还是CPU上运行,我会监控以下两件事:
我使用分辨率为1600by1067和1920by1200的两个大图像运行此脚本。由于使用Android 4.4的Nexus 5支持Renderscript GPU计算,我认为这个简单脚本的性能在GPU中会更高。但是,结果一致表明,运行在(Nexus 5的多核)CPU上的脚本速度几乎是在Adreno 330 GPU上运行的速度的3倍。
我想问为什么会发生这种情况,如果我错过了一些可以让这个简单的脚本更快的话。
答案 0 :(得分:0)
您的脚本没有做任何有意义的工作,但您可能正在制作数据结构的其他副本(在这种情况下无法保证GPU驱动程序的功能)。为什么不尝试一个实际上对输入做某事的例子,而不是直接将它复制到输出?