为什么非常简单的Renderscript在GPU中的运行速度比在CPU中慢3倍

时间:2013-12-04 17:14:48

标签: android gpgpu renderscript

我的测试平台:

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

强制脚本在CP​​U上运行以进行性能比较。

在计算运行时间之前,我还使用了让脚本运行一小段时间进行预热。

为了确保我知道代码是在GPU还是CPU上运行,我会监控以下两件事:

  1. 我监视logcat以查看是否显示此日志“Successfully loaded runtime:libRSDriver_adreno.so”
  2. 我监控CPU使用率
  3. 我使用分辨率为1600by1067和1920by1200的两个大图像运行此脚本。由于使用Android 4.4的Nexus 5支持Renderscript GPU计算,我认为这个简单脚本的性能在GPU中会更高。但是,结果一致表明,运行在(Nexus 5的多核)CPU上的脚本速度几乎是在Adreno 330 GPU上运行的速度的3倍。

    我想问为什么会发生这种情况,如果我错过了一些可以让这个简单的脚本更快的话。

1 个答案:

答案 0 :(得分:0)

您的脚本没有做任何有意义的工作,但您可能正在制作数据结构的其他副本(在这种情况下无法保证GPU驱动程序的功能)。为什么不尝试一个实际上对输入做某事的例子,而不是直接将它复制到输出?