Я написал приложение для обработки изображений для андроида (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
Спасибо, Матье
Вы попробовали? http://stackoverflow.com/a/28348062/3409441 – Terran
Да, я активировал openmp таким образом, проблема в том, что это замедляет циклы. –
Трудно сказать, что происходит без какого-либо кода. Попробуйте обычную многопоточность и посмотрите, дает ли вам ускорение. – Terran