Android NDK的性能很慢
我有一个C语言的安全库,并尝试使用NDK将其导入到我的Android项目中。该库依赖于其他三个库:pbc、gmp和openssl。我已经将前两个库构建为静态库和共享库 我对库中的encrypt()和decrypt()函数计时 在我的笔记本电脑上,它是:Android NDK的性能很慢,android,android-ndk,Android,Android Ndk,我有一个C语言的安全库,并尝试使用NDK将其导入到我的Android项目中。该库依赖于其他三个库:pbc、gmp和openssl。我已经将前两个库构建为静态库和共享库 我对库中的encrypt()和decrypt()函数计时 在我的笔记本电脑上,它是: 加密()30毫秒 解密()160毫秒 在我的Android设备(Droid 2.2.3)上,它是: 加密()190ms 解密()1300ms 该时间仅用于从C库调用这两个函数。JNI开销非常小 这是预期的吗 更新: encrypt()和d
- 加密()30毫秒
- 解密()160毫秒
- 加密()190ms
- 解密()1300ms
encrypt()和decrypt()都没有任何IO操作,主要是浮点操作。我为armeabi-v7a编译了代码。首先,我要说你很幸运,你的端口工作速度仅比笔记本电脑版本慢8倍。对于基于ARM的平台来说,这是一个非常好的结果 ARM速度较慢有几个原因:
- ARM处理器的计算能力比Intel/AMD桌面CPU要低
- 较慢的内存和较低的带宽
- 不同的体系结构限制(例如,浮点单元与ARM中的整数CPU核心分离)
- 如果您的手机具有现代FPU,则可以尝试使用附加的编译器标志重新编译所有库
(或-mfpu=vfpv3
)。由于FPU寄存器的数量增加了一倍,因此它可以稍微提高浮点计算的速度-mfpu=neon
- 尝试使用更新的编译器构建代码。这是谷歌NDK的修改版,包括GCC4.6工具链。有时更新的编译器可以生成更有效的代码
- 分析代码并优化瓶颈。您可以使用许多特定于arm的优化技巧(有点过时但很好的指南)或NEON SIMD的vertorize代码