Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RenderScript在x86 CPU上执行速度较慢_Android_Performance_Intel_Renderscript - Fatal编程技术网

Android RenderScript在x86 CPU上执行速度较慢

Android RenderScript在x86 CPU上执行速度较慢,android,performance,intel,renderscript,Android,Performance,Intel,Renderscript,我尝试在两款手机上运行RenderScript,一款是2GHz Intel Atom Z2580 CPU双核,另一款是2.2GHz高通Snapdragon 800 CPU四核。虽然RenderScript确实使程序能够在两台设备上并行运行,但我发现同一程序在两台设备上的绝对性能非常不同。我做了以下实验: 使用adb外壳下的“setprop debug.rs.max-threads”将最大运行线程限制为1(仅使用1个内核) 使用RenderScript的ScriptIntrinsicYuvToRG

我尝试在两款手机上运行RenderScript,一款是2GHz Intel Atom Z2580 CPU双核,另一款是2.2GHz高通Snapdragon 800 CPU四核。虽然RenderScript确实使程序能够在两台设备上并行运行,但我发现同一程序在两台设备上的绝对性能非常不同。我做了以下实验:

  • 使用adb外壳下的“setprop debug.rs.max-threads”将最大运行线程限制为1(仅使用1个内核)
  • 使用RenderScript的ScriptIntrinsicYuvToRGB和ScriptIntrinsicBlur这两个内置的内部函数来处理原始YUV相机数据并输出模糊图像 虽然内部芯片应该在字节码级别进行高度优化,但我发现高通Snapdragon 800的性能几乎是Intel Atom Z2580的5到6倍(在实验中两者都只使用了一个内核)。我不知道为什么会这样。我的猜测如下:

    我做了另一个测试。我使用ARM编译器将一些简单的基于NDK的c代码编译成机器代码,发现它也运行在英特尔CPU驱动的设备上。但是,如果我使用“英特尔编译器”编译相同的代码,我发现在同一台设备上有显著的速度提升(3到4倍)。由于我不知道设备上的libbcc编译器对基于Intel cpu的设备上的renderscript字节码做了什么,因此性能差可能是由于运行时的错误(或不适当)编译目标造成的


    如果这是真的,那么有没有办法为基于英特尔x86 cpu的RenderScript设备选择运行时编译器?

    您实际上看到ARM内部函数比x86内部函数优化得多。如果您看到x86平台使用为ARM生成的RS代码进行二进制翻译(特别是使用NEON),我想您会看到速度下降了3-4倍以上。

    两款手机都运行Android 4.2.2,请回答。对不起,我可能有更多的澄清问题。什么是ARM内部函数和x86内部函数?您的意思是设备上当前的libbcc将只编译RS字节码到ARM机器码吗?有编译器开关吗?如果没有,是否有计划将其编译为x86机器代码?内部函数不是由libbcc生成的,它们是内置函数。在手臂上,它们使用手动调谐的霓虹灯组件。我们没有用于x86的等效SSE程序集,只是一个合理的C版本。libbcc将为您所在的任何平台生成适当的机器代码。这就回答了问题。谢谢!