Android: характеристики Native/JNI-кода меняются с одного телефона на другой
Привет всем, у меня проблема с моей библиотекой JNI. Время выполнения одного и того же кода меняется с одного телефона на другой. Я думал, что это было только потому, что мы тестировали на старом телефоне, но недавно я запустил htc legend, и весь код jni был медленным...
Я запускаю профилировщик и его разница между днем и ночью: на некоторых телефонах функции jni занимают от 15% до 20%, а на других телефонах - 40% и 50% для тех же условий...
У кого-нибудь есть объяснение?
2 ответа
Если один из телефонов использует компилятор JIT (Just In Time), добавленный в Foryo (2.2), он должен быть намного быстрее, чем ваши старые. Вы тестируете его, используя ту же версию Android?
Кроме того, некоторые устройства лучше в математике с плавающей точкой, чем другие. Устройства, которые не реализуют FPU, будут эмулировать операции с плавающей запятой. Здесь вы можете найти хороший пост в блоге об этом: http://www.badlogicgames.com/wordpress/?p=71.
Существует множество источников о том, как реализовать систему с плавающей запятой с использованием арифметики с фиксированной запятой: http://en.wikipedia.org/wiki/Fixed-point_arithmetic
Процессоры, конечно, не созданы равными; у них разные каналы, скорости, кэширование и тому подобное. Очевидное объяснение заключается в том, что это процессор.
Кроме того, общесистемные вещи могут повлиять на обработку - если, скажем, вы обрабатываете изображение, снятое камерой с помощью JNI, размер изображения может зависеть от устройства.
Кроме того, вы должны проверить, что вы измеряете время нити и время настенных часов; если посмотреть на временные интервалы относительно частей кода, которые являются Java, вы можете увидеть относительное ускорение в Java (например, JIT в Android 2.2), а не замедление в JNI.