【发布时间】:2026-01-23 06:20:02
【问题描述】:
我使用 Android NDK(使用 C++ API 进行 Renderscript)开发了 3 个 C/RS/Neon-Intrinsics 版本的视频处理算法。对 C/RS/Neon 的调用将从 JAVA 前端转到 NDK 端的 Native 级别。我发现由于某种原因,与 C 和 RS 版本相比,Neon 版本会消耗大量功率。我使用 Trepn 5.0 进行功率测试。
能否有人向我解释一下这些方法 C、Renderscript - GPU、Neon Intrinsics 中每种方法的功耗水平。哪个消耗最多?
RS 代码的理想功耗水平是多少?因为 GPU 以较低的时钟频率运行,功耗必须更低!
- Renderscript API 是否专注于电源优化?
视频 - 1920x1080(20 帧)
- C -- 11115.067 ms (0.80mW)
- RS -- 9867.170 毫秒 (0.43mW)
- Neon 本征 -- 9160 毫秒 (1.49mW)
【问题讨论】:
-
如果实施得当,您的 NEON 版本应该会快得多 - 因此总 能源 消耗不会受到很大影响,例如一半时间的两倍功耗应该对电池功耗产生相同的影响,因为总能量消耗是相同的。看起来您的 NEON 实现需要一些优化工作,因为它并不比您的 C 代码快多少?
-
它是使用霓虹灯内在函数实现的,我还没有完成汇编编码。相比之下,霓虹灯比 RS 耗电多吗?
-
您的 NEON 代码一定有严重问题。我会检查拆卸。要么是不正确的实现,要么是编译器搞砸了。也许两者兼而有之。
-
NEON 的问题通常是偶然事件。要么它不是 NEON 能够启动的,要么它比 CPU 版本快一个数量级。就像您的结果一样,没有什么比“快一点”了。你肯定是在 NEON 上做错了什么。
-
@Jake 我正在实现执行卷积操作的边缘检测算法,我的 C 版本在这些 forloops 中使用 2 个 for 循环来执行它,我的代码计算 Xgradient 和 Ygradient(使用 2 个 forloops 来处理 3x3 窗口)。我使用 Neon 内部函数来并行化 X 和 Y 梯度操作。
标签: android c android-ndk neon renderscript