RenderScript在x86 CPU上执行速度较慢

时间:2013-09-30 09:25:13

标签: android performance intel renderscript

我尝试在两部手机上运行RenderScript,一部采用2GHz Intel Atom Z2580 CPU双核,一部采用2.2GHz Qualcomm Snapdragon 800 CPU-quad核心。虽然RenderScript确实允许程序在两个设备上并行运行,但我发现同一程序的绝对性能在两个设备上都有很大差异。我做了以下实验:

  1. 在adb shell下使用“setprop debug.rs.max-threads”将最大运行线程限制为1(仅使用1个核心)
  2. 使用RenderScript的ScriptIntrinsicYuvToRGB和ScriptIntrinsicBlur,两个内置的内在函数来处理原始YUV相机数据并输出模糊图像。
  3. 虽然内部函数应该在字节码级别进行高度优化,但我发现Qualcomm Snapdragon 800的执行速度比Intel Atom Z2580快了近5到6倍(在实验中只使用了1个核心)。我不确定为什么会这样。我的猜测如下:

    我做了另一次测试。我使用ARM编译器将一些简单的基于NDK的c代码编译为机器代码,并发现它也可以在Intel CPU驱动的设备上运行。但是,如果我使用英特尔编译器编译相同的代码,我发现在同一设备上显着加快(3x到4x)。由于我不知道设备上的libbcc编译器对基于Intel cpu的设备上的renderscript字节代码做了什么,因此运行时错误(或不适当)的编译目标可能导致性能不佳?

    如果是这样,有没有办法为RenderScript选择基于Intel x86 cpu的设备的运行时编译器?

1 个答案:

答案 0 :(得分:2)

您实际上只是看到ARM内在函数比x86内在函数更加优化。如果您看到x86平台使用为ARM生成的RS代码进行二进制转换(特别是使用NEON),我认为您将看到超过3-4倍的减速。