2016-06-23 2 views
3

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

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

Я что-то пропустил? Может ли кто-нибудь когда-либо наблюдать ускорение на андроиде +, сравнимом с x86 cpus?

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

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

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

+0

Вы попробовали? http://stackoverflow.com/a/28348062/3409441 – Terran

+0

Да, я активировал openmp таким образом, проблема в том, что это замедляет циклы. –

+0

Трудно сказать, что происходит без какого-либо кода. Попробуйте обычную многопоточность и посмотрите, дает ли вам ускорение. – Terran

ответ

0

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

Смежные вопросы