C / Renderscript / Neon内在函数之间的电池功耗 – video滤波器(Edgedetection)APK

我使用Android NDK(使用C ++ API for Renderscript)开发了3个C / RS / Neon-Intrinsics版本的video处理算法。 来自JAVA前端的NDK侧的C / RS / Neon调用将进入Native级别。 我发现由于某些原因,与C和RS版本相比,Neon版本消耗大量功率。 我使用Trepn 5.0进行功率测试。

  1. 有人可以澄清一下这些方法C,Renderscript – GPU,Neon Intrinsics的功耗水平。 哪个消费最多?

  2. 什么是RS代码的理想功耗水平?,因为GPU以较低的时钟频率运行,功耗必须更低!

  3. Renderscript API是否专注于功耗优化?

video – 1920×1080(20帧)

  1. C – 11115.067 ms(0.80mW)
  2. RS – 9867.170毫秒(0.43mW)
  3. Neon Intrinsic – 9160毫秒(1.49mW)

首先,渲染脚本代码的功耗取决于SOC的类型,CPU,GPU运行的频率/电压等。

即使您从同一供应商处查看CPUS,例如ARM,例如A15和A9,A15的CPU比A9更耗电。 同样,A Mali GPU4XX与6XX同样表现出相同任务的功耗差异。 此外,不同供应商之间也存在功率增量,例如,Intel和ARM CPU,用于执行相同的任务。 同样,人们会注意到QCOM Adreno GPU和ARM Mali GPU之间的功率差异,即使它们在相同的频率/电压水平下运行。

如果你使用Nexus 5,我们得到一个QUAD A15 CPU,每个CPU的速度为2.3G。 Renderscript将CPU和GPU推向最高时钟速度。 所以在这个设备上,我希望基于CPU / Neon或者CPU的RS代码的功耗最高,具体取决于您正在进行的操作类型,然后是RS GPU代码。 因此,在功耗方面,由于使用的SOC不同,您使用的设备类型很重要。 在最新一代的SOC中,我预计CPU / Neon比GPU更耗电。

RS将CPU / GPU时钟频率推至最高速度。 所以我不确定是否可以在这里进行有意义的功率优化。 即使他们这样做,与CPUS / GPU以最高速度消耗的功率相比,这些节能也将微不足道。

这种功耗在移动设备上是一个巨大的问题,从功耗角度来看,您可能会很好地使用滤波器在计算成像空间中处理几帧。 但是,当真正的video处理中出现渲染时,即使video分辨率较低,设备也会迅速升温,然后操作系统热管理器就会发挥作用。 这些热管理器降低了整体CPU速度,导致CPU renderscript的性能不可靠。

对评论的回应

仅频率不是功耗的原因。 它是频率和电压的组合。 例如,GPU在1.25V下以200Mhz运行,在1.25V下运行550Mhz可能会消耗相同的功率。 根据系统中电源域的设计方式,0.9V应该足够200Mhz,理论上,当频率降低时,系统应该将GPU电源域转换为更低的电压。 但是各种SOC存在各种问题,因此无法保证电压和频率的一致转换。 这可能是即使对于标称负载,GPU功率可能很高的原因之一。

因此,对于任何复杂性,如果您将GPU电压保持在1.25V @ 600 MHz之间,那么您的功耗将相当高,并且可以与2G @ 1.25V时的CPU相媲美……

我测试了Neon内在 – 5X5卷积,与不使用CPU进行相同任务相比,它们相当快(3x-5x)。 霓虹灯硬件通常与CPU(也称为MPU电源域)处于相同的电源域中。 因此即使Neon硬件工作,所有CPU都保持在电压/频率。 由于Neon对于给定任务的执行速度比CPU快,因此如果它比该任务的CPU消耗更多的功率,我不会感到惊讶。 如果你获得更快的性能,那就必须付出代价 – 这显然是力量。