AGP #1
Android で GPU programming をするにはどうするんじゃろ、というのを調べる試み。といっても Android と一般化するとほぼ不可能であることが知られているので Pixel 限定で。自分的にはそれで問題なし。
特に何も見ずに候補を考えてみる。
- OpenGL - いちおう GPGPU できることが知られている。
- Vulkan - 同上。
- OpenCL. SDK には入ってないが, Qcom とか ARM とかには SDK がある。ただ一般開発者は使うえるものなのだろうか。
- NNAPI - NN 特化だが、いちおう計算を投げることはできる。
- RenderScript ... はお亡くなりになりましたので無視。
常識的に考えると OpenCL が動くなら一番妥当。ただ常識が通じないのが Android の世界である。
TensorFlow Lite はどうしているのか?
"GPU Delegate" というのがある。実装は GL と CL の両方あるらしい。
CL はどうしているかというと・・・
- KhronosGroup/OpenCL-Headers: Khronos OpenCL-Headers
この Khronos のヘッダを持ってきて使い、 - tensorflow/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.cc at master · tensorflow/tensorflow
実装は OpenCL-pixel.so を dlopen() して使う。うげー。 - 一方で ARM とかから proprietary な SDK を持ってくるようなことはしなくて良いっぽいので、まあ我慢してやれということでしょうかね。
GL, Vulkan はもうちょっとマトモな方法がありそうではあるが、まずはこの pixel specific hack を動かしてみるかな。
次は何らかの standalone のバイナリを実装してみるべし。
- Android Studio をインストールします・・・ NDK も入れます。
- Bazel ... というか Bazelisk というやつをインストールします。
- まずは hello しましょう。Bazel Tutorial: Build an Android App
- ここまで・・・。