プラットフォームに依存しない場合(デスクトップ、クラウド、モバイルなど)、速度が重要な場合は、OpenCLをGPGPU開発に使用すると便利です。私はGoogleがRenderScriptを代替としてプッシュすることを知っていますが、Androidでのみ利用可能であり、iOSに含まれる可能性は低いと思われます。
したがって、Android Apps。
唯一のAndroid OpenCLをサポートしていることがわかっているデバイスは、Mali T600ファミリーのチップに基づくものです(記事 こちら )。 OpenCL SDK 。どうやら、それもOpenCL 1.1の完全なプロファイルです。
Nexus 1 は、このようなチップを使用するデバイスです。 Samsung Exynos 5デュアルSoCはMali T604を使用しているため、これを使用するものはすべてMali T600 OpenCL SDKで使用できると思われます(自分で試したことがありません)。
OpenCLブログの作者は これを試してみる を試みているため、彼の一連の記事をフォローする価値があるかもしれません。
ただし、Android=でのOpenCLサポートは真新しい(2013年16月2日現在)なので、実験には優れていますが、サポートが増えるまで注意が必要です(バグが多いと言う人) OpenCL 1.1の最初のサポートは)
元の質問が行われてから時間が経ちましたが、これは多くの開発者にとってまだ質問だと思います。
答えには2つの側面があります。まず、残念ながら、GoogleはOpenCLを公式にサポートしていません。
次に、幸いなことに、多くのチップベンダーがOpenCLをサポートするためのライブラリを提供しています。現時点では、フラグシップおよび中間層のスマートフォン(Qualcomm Adreno GPU、ARM Mali GPU、またはImagination PowerVR GPU)のほとんど)にOpenCLライブラリが含まれています。
AndroidでOpenCLを使用するには、いくつかの手順があります。
主要なチップベンダー向けのOpenCLライブラリは、デバイス内にあります。以下は、OpenCLライブラリの場所です。
Qualcomm Adreno:
/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
PowerVR:
/system/vendor/lib/libPVROCL.so
CまたはC++を使用してOpenCLプログラムを作成する
C/C++コードをコンパイルするためのNDKプロジェクトを作成し、実行可能としてデバイス上でテストします。
NDKプログラム関数用のJNIインターフェースを作成します。
Androidプロジェクトを作成します。JavaコードでJNI関数を使用して、OpenCLに関連するネイティブ関数を呼び出します。
ソニーのチュートリアルは、参照するための良い情報源です。このチュートリアルで紹介されている手法は、Qualcomm Adreno GPUに適用できます。最小限の変更で、そのコードとメイクファイルは他のOpenCL対応デバイス(MaliやPowerVRなど)でも実行できます。
お役に立てれば。
Androidソニー開発者の世界でOpenCLデモ、ソース付きの完全なプロジェクト、画像の双方向フィルタリングがOpenCLで行われ、シングルスレッドのC実装と比較されています。ソニーのデバイスなどでサポートが期待されている記事も掲載されています。
論文:
記事のソース:
免責事項:私はソニーモバイルのコンサルタントです
2018年、openCLを使用してAndroid app with Android Studio。
Android StudioでopenCLを使用するには、いくつかのことを行う必要があります。
/<your_project>/app/src/main/jniLibs/<architecture>/
フォルダーにコピーします(自分でフォルダーを作成する必要があります)。Module(app)build.gradle
ファイルを設定します。
Android{
...
default_config{
externalNativeBuild{
cmake {
// Filter based on your device architecture
abiFilters 'armeabi-v7a'
}
}
...
}
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
...
}
代わりにRenderScript Computeを使用する必要があります。 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など)が必要または必要になる場合があります。
Qualcomm Adreno 300シリアルはすべて、OpenCL 1.1組み込みプロファイルをサポートしています。 OpenCLを使用するには、OpenCLがGoogleのJavaレイヤーでサポートされていないため、NDKコードを開発する必要があります。NDKコードの開発方法を知っている場合、OpenCLコードを記述するのはかなり簡単です。 SnapOpenを使用するHTC One、Moto X、Samsung Note/GalaxyバージョンなどのOpenCL対応デバイスからフェッチできるlibOpenCL.soを用意します。
KhronosはAndroidの公式サポートを含むOpenCL 2.0をリリースしました: https://www.khronos.org/news/press/khronos-releases-opencl-2.
OpenCLカーネルが含まれているオープンソースのARMコンピューティングライブラリ(ACL)を見てください: https://developer.arm.com/technologies/compute-library
ドキュメントサイトがあります: https://arm-software.github.io/ComputeLibrary/latest/
そしてgithubサイト: https://github.com/ARM-software/ComputeLibrary
Qualcomm SNPE SDKも探します(OpenCLを使用します: https://developer.qualcomm.com/forum/qdn-forums/software/snapdragon-neural-processing-engine-sdk/34526 ):- https://developer.qualcomm.com/docs/snpe/overview.html
https://www.youtube.com/watch?v=h3T1ekJ_iXM
モバイルアプリ用のTensorflow Liteも確認できます: https://www.tensorflow.org/lite/
多分将来的には、ACLの方法でOpenCLをサポートする予定です(現在はAndroid 8.1 NNAPIソリューション- https://www.slideshare.net/kstan2/open-source- nn-frameworks-on-cellphones ):
https://github.com/tensorflow/tensorflow/issues/18324
Tensorflow Lite GPUアクセラレーション-すべてのOSバージョンで動作しますか、それとも8.1のみで動作しますか?
http://jevois.org/qa/index.php?qa=2057&qa_1=can-tensorflow-lite-use-the-gp
Kotlinでプログラムされた良い例は次のとおりです: https://github.com/eddywm/KTFLITE
NNAPIまたはOpenGLも使用するcaffe2の場合、将来的にOpenCLに期待されます: https://github.com/laMia482/caffe2_Android