通过NDK(JNI)测试android 平台中neon性能对比

测试代码

测试代码仓库地址 https://gitee.com/chenjim/NeonTest
参考自 https://github.com/Lakers2005/test-neon

主要修改说明:

  1. 此处不支持x86、arm64-v8a等so,只支持armeabi-v7,需要在build.gradle增加如下内容
    ndk {
        abiFilters "armeabi-v7a"
    }
  1. 增加汇编支持,CMakeLists.txt需要增加以下内容
    ……
    ENABLE_LANGUAGE(ASM)
    ……
    convert_asm.s
    ……
  1. 增加日志在android控制台输出,修改参见native-lib.cpp
  2. 主要函数说明如下
……
//模拟1920x1080的YUV数据
#define N   (1920*1080*3)
……

/**
 * C 版本测试函数
 */
void reference_convert(uint8_t *__restrict dest, uint8_t *__restrict src, int n)

……

/**
 * 修改部分为ARM指令后的测试函数
 */
void neon_convert(uint8_t *__restrict dest, uint8_t *__restrict src, int n) 

……

//纯ARM指令(汇编)版本函数
extern "C" void convert_asm_neon(uint8_t *dest, uint8_t *src, int n) __asm__("convert_asm_neon");

测试结果

 D/TEST_NEON: C version Time:22.684000ms
 D/TEST_NEON: Neon version Time:13.888000ms
 D/TEST_NEON: ASM version Time:0.986000ms

 D/TEST_NEON: C version Time:21.759001ms
 D/TEST_NEON: Neon version Time:13.948000ms
 D/TEST_NEON: ASM version Time:0.641000ms

 D/TEST_NEON: C version Time:21.688000ms
 D/TEST_NEON: Neon version Time:13.920000ms
 D/TEST_NEON: ASM version Time:0.656000ms

 D/TEST_NEON: C version Time:21.735001ms
 D/TEST_NEON: Neon version Time:13.958000ms
 D/TEST_NEON: ASM version Time:0.945000ms

测试结论

Neon相比C快1倍左右,ASM相比C快差不多20倍
备注:不同的CPU手机测试结果有一定差距,但ASM快很多倍是毋容置疑的。

参考

https://github.com/Lakers2005/test-neon
https://www.cnblogs.com/welen/articles/5155946.html
https://blog.csdn.net/u011913612/article/details/82495309
https://github.com/android/ndk-samples/tree/master/hello-neon

相关连接

ARM和NEON指令:NEON 技术可加速多媒体和信号处理算法
(如视频编码/解码、2D/3D 图形、游戏、音频和语音处理、图像处理技术、电话和声音合成)
,其性能至少为ARMv5 性能的3倍,为 ARMv6 SIMD性能的2倍。

推荐阅读更多精彩内容

  • 1.28幸福打卡第22天 1大年初一,中午妈妈做了几个菜,是很丰盛了,希望妈妈可以摆脱匮乏一直活出丰盛~2晚上没有...
    Daisy明阅读 51评论 0 0
  • ❤彩虹花的小精灵❤ 自从带领孩子们参与了彩虹花晨读《快把窗子打开》、《春天来了吗》、《春风》等诗歌的学习,我感觉彩...
  • 源代码GitHub源代码 1.本文目标 本文目标是为了让大家认识并理解观察者模式 2.基本套路 定义:定义了对象之...
    信仰年輕阅读 69评论 0 0
  • 我们目前只做了APP的页面,关于程序的开发还没有开始设计,也没有什么头绪,慢慢学习,好好加油
    401a1ed5d2be阅读 26评论 3 2