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



我的测试平台:

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上运行,我监视以下两件事:

  1. 我监视logcat以查看此日志是否显示为"成功加载运行时:libRSDriver_adreno.so"
  2. 我监视CPU使用情况

我用两张分辨率分别为1600×1067和1920×1200的大图像运行这个脚本。由于使用Android 4.4的Nexus 5支持Renderscript GPU计算,我认为这个简单脚本在GPU中的性能会更高。然而,结果一致表明,在(Nexus 5的多核)CPU上运行的脚本速度几乎是在Adreno 330 GPU上运行的速度的3倍。

我想问一下为什么会发生这种情况,以及我是否错过了让这个简单的脚本更快的东西。

您的脚本没有做任何有意义的工作,但您可能会对数据结构进行额外的复制(在这种情况下无法保证GPU驱动程序的作用)。为什么不尝试一个对输入进行实际操作的示例,而不是直接将其复制到输出?

相关内容

最新更新