測試代碼
測試代碼倉庫地址 https://gitee.com/chenjim/NeonTest
參考自 https://github.com/Lakers2005/test-neon
主要修改說明:
- 此處不支持x86、arm64-v8a等so,只支持armeabi-v7束倍,需要在build.gradle增加如下內(nèi)容
ndk {
abiFilters "armeabi-v7a"
}
- 增加匯編支持,CMakeLists.txt需要增加以下內(nèi)容
……
ENABLE_LANGUAGE(ASM)
……
convert_asm.s
……
- 增加日志在android控制臺輸出敷扫,修改參見native-lib.cpp
- 主要函數(shù)說明如下
……
//模擬1920x1080的YUV數(shù)據(jù)
#define N (1920*1080*3)
……
/**
* C 版本測試函數(shù)
*/
void reference_convert(uint8_t *__restrict dest, uint8_t *__restrict src, int n)
……
/**
* 修改部分為ARM指令后的測試函數(shù)
*/
void neon_convert(uint8_t *__restrict dest, uint8_t *__restrict src, int n)
……
//純ARM指令(匯編)版本函數(shù)
extern "C" void convert_asm_neon(uint8_t *dest, uint8_t *src, int n) __asm__("convert_asm_neon");
測試結(jié)果
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
測試結(jié)論
Neon相比C快1倍左右,ASM相比C快差不多20倍
備注:不同的CPU手機(jī)測試結(jié)果有一定差距,但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