2016-06-23 2 views
3

J'ai écrit une application de traitement d'image pour android (https://play.google.com/store/apps/details?id=cv.cvExperiments) avec du code C++ encapsulé avec JNI. Pour obtenir une accélération sur les processeurs multicœurs, j'ai annoté les boucles coûteuses avec les directives "parallel for" d'openmp. La chose est que sur x86, j'obtiens une accélération allant de x3 à x5 sur un proc 4cores, mais sur Android, activer OpenMP (avec -fopenmp) ne donne aucune accélération sur ARM 32bits et même ralentir le code sur un 64bits snapdragon armv8 810.Comment améliorer les mauvaises performances d'OpenMP sur Android?

Ai-je manqué quelque chose? Est-ce que quelqu'un pourrait jamais observer des accélérations sur Android + bras comparable à x86 CPU?

Il y a beaucoup de tutoriel sur internet sur comment activer OpenMP mais pas de benchmark montrant les accélérations. des pointeurs?

La seule information pertinente, j'ai trouvé est une référence de la surcharge OpenMP sur ARMv8, et ils ont aussi remarqué des frais généraux assez élevé: https://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis

Merci, Matthieu

+0

Avez-vous essayé? http://stackoverflow.com/a/28348062/3409441 – Terran

+0

Oui, j'ai activé openmp de cette façon, le problème est que cela ralentit les boucles. –

+0

Difficile de dire ce qui se passe sans code. Essayez le multi-threading conventionnel et voyez si cela vous donne une accélération. – Terran

Répondre

0

Après une petite référence (https://gist.github.com/matt-42/30b7caf73c345c28e55b7cfd82f5540c), j'ai pu observer une accélération de x2 sur un armv8 de 8 noyaux. Je suppose que la conclusion est que si vous pouvez obtenir une accélération sur le processeur de bureau avec OpenMP, cela ne signifie pas que vous verrez des accélérations similaires sur les processeurs ARM.