Слишком медленно работает код C++ на Android. Это нормально?

Всем привет! Начитаю изучать программирование под Android с применением библиотеки OpenCV. Скорость работы Native кода меня разочаровала. Ручной перебор пикселей работает примерно в 10 раз медленнее, чем на процессоре х86. Оптимизацию в CMakeLists.txt включал, но не знаю правильно ли это было сделано. Далее я замерил скорость работы функции:
cv::cvtColor(mat, gray, cv::COLOR_RGBA2GRAY);
Она тоже примерно в 10 раз отстаёт.
А размытие по гауссу с радиусом 15 отстаёт по скорости аж в 50 раз:
cv::GaussianBlur(gray, gray_blurred, cv::Size(), 15.0);


Я только на днях начал изучать программирование под андроид и только вчера попробовал NDK, поэтому многое для меня непривычно. Такое сильное отставание смартфонов от ПК -- это нормально? Я ожидал, что замедление будет раза в 2-4, тем более для Native, но не в 50 раз. Есть подозрение, что библиотека на ПК активно использует векторные инструкции и, возможно, многопоточность, в то время как на смартфоне эти фичи по умолчанию почему-то не задействованы, но это вряд ли. Мне сейчас просто интересно мнение тех, кто пишет на C++ под андроид и ПК.
  • Вопрос задан
  • 198 просмотров
Пригласить эксперта
Ответы на вопрос 4
@Deiwan
Андроид просто платформа послабее винды(или линукса) да и само устройство оперативки меньше имеет чем комп, поетому я предполагаю что проблема в ОС или ОЗУ, а не в фичах
Ответ написан
Комментировать
maaGames
@maaGames
Погроммирую программы
1. одинаковый исходный код на х86 и ARM может работать с ОЧЕНЬ разной производительностью
2. java код в целом может работать быстрее, чем нативный С++, если время на вызов и преобразование данных будет больше, чем время работы нативной функции. Т.е. вызовы нативных функций из ява кода может ухудшить производительность, а не улучшить.
Ответ написан
@402d
начинал с бейсика на УКНЦ в 1988
Андроид заточен под телефон. Служба телефонии должна работать надежно. Остальное там просто гость.
Даже программа, с которой сейчас взаимодействует пользователь может быть убита в любой момент.
Вся архитектура андроид приложения строиться над тем, что сейчас делает пользователь. Как только окно уходит
под другое, так сразу же оно переводится в состояние остановлено.
Возможности фоновые процессов в новых версиях зарезали по самое горлышко. Из-за попыток продлить время работы от батерии, теперь почти не возможно сделать то-то долго работающее в фоне. А ресурсы процессора достаются по остаточному принципу.
Ответ написан
@ntllct Автор вопроса
Нашёл бэнчмарки для своих процессоров. Такой разрыв в скорости -- это не нормально. Позже буду детальнее изучать проблему.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы