web-dev-qa-db-ja.com

AndroidでOpenCLを使用する方法

プラットフォームに依存しない場合(デスクトップ、クラウド、モバイルなど)、速度が重要な場合は、OpenCLをGPGPU開発に使用すると便利です。私はGoogleがRenderScriptを代替としてプッシュすることを知っていますが、Androidでのみ利用可能であり、iOSに含まれる可能性は低いと思われます。

したがって、Android Apps。

29
Rodja

唯一の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の最初のサポートは)

13
prunge

元の質問が行われてから時間が経ちましたが、これは多くの開発者にとってまだ質問だと思います。

答えには2つの側面があります。まず、残念ながら、GoogleはOpenCLを公式にサポートしていません。

次に、幸いなことに、多くのチップベンダーがOpenCLをサポートするためのライブラリを提供しています。現時点では、フラグシップおよび中間層のスマートフォン(Qualcomm Adreno GPU、ARM Mali GPU、またはImagination PowerVR GPU)のほとんど)にOpenCLライブラリが含まれています。

AndroidでOpenCLを使用するには、いくつかの手順があります。

  1. デバイスにOpenCLライブラリがあるかどうかを確認します。これは OpenCL-Z Android を使用して実行できます。これは、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
  1. CまたはC++を使用してOpenCLプログラムを作成する

  2. C/C++コードをコンパイルするためのNDKプロジェクトを作成し、実行可能としてデバイス上でテストします。

  3. NDKプログラム関数用のJNIインターフェースを作成します。

  4. Androidプロジェクトを作成します。JavaコードでJNI関数を使用して、OpenCLに関連するネイティブ関数を呼び出します。

ソニーのチュートリアルは、参照するための良い情報源です。このチュートリアルで紹介されている手法は、Qualcomm Adreno GPUに適用できます。最小限の変更で、そのコードとメイクファイルは他のOpenCL対応デバイス(MaliやPowerVRなど)でも実行できます。

お役に立てれば。

12
Robert Wang

Androidソニー開発者の世界でOpenCLデモ、ソース付きの完全なプロジェクト、画像の双方向フィルタリングがOpenCLで行われ、シングルスレッドのC実装と比較されています。ソニーのデバイスなどでサポートが期待されている記事も掲載されています。

論文:

お使いのAndroidアプリ)のパフォーマンスを向上させる

記事のソース:

OpenClへのソースAndroidプロジェクト

免責事項:私はソニーモバイルのコンサルタントです

5
Magnus

2018年、openCLを使用してAndroid app with Android Studio。

Android StudioでopenCLを使用するには、いくつかのことを行う必要があります。

  1. お使いのデバイスがopenCLをサポートしているかどうか、OpenCL-Zを使用しているバージョンを確認してくださいAndroidそして、Robert Wangが言ったように、ビルド済みライブラリをコンピューターにコピーします。
  2. ダウンロードAndroid Studio。
  3. プロジェクトのC/C++サポートを作成します。
  4. LibOpenCL.soを/<your_project>/app/src/main/jniLibs/<architecture>/フォルダーにコピーします(自分でフォルダーを作成する必要があります)。
  5. ネイティブC/C++ファイルがまだ作成されていない場合は作成し、Cmakeのビルド済みライブラリにリンクします。また、ネイティブのC/C++ファイルをAndroidプロジェクトのライブラリとして追加します。 https://developer.Android.com/studio/projects/configure-cmake
  6. 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']
          }
       }
       ...
    }
    
5
Khoa Tran

代わりに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など)が必要または必要になる場合があります。

4
silverclaw

Qualcomm Adreno 300シリアルはすべて、OpenCL 1.1組み込みプロファイルをサポートしています。 OpenCLを使用するには、OpenCLがGoogleのJavaレイヤーでサポートされていないため、NDKコードを開発する必要があります。NDKコードの開発方法を知っている場合、OpenCLコードを記述するのはかなり簡単です。 SnapOpenを使用するHTC One、Moto X、Samsung Note/GalaxyバージョンなどのOpenCL対応デバイスからフェッチできるlibOpenCL.soを用意します。

2
Hunter Wang

KhronosはAndroidの公式サポートを含むOpenCL 2.0をリリースしました: https://www.khronos.org/news/press/khronos-releases-opencl-2.

1
peter rautek

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

0
42n4