title: How to improve the poor performances of OpenMP on Android?
body: <p>I wrote a image processing app for android (<a href="https://play.google.com/store/apps/details?id=cv.cvExperiments" rel="nofollow">https://play.google.com/store/apps/details?id=cv.cvExperiments</a>) with some C++ code wrapped with JNI. To get some speedup on multicore processors, I annotated expensive loops with openmp "parallel for" directives. </p>
  
  <p>The thing is that on x86, I get some speedup ranging from x3 to x5 on a 4cores proc, but on Android, activating OpenMP (with -fopenmp) does no give any speedup on ARM 32bits and even slow down the code on a 64bits armv8 snapdragon 810.</p>
  
  <p>Did I miss something ? Does anybody could ever observe speedups on android+arm comparable to x86 cpus?</p>
  
  <p>There is lots of tutorial on internet on how to activate OpenMP but no benchmark showing speedups. any pointers?</p>
  
  <p>The only relevant piece of information I found is a benchmark of the OpenMP overhead on armv8, and they also noticed some pretty high overhead :
  <a href="https://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis" rel="nofollow">https://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis</a></p>
  
  <p>Thanks,
  Matthieu</p>