c/c++语言开发共享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进行功率测试。

video – 1920×1080(20帧)

    首先,渲染脚本代码的功耗取决于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消耗更多的功率,我不会感到惊讶。 如果你获得更快的性能,那就必须付出代价 – 这显然是力量。

      以上就是c/c++开发分享C / Renderscript / Neon内在函数之间的电池功耗 – video滤波器(Edgedetection)APK相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/550020.html

      (0)
      上一篇 2021年1月14日
      下一篇 2021年1月14日

      精彩推荐