Как улучшить плохие показатели OpenMP на Android?

Я написал приложение для обработки изображений для Android (https://play.google.com/store/apps/details?id=cv.cvExperiments) с некоторым кодом C ++, завернутым в JNI. Чтобы ускорить работу многоядерных процессоров, я аннотировал дорогие циклы с директивами openmp «parallel for».

Дело в том, что на x86 я получаю некоторое ускорение от x3 до x5 на процессоре 4cores, но на Android активация OpenMP (с -fopenmp) не дает никакого ускорения на ARM 32bit и даже замедляет код на 64bit armv8 Snapdragon 810.

Я что-то пропустил ? Кто-нибудь когда-нибудь мог наблюдать ускорения на андроид + руку, сравнимые с процессором x86?

В Интернете есть много учебников по активации OpenMP, но нет тестов, показывающих ускорения. какие-нибудь указатели?

Единственная релевантная часть информации, которую я нашел, это тест производительности OpenMP на armv8, и они также заметили некоторые довольно высокие издержки:
https://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis

Спасибо,
Матье

3

Решение

После небольшой отметки (https://gist.github.com/matt-42/30b7caf73c345c28e55b7cfd82f5540c), Я мог наблюдать ускорение x2 на 8-ядерном armv8. Я полагаю, что вывод таков: если вы можете добиться некоторого ускорения на настольном процессоре с помощью OpenMP, это не значит, что вы увидите аналогичное ускорение на процессорах ARM.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector