Я делаю сжатие изображения в Android с помощью собственного кода. По разным причинам я не могу использовать предварительно созданную библиотеку.Ускорение операций с плавающей запятой (Android ARMv6)
Я профилировал свой код с помощью андроида-ndk-профайлера и обнаружил, что узкое место - удивительно - операции с плавающей запятой! Вот вывод профиля:
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, и, если я не пропустил что-то, он не поддерживает аппаратную поддержку с плавающей запятой. Так что я могу сделать здесь, чтобы ускорить это? Фиксированная точка? Я знаю, что это обычно делается с целыми числами, но я не уверен, как конвертировать мой код для этого. Есть ли флаг компилятора, который я мог бы установить, чтобы он это сделал? Другие предложения приветствуются.