2016-06-23 4 views
3

アンドロイド(https://play.google.com/store/apps/details?id=cv.cvExperiments)用の画像処理アプリケーションを、JNIでラップされたいくつかのC++コードで作成しました。マルチコアプロセッサで高速化するために、高価なループにopenmpの "parallel for"ディレクティブを付け加えました。AndroidでのOpenMPのパフォーマンス低下を改善するには?

問題は、x86では4cores procでx3からx5までのいくつかのスピードアップが得られるが、AndroidではOpenMP(-fopenmp)を起動するとARM32bitsで速度が上がらず、コードも遅くなる64ビットのarmv8スナップドラゴンで810.

私は何かを見逃しましたか?誰もx86 CPUに匹敵するアンドロイド+アームのスピードアップを観察することができましたか?

インターネット上でOpenMPをアクティブにする方法については多くのチュートリアルがありますが、スピードアップを示すベンチマークはありません。任意のポインタ? (小さなベンチマーク後 https://wiki.linaro.org/WorkingGroups/Middleware/Graphics/GPGPU/Docs/OpenMPforARMv8PortAnalysis

おかげで、 マチュー

+0

これを試しましたか? http://stackoverflow.com/a/28348062/3409441 – Terran

+0

はい、私はこの方法でopenmpを有効にしましたが、問題はループが遅くなることです。 –

+0

コードなしで何が起こっているのかを伝えるのは難しいです。従来のマルチスレッドを試して、それが高速化をもたらすかどうかを確認してください。 – Terran

答えて

0

私が見つけた情報の唯一の関連部分はarmv8上のOpenMPのオーバーヘッドのベンチマークである、と彼らはまた、いくつかの非常に高いオーバーヘッドに気づきましたhttps://gist.github.com/matt-42/30b7caf73c345c28e55b7cfd82f5540c)、私は8コアarmv8でx2のスピードアップを観察することができました。結論として、OpenMPを使用してデスクトップCPUを高速化することができれば、ARM CPUで同様の高速化が見られるということではありません。

関連する問題