ネイティブコードを使用して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アーキテクチャコアについてさらに調査しましたが、何かを見逃さない限り、ハードウェア浮動小数点はサポートされていません。では、これをスピードアップするためにここで何ができるでしょうか?固定小数点?これは通常整数で行われることは知っていますが、コードを変換してそれを行う方法がよくわかりません。それを行うために設定できるコンパイラフラグはありますか?他の提案を歓迎します。