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
Avez-vous essayé? http://stackoverflow.com/a/28348062/3409441 – Terran
Oui, j'ai activé openmp de cette façon, le problème est que cela ralentit les boucles. –
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