如何改善Android上OpenMP性能不佳的问题?

Mat*_*u G 6 c++ parallel-processing android multicore openmp

我用一些用 JNI 包装的 C++ 代码为 android 编写了一个图像处理应用程序(https://play.google.com/store/apps/details?id=cv.cvExperiments)。为了在多核处理器上获得一些加速,我用 openmp “parallel for” 指令注释了昂贵的循环。

问题是在 x86 上,我在 4cores proc 上获得了从 x3 到 x5 的一些加速,但是在 Android 上,激活 OpenMP(使用 -fopenmp)在 ARM 32 位上没有任何加速,甚至在 64 位 armv8 上减慢代码骁龙810。

我错过了什么 ?有没有人可以观察到与 x86 cpu 相当的 android+arm 加速?

互联网上有很多关于如何激活 OpenMP 的教程,但没有显示加速的基准。任何指针?

我发现的唯一相关信息是 armv8 上 OpenMP 开销的基准测试,他们还注意到一些相当高的开销:https ://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis

谢谢,马修

Mat*_*u G 1

经过一个小型基准测试(https://gist.github.com/matt-42/30b7caf73c345c28e55b7cfd82f5540c)后,我可以观察到 8 核 Armv8 上的速度提升了 2 倍。我认为结论是,如果您可以使用 OpenMP 在桌面 CPU 上获得一些加速,这并不意味着您会在 ARM CPU 上看到类似的加速。