ってことで、Renderscriptは今どうなっているのかをまとめてみた。
一番の謎は、Google I/O 2013に「High Performance Applications with RenderScript」というセッションがあったこと。一言でいうと「Renderscriptはいつ使うの? 今でしょ! 今後も頑張って拡張しちゃうよ。期待しててね!」という内容。なんでセッション1つ設けたんでしょうね?
Renderscriptの紹介
Renderscriptって何やねん? ってところからお話する。単純に言うと「AndroidでGPU Computingを行うため開発環境」のこと。
もうちょっと詳しく書くと以下のようになる。
- 文法はC言語(C99)
- .RSファイルにコードを書いてJavaから呼び出す(NDKみたいだけど呼び出し方は緩い)
- LLVM/clang使ってるから、CPU、GPUの違いに左右されないよ!
- CPUよりめっちゃ早く計算できたりするよ!GPUで計算するからCPU負荷が減るよ!
- API 18から、GingerbreadでもRenderscript使えるようになるよ。でもGPUじゃなくてCPUで計算するからね!(Google I/O 2013の発表)
詳しいことはGoogleさんが2011年11月のLLVM開発者ミーティングで発表したPDFを読むのがわかりやすいかと。
今どうなっているの?
名称はRenderscriptなのだが、JellyBean(Android 4.2)の段階で正式サポートされているのはGPU Computing的な数学関数が中心となっている。以前はOpenGL|ESっぽい描画機能も持っていたのだがJellyBeanで非推奨となった。Renderが指す意味は一体どこへ行ったのだ…。
で、疑問に思っていた事の一つに「OpenCL採用せずにRenderscriptって作ったん?」てのがあったけど、その疑問に対する答えの一つがStackoverflowにあった。ざっくり言うと「AndroidはモバイルだしCPUやGPUなどは沢山のアーキテクチャを相手にしなきゃいかんから、OpenCLが前提としているハード構成などと違うからでね?」という感じ。なるほどねぇ。
今後どうなっていくの?
Mali-T604とRenderscriptを使って「ほらほら顔認識させても全然CPU負荷が上がらないよ!すごいでしょ」という動画もあるので、当面はそういう方面に使われていくかなー、という気がする。