web-dev-qa-db-ja.com

AndroidデバイスでのGPUプログラミング

私はGPUプログラミングの知識がなく、この概要を教えてください。スマートフォンのGPU(Androidデバイス))で動作する画像処理のプロジェクトを開発する必要がありますが、どこから始めればよいかわかりません。

1)スマートフォンのGPUのプログラミングと他のGPU(Nvidia GeForce 9など)のプログラミングは同じですか?

2)GPUの計算またはグラフィックプログラミングについて聞いたことがありますが、何が違うのですか?それらは等しいですか?

3)Androidアプリを開発するためにすでにEclipseを設定しました:他にどんなツールが必要ですか?

4)スマートフォンのGPUプログラミング(Android用)はデバイスに依存しませんか? Samsung S4、LG G3、および他のAndroidデバイスの場合も同じですか?

5)どのライブラリが必要ですか? NvidiaのOpenCVとTegraパックについて聞いたことがあります。

これを手伝ってくれませんか?また、ターゲットを絞ったリンクを手伝っていただけますか?

25
Salva

1)SmartphoneのGPUのプログラミングと他のGPU(Nvidia GeForce 9など)のプログラミングは同じですか?

常にではない。たとえば、使用するAPIとハードウェアプラットフォームに応じて、一部のモバイルデバイスでは、デスクトップGPUの場合とまったく同じプログラムを開発できます。

たとえば、Tegra K1/X1デバイスでCUDAプログラムを実行する場合、それはGeForce 9で行う場合とほぼ同じです。

ただし、OpenCLを使用する場合は注意が必要です。一部のモバイルデバイスはOpenCL組み込みプロファイルのみをサポートしています。つまり、デスクトップGPUに比べて機能が制限されています。一部のモバイルデバイスがOpenCLフルプロファイルをサポートしている場合でも、処理するリソースが少ないため、モバイルプラットフォームに適応するようにプログラムを変更する必要があります。

2)私はGPUの計算またはグラフィックプログラミングについて群れを作っています。違いは何ですか?それらは等しいですか?

グラフィックスプログラミングは、グラフィックスレンダリングに重点を置いています。目標は、画面に何かを描くことです。電話に必要な主要なAPIは、OpenGL ES for Android、Metal for iOS、またはDX for Windowsです。

GPUの計算は、グラフィックスレンダリングに関連しないいくつかのタスクを終了することを意味します。代わりに、いくつかの方程式を計算するか、入力数値からいくつかの値を計算する必要があります。たとえば、画像をフィルタリングしたり、ビデオなどを処理したりできます。コンピューティングの主要なAPIは、OpenCL、CUDA、およびMetalです。

3)Androidアプリを開発するためにEclipseをすでに設定しました:他にどんなツールが必要ですか?

AndroidもちろんNDKが必要です。お使いのモバイルデバイス用のOpenCLライブラリまたはSDKが必要です。

4)スマートフォンのGPUプログラミング(Android用)はデバイスに依存しませんか? Samsung S4、LG G3、および他のAndroidデバイス?

もちろん、デバイスの機能には、実行できる機能に大きな違いがあります。主な違いは、電話で使用されるチップセットにあります。これにより、使用するSDKが決まり、ハードウェア機能はかなり異なります。

注意すべきもう1つの点は、GPUプログラミングは、ハードウェアの大きな違いにより、通常、パフォーマンスの移植性がないことです。したがって、ある電話機で非常に適切に最適化されたソースコードは、別の電話機では最適ではない可能性があります。

5)私が必要とするライブラリーは何ですか?.

OpenCVはコンピュータービジョンライブラリです。必要かどうかは、使用するアルゴリズムの種類によって異なります。アプリケーションが画像処理やコンピュータービジョンアルゴリズムに大きく依存している場合は、OepnCVが役立つことがあります。しかし、間違いなく、常に独自の単純なライブラリから始めることができます。

Tegra NVPackは特別なものではありません。これは、Android開発SDK、NDK、IDE、ツール、およびNVidiaのSDKを含むソフトウェア/ SDKバンドルです。別のSDKとツールをインストールすることで、いつでも独自の環境をセットアップできます。ただし、 NVidiaプラットフォーム用に開発する場合、NVPackを使用する方が簡単です。

17
Robert Wang

AndroidでGPUにアクセスする簡単な方法は、OpenGL ESを使用することです。Android SDKは、すべてのOpenGL ESをJava https://www.khronos.org/opengles/sdk/docs/man/

OpenGL ESを使用すると、GLSL(Open GL Shading Language))でシェーダーを記述し、実行時にGPUでコンパイルできます https://www.opengl.org/documentation/glsl /

このGLSLコードはGPUで直接実行されます。

AndroidのOpenGL ESの詳細については、Android Docs http://developer.Android.com/guide/ topics/graphics/opengl.html

これは非常にネイティブなアプローチです。ライブラリの使用は、GPUで実現したいことに完全に依存しています

4
Mitch Dart

AndroidはOpenGL ES(Open Systems Libary for Embedded Systems)を使用しています

OpenGL ESには異なるバージョンがあります。 2.0の使用をお勧めしますが、1.0以上のバージョンを使用することもできます。

ほとんどの電話は2.0をサポートしています。オプションが多く、1.0より高速です。

OpenGLの学習は難しく、時間がかかる場合があります。以下は概要を理解するための良いチュートリアルです: http://blog.db-in.com/all-about-opengl-es-2-x-part-1/

Apple SmartphonesもOpenGL ESを使用しているので、Androidで学習すれば、iphoneでも使用できます。

はい、すべてのAndroidデバイスはOpenGLを使用しています。

3
Alexanus