プラットフォームの独立性 (デスクトップ、クラウド、モバイルなど) については、速度が重要な場合に GPGPU 開発に OpenCL を使用することをお勧めします。Google が RenderScript を代替手段としてプッシュしていることは知っていますが、これは Android でのみ利用可能であり、iOS に含まれる可能性は低いようです。
したがって、Android アプリ内で OpenCL コードを実行するソリューションを探しています。
プラットフォームの独立性 (デスクトップ、クラウド、モバイルなど) については、速度が重要な場合に GPGPU 開発に OpenCL を使用することをお勧めします。Google が RenderScript を代替手段としてプッシュしていることは知っていますが、これは Android でのみ利用可能であり、iOS に含まれる可能性は低いようです。
したがって、Android アプリ内で OpenCL コードを実行するソリューションを探しています。
私が知っている Android デバイスで OpenCL をサポートしているのは、Mali T600 ファミリのチップをベースにしたものだけです (記事はこちら)。OpenCL SDKがあります。どうやらOpenCL 1.1のフルプロファイルでもあるようです。
Nexus 10はそんなチップを使った端末です。Samsung Exynos 5 デュアル SoC は Mali T604 を使用するため、これを使用していると思われるものはすべて Mali T600 OpenCL SDK で使用できます (自分でこれを試したことはありません)。
OpenCL ブログの著者はこれを試してみようとしているので、彼の一連の記事に従う価値があるかもしれません。
しかし、Android での OpenCL サポートはまったく新しい (2013 年 2 月 16 日現在) ため、実験には最適ですが、サポートが増えるまでは慎重になる価値があるかもしれません (OpenCL 1.1 の最初のサポートがどれほどバグがあるかを誰が言いますか)。
最初の質問が出されてから時間が経ちましたが、これはまだ多くの開発者にとっての質問だと思います。
答えには2つの側面があります。まず、残念ながら、Google は OpenCL を正式にサポートしていません。
次に、幸いなことに、多くのチップ ベンダーが OpenCL をサポートするライブラリを提供しています。現時点では、フラグシップおよびミドル層のスマートフォン (Qualcomm Adreno GPU、ARM Mali GPU、または Imagination PowerVR GPU を搭載) のほとんどに OpenCL ライブラリが含まれています。
Android で OpenCL を使用するには、いくつかの手順があります。
主要なチップ ベンダーの OpenCL ライブラリは、デバイス内にあります。 OpenCL ライブラリの場所は次のとおりです。
クアルコムアドレノ:
/system/vendor/lib/libOpenCL.so
or /system/lib/libOpenCL.so (older devices)
ARM マリ:
/system/vendor/lib/egl/libGLES_mali.so
or /system/lib/egl/libGLES_mali.so
パワーVR:
/system/vendor/lib/libPVROCL.so
C または C++ を使用して OpenCL プログラムを記述します。
NDK プロジェクトを作成して C/C++ コードをコンパイルし、デバイス上で実行可能ファイルとしてテストします。
NDK プログラム関数の JNI インターフェイスを作成します。
Java コードで JNI 関数を使用して、OpenCL に関連するネイティブ関数を呼び出す Android プロジェクトを作成します。
sony のチュートリアルは、参照するのに適したソースです。そのチュートリアルで紹介されている手法は、どの Qualcomm Adreno GPU にも適用できます。最小限の変更で、そのコードとメイクファイルは他の OpenCL 対応デバイス (Mali や PowerVR など) でも実行できます。
お役に立てれば。
Sony developer world で Android OpenCL のデモを確認してください。ソース付きの完全なプロジェクトでは、OpenCL で画像のバイラテラル フィルタリングが行われ、シングル スレッドの C 実装と比較されます。ソニーのデバイスなどでどのような種類のサポートが期待されているかについての情報も、この記事で見つけることができます。
論文:
OpenCL で Android アプリのパフォーマンスを向上
記事のソース:
免責事項: 私はソニーモバイルのコンサルタントです
代わりにRenderScriptComputeを使用する必要があります:http: //developer.android.com/guide/topics/renderscript/compute.html
ライブラリ(または機能)がターゲットデバイスで使用できない可能性があるため、OpenCLの使用はあまり安全ではありません。正直なところ、Androidデバイスが実際にそれをサポートしているかどうかさえわかりません。デバイス上のGPUが実行したいプログラムを実行できない場合、RenderScriptはCPU計算にフォールバックします。
ただし、それでもOpenCLを使用したい場合は、 http: //www.pgroup.com/lit/articles/insider/v4n2a3.htmに役立つ可能性があります。
適切に制御するには、デバイス固有のSDK(nVidia Tegra SDKなど)が必要になる場合があります。