web-dev-qa-db-fra.com

Programmation GPU sur Android

Je n'ai aucune connaissance de la programmation GPU et j'aimerais avoir un aperçu de cela. Je dois développer un projet de traitement d'image, en travaillant sur le GPU des smartphones (sur Android), mais je ne sais pas par où commencer.

1) La programmation du GPU du smartphone et la programmation des autres GPU (Nvidia GeForce 9 par exemple) sont-elles égales?

2) J'ai entendu parler de calcul ou de programmation graphique pour GPU: quelle est la différence? Sont-ils égaux?

3) J'ai déjà configuré Eclipse pour développer des applications Android: de quels autres outils ai-je besoin?

4) La programmation GPU du smartphone (pour Android) est indépendante de l'appareil? Est-ce la même chose pour Samsung S4, LG G3 et autre Android?

5) De quelle bibliothèque ai-je besoin? J'ai entendu parler d'OpenCV et du pack Tegra de Nvidia.

Peux-tu m'aider avec ceci? Pouvez-vous également m'aider avec des liens ciblés?

25
Salva

1) La programmation du GPU du smartphone et la programmation des autres GPU (Nvidia GeForce 9 par exemple) sont-elles égales?

Pas toujours. Par exemple, selon les API et la plate-forme matérielle que vous utilisez, certains appareils mobiles vous permettent de développer exactement le même programme que pour le GPU de bureau.

Par exemple, si vous exécutez le programme CUDA sur des appareils Tegra K1/X1, ce serait presque la même chose que vous le feriez sur la GeForce 9.

Mais, si vous utilisez OpenCL, vous devez être prudent. Certains appareils mobiles ne prennent en charge que OpenCL Embedded Profile, ce qui signifie que les fonctionnalités sont limitées par rapport au GPU de bureau. Même si certains appareils mobiles prennent en charge le profil complet OpenCL, vous avez encore moins de ressources à gérer, par conséquent, le programme doit encore être modifié pour s'adapter aux plates-formes mobiles.

2) Je troupeau sur le calcul ou la programmation graphique pour GPU: quelle est la différence? Sont-ils égaux?

La programmation graphique se concentre davantage sur le rendu graphique. Le but est de dessiner quelque chose sur l'écran. Les principales API dont vous auriez besoin pour le téléphone seraient OpenGL ES pour Android, Metal pour iOS ou DX pour Windows.

Le calcul pour le GPU signifie que vous souhaitez terminer certaines tâches non liées au rendu graphique, vous devez plutôt calculer une équation ou calculer des valeurs à partir des numéros d'entrée. Par exemple, vous pouvez filtrer une image ou traiter une vidéo, etc. Les API principales pour le calcul sont OpenCL, CUDA et Metal.

3) J'ai déjà configuré Eclipse pour développer des applications Android: de quels autres outils ai-je besoin?

Vous avez besoin de Android NDK bien sûr. Vous avez besoin des bibliothèques OpenCL, ou SDK pour l'appareil mobile que vous avez.

4) La programmation GPU du smartphone (pour Android) est indépendante de l'appareil? C'est la même chose pour Samsung S4, LG G3, et autre Android appareil?

Bien sûr, la capacité de l'appareil a une énorme différence dans ce que vous pouvez faire. La principale différence réside dans le chipset utilisé dans le téléphone. Cela déterminera quel SDK vous devez utiliser et les fonctionnalités matérielles seront très différentes.

Une autre chose à noter est que la programmation GPU n'est généralement pas portable en termes de performances en raison de l'énorme différence matérielle. Donc, un code source très bien optimisé sur un téléphone peut ne pas être le meilleur sur un autre téléphone.

5) De quelle bibliothèque ai-je besoin? Je rassemble OpenCV et Tegra pack de Nvidia.

OpenCV est une bibliothèque de vision par ordinateur. Que vous en ayez besoin ou non dépend des types d'algorithmes sur lesquels vous travaillez. Si vos applications s'appuient fortement sur certains algorithmes de traitement d'image et de vision par ordinateur, vous pouvez trouver OepnCV utile. Mais vous pouvez certainement toujours commencer avec vos propres bibliothèques simples.

Tegra NVPack n'a rien de spécial. Il s'agit simplement d'un ensemble de logiciels/SDK contenant Android SDK de développement, NDK, IDE et outils, ainsi que les SDK de NVidia. Vous pouvez toujours configurer votre propre environnement en installant des SDK et outils séparés. Mais si que vous développez pour les plates-formes NVidia, le NVPack pourrait être plus facile pour vous de commencer.

17
Robert Wang

Un moyen simple d'accéder au GPU dans Android consiste à utiliser OpenGL ES. Le SDK Android expose tous les OpenGL ES dans Java https://www.khronos.org/opengles/sdk/docs/man/

OpenGL ES vous permet d'écrire des shaders en GLSL (Open GL Shading Language) et de le compiler sur le GPU lors de l'exécution. https://www.opengl.org/documentation/glsl /

Ce code GLSL s'exécute directement sur le GPU.

Pour plus d'informations sur OpenGL ES dans Android il peut être trouvé dans le Android Docs http://developer.Android.com/guide/ sujets/graphiques/opengl.html

Il s'agit d'une approche très native. L'utilisation des bibliothèques dépend entièrement de ce que vous voulez réaliser avec le GPU

4
Mitch Dart

Android utilise OpenGL ES (Open Graphics Libary for Embedded Systems)

Il existe différentes versions d'OpenGL ES. Je recommande d'utiliser 2.0, mais vous pouvez également utiliser 1.0 ou des versions supérieures.

La plupart des téléphones prennent en charge 2.0, vous avez plus d'options et c'est plus rapide que 1.0

L'apprentissage d'OpenGL est difficile et peut prendre un certain temps. Voici un bon tutoriel pour avoir un aperçu: http://blog.db-in.com/all-about-opengl-es-2-x-part-1/

Les smartphones Apple utilisent également OpenGL ES, donc si vous l'apprenez pour Android vous pouvez également l'utiliser pour les iPhone).

Et oui, tous les appareils Android utilisent OpenGL.

3
Alexanus