Android Ndk Против Sdk Против Iphone

Среда Мы будем писать на MacOS, поскольку кармическая коала еще «пробуждается».

Eclipse Galileo, Android SDK 1.6r1 и NDK 1.6r1 установлены и настроены.

Мы будем писать на NDK 1.5, потому что доступен только HTC Magic (32A).

Это тестирование было написано с целью «проверить почву» перед портированием игры с iPhone на Android. Тестирование В качестве тестов были взяты следующие варианты:

  • Быстрая сортировка
  • Сортировка оболочки
  • Переворот массива
  • Вызов метода
  • Метод половинного деления
Почему такой выбор? Был выбран «метод половинного деления», для уравнения Y=3*cos(2*x-4) в интервале (-10;10) с точностью 10^(-15), поскольку в устройстве нет сопроцессора для ускорения вычислений с плавающей запятой, поэтому было интересно посмотреть, даст ли переход с Java на JNI прирост производительности.

Другое дело — большие объемы данных и большое количество вызовов «методов».

Для проверки рекурсии в сочетании с большим объемом данных использовалась быстрая сортировка, а для устранения рекурсии применялся алгоритм Шелла.

Для проверки производительности работы конкретно с данными мы используем обращение массива.

Чтобы оценить стоимость вызова «метода» JNI и Java, давайте вызовем фиктивные методы 10 000 раз.

Для сортировки мы используем заранее сгенерированный массив int из 10 000 элементов.

Результаты получены для симулятора (2,4ГГц Intel Core 2 Duo), HTC Magic (32A, 1.5, core 2.6.29+bfs), а также для iPhone3G (3.1).

Все методы тестирования были написаны на чистом C. Результаты

Симулятор

- КО SS Менять Дивизион 2 Пустой
JNI(сим) 10590 253735 699 210339 13895
ЯВА (сим) 100650 4573416 7861 334483 7745
Сим% 89,48 94,45 91,11 37,12 -79,41
* % — показывает, на сколько процентов быстрее JNI из Java

HTC Magic (32A 1.5, 2.6.29-myhero-bfs)

- КО SS Менять Дивизион 2 Пустой
JNI 7469 117139 880 109197 8885
ДЖАВА 63569 2902912 5959 213278 5193
% 88,25 95,96 85,23 48,8 -71,1
* % — показывает, на сколько процентов быстрее JNI из Java Время для платформы Android снималось с помощью функции java.lang.System.nanoTime(), для iPhone — с помощью mach_absolute_time().

Каждый тест запускался 30 раз, а результаты усреднялись.

Первый результат был пропущен, так как не соответствовал общему показателю, видимо, из-за специфики Java. Как видно из результатов, NDK очень эффективен при работе с большими объемами данных, также наблюдается большой прирост при переносе «математики» в JNI, единственный минус — «цена» вызова.

Симулятор

Android NDK против SDK против iPhone

HTC Магия

Android NDK против SDK против iPhone

А теперь сравним с айфоном, чудес ждать не стоит.

айфон

- КО SS Менять Дивизион 2 Пустой
HTC Магия JNI 7469 117139 880 109197 8885
айфон 33531 1310358 1820 22405 769
% 77,73 91,06 51,65 -387,38 -1055,4
* % — показывает, на сколько процентов быстрее работает Magic с iPhone На диаграмме не показан метод половинного деления, так как известно, что iPhone с его сопроцессором ускорения вычислений с плавающей запятой просто победит Magic, что мы и видим по результатам.

Пустые методы также удалены, поскольку компилятор iPhone хорошо оптимизирует «такой код».



Android NDK против SDK против iPhone

Результаты меня просто поразили.

Единственная потеря — в математике и оптимизации кода.

Думаю с выходом новых устройств первая проблема будет решена.

Исходники тестов для айфон И Андроид .

P.S. Как только появится возможность установить прошивку 1.6 на телефон, сравню OpenGL. Теги: #Android #sdk #NDK #iphone #разработка Android

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.