NDK性能下降

Ste*_*Fan 0 android android-ndk

我在C中有一个安全库,并尝试使用NDK将其导入我的Android项目.该库依赖于其他三个库:pbc,gmp和openssl.我已经将前两个库构建为静态库,最后一个构建为共享库.

我在我的库中定时加密()和decrypt()函数.

在我的笔记本电脑上,它是:

  • encrypt()30ms
  • decrypt()160ms

在我的Android设备(Droid 2.2.3)上,它是:

  • encrypt()190ms
  • decrypt()1300ms

时间仅用于从C库调用这两个函数.JNI开销非常小.

这是预期的吗?

更新:

encrypt()和decrypt()都没有任何IO操作,主要是浮点操作.我编译了armeabi-v7a的代码.

And*_*aev 8

首先,我会说你很幸运 - 你的端口只比笔记本电脑版慢8倍.对于基于ARM的平台来说,这是一个非常好的结果.

ARM有几个原因要慢一点:

  • ARM处理器的计算能力比英特尔/ AMD台式机CPU低
  • 内存较慢,带宽较低
  • 不同的体系结构限制(例如浮点单元与ARM中的整数CPU核心分开)

您可以尝试以下方法来提高代码的性能:

  • 如果您的手机具有现代FPU,那么您可以尝试使用其他编译器标志-mfpu=vfpv3(或-mfpu=neon)重新编译所有库.由于FPU寄存器数量增加,它可以略微提高浮点计算的速度.
  • 尝试使用较新的编译器构建代码.最新的Crystax NDK是Google NDK的修改版,包括gcc 4.6工具链.有时,较新的编译器可以生成更有效的代码.
  • 描述您的代码并优化瓶颈.你可以使用一些特定于ARM的优化技巧(这里有点过时但很好的指导)或使用NEON SIMD转换代码.