【问题标题】:Android: Performances of Native/JNI code change from one phone to anotherAndroid:Native/JNI 代码的性能从一部手机更改为另一部手机
【发布时间】:2011-04-30 02:34:11
【问题描述】:

大家好 我的 JNI 库有问题。 相同代码的执行时间从一部手机更改为另一部手机。 我以为只是因为我们在旧手机上测试,但最近我在 htc legend 上运行,所有 jni 代码都很慢......

我运行分析器,它确实是一个昼夜差异: 在某些手机上,jni 功能需要 15% 到 20%,而在其他手机上,在相同条件下需要 40% 和 50%...

有人解释一下吗?

【问题讨论】:

  • 如果您提供更多信息 - 您的 JNI 代码的作用、设备是什么以及这些设备上的时间安排是什么 - 我可能会冒险猜测您的具体情况。
  • 特别是,“JNI 代码”是指“进行大量 JNI 调用的代码”还是简单的“本机代码”。
  • oki 更具体地说,我使用了我包装的花栗鼠物理引擎,使其可用于 android。所以所有的物理部分都是用 C 语言完成的,结果会发送回 Java。

标签: android java-native-interface android-ndk-r4


【解决方案1】:

如果其中一部手机使用 Foryo (2.2) 中添加的 JIT (Just In Time) 编译器,那一部应该比你的旧手机快得多。您是否使用相同的 android 版本对其进行测试?

除此之外有些设备在浮点数学方面比其他设备更好。未实现 FPU 的设备将模拟浮点运算。在这里您可以找到一篇不错的博客文章:http://www.badlogicgames.com/wordpress/?p=71

关于如何使用定点算法实现浮点系统有很多资料来源:http://en.wikipedia.org/wiki/Fixed-point_arithmetic

【讨论】:

  • 是的,所以不要考虑第一部分:D
  • 这实际上似乎是我一直遇到的问题。因为我没有编写我正在使用的 C 代码,所以我能做的事情非常有限,但已经通过从双精度数切换到浮点数,我设法提高了速度。谢谢
  • 如果你为 armv5te 构建,即使硬件 FP 可用,你也会得到软件浮点。最新版本的 NDK 支持生成 armv5te 和 armv7-a(支持硬件 FP)的二进制文件,并且安装和使用了设备的正确版本。
【解决方案2】:

处理器当然不是平等的;它们有不同的提要、速度、缓存等。显而易见的解释是处理器。

此外,系统范围的事情可能会影响处理 - 例如,如果您正在使用 JNI 处理相机拍摄的图像,则图像的大小可能是特定于设备的。

此外,您必须检查您正在测量线程时间和挂钟时间;如果查看相对于 Java 代码部分的时间相对,您可能会看到 Java 中的相对加速(例如 Android 2.2 中的 JIT),而不是 JNI 中的减速.

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多