我正在使用本机代码在 Android 中进行一些图像压缩。由于各种原因,我不能使用预建库。
我使用 android-ndk-profiler 分析了我的代码,发现瓶颈是——令人惊讶的是——浮点运算!这是配置文件输出:
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls ms/call ms/call name
40.37 0.44 0.44 __addsf3
11.93 0.57 0.13 7200 0.02 0.03 EncodeBlock
6.42 0.64 0.07 535001 0.00 0.00 BitsOut
6.42 0.71 0.07 __aeabi_fdiv
6.42 0.78 0.07 __gnu_mcount_nc
5.50 0.84 0.06 __aeabi_fmul
5.50 0.90 0.06 __floatdisf
...
我用谷歌搜索了 __addsf3 ,显然它是一个软件浮点运算。呸。我对 ARMv6 架构核心做了更多的研究,除非我遗漏了什么,否则它没有硬件浮点支持。那么我可以在这里做些什么来加快速度呢?固定点?我知道这通常是用整数完成的,但我不确定如何转换我的代码来做到这一点。有没有我可以设置的编译器标志,所以它会这样做?欢迎提出其他建议。