web-dev-qa-db-fra.com

Comment utiliser OpenCL sur Android?

Pour l'indépendance des plates-formes (bureau, cloud, mobile, ...), il serait intéressant d'utiliser OpenCL pour le développement GPGPU lorsque la vitesse importe vraiment. Je sais que Google propose RenderScript comme alternative, mais il semble être uniquement disponible pour Android et il est peu probable qu'il soit inclus dans iOS. 

Par conséquent, je recherche une solution pour exécuter du code OpenCL dans les applications Android.

28
Rodja

Les seuls appareils Android que je connaisse qui supportent OpenCL sont ceux basés sur la famille de puces Mali T600 (article ici ). Ils ont un OpenCL SDK . Apparemment, c'est aussi le profil complet d'OpenCL 1.1.

Le Nexus 10 est un appareil qui utilise une telle puce. Le SoC Samsung Exynos 5 dual utilise un Mali T604, de sorte que tout ce qui est censé l'utiliser pourrait être utilisé avec le Mali T600 OpenCL SDK (je n'ai pas essayé rien de tout cela moi-même). 

L’auteur du blog OpenCL tente de tenter le coup , il serait donc intéressant de suivre sa série d’articles.

Cependant, le support OpenCL sur Android est nouveau (à partir du 16/2/2013) donc, bien que ce soit un excellent moyen d’expérimentation, il peut être prudent d’être prudent jusqu’à ce qu’il y ait davantage de support (qui dit à quel point le support initial de OpenCL 1.1 est défectueux)

13
prunge

Bien que le temps ait passé depuis que la question initiale a été posée, je pense que cela reste une question pour beaucoup de développeurs. 

Il y a deux aspects dans la réponse… .. D'abord, malheureusement, Google ne prend pas officiellement en charge OpenCL. 

Deuxièmement, heureusement, de nombreux fournisseurs de puces fournissent leurs bibliothèques pour prendre en charge OpenCL. Pour l'instant, la plupart des smartphones phares et intermédiaires (avec GPU Qualcomm Adreno, GPU ARM Mali ou GPU Imagination PowerVR) incluent les bibliothèques OpenCL. 

Pour utiliser OpenCL sur Android, plusieurs étapes sont nécessaires:

  1. vérifiez s'il y a une bibliothèque OpenCL sur le périphérique. Cela peut être fait en utilisant OpenCL-Z Android . Il s'agit d'un excellent outil pour vérifier la disponibilité OpenCL sur les périphériques Android et fournit également des métriques de performances de calcul brutes, qui pourraient s'avérer très utiles.

Les bibliothèques OpenCL des principaux fournisseurs de puces se trouvent dans les périphériques: Les emplacements suivants représentent l'emplacement de la bibliothèque OpenCL:

Qualcomm Adreno: 

/system/vendor/lib/libOpenCL.so
or /system/lib/libOpenCL.so (older devices)

ARM Mali: 

/system/vendor/lib/egl/libGLES_mali.so
or /system/lib/egl/libGLES_mali.so

PowerVR: 

/system/vendor/lib/libPVROCL.so
  1. Ecrivez votre programme OpenCL en C ou C++

  2. Créez un projet NDK pour compiler votre code C/C++ et testez-le sur le périphérique en tant qu'exécutable. 

  3. Créez une interface JNI pour les fonctions de votre programme NDK.

  4. Créez un projet Android à l'aide de fonctions JNI dans le code Java pour appeler des fonctions natives impliquant OpenCL.

Le tutoriel Sony est une bonne source de référence. Les techniques présentées dans ce tutoriel peuvent être appliquées à n’importe quel GPU Qualcomm Adreno. Avec des modifications très minimes, ce code et ces fichiers Make peuvent également être exécutés sur d'autres périphériques compatibles OpenCL (tels que Mali et PowerVR).

J'espère que cela t'aides.

11
Robert Wang

Commander une démo Android OpenCL sur le monde des développeurs Sony, projet complet avec source, où un filtrage bilatéral d'une image est effectué dans OpenCL et comparé à une implémentation C à thread unique. Vous trouverez également dans l'article des informations sur le type de support attendu sur les appareils Sony, etc.

Article:

Améliorez les performances de votre application Android avec OpenCL

Source de l'article:

Source pour OpenCl projet Android

Disclaimer: Je suis consultant chez Sony Mobile

5
Magnus

Vous devez utiliser RenderScript Compute à la place: http://developer.Android.com/guide/topics/renderscript/compute.html

L'utilisation d'OpenCL n'est pas très sûre car la bibliothèque (ou capacité) peut ne pas être disponible sur le périphérique cible. Pour être honnête, je ne sais même pas si un appareil Android le supporte réellement. RenderScript aura recours au calcul de la CPU si le GPU du périphérique n'est pas capable d'exécuter le programme que vous souhaitez exécuter.

Toutefois, si vous souhaitez toujours utiliser OpenCL, voici quelque chose qui pourrait vous aider { http://www.pgroup.com/lit/articles/insider/v4n2a3.htm }

Vous voudrez peut-être/aurez besoin du SDK spécifique à l'appareil (comme le SDK nVidia Tegra) pour avoir le contrôle approprié.

4
silverclaw

En 2018, vous pouvez utiliser openCL pour développer une application Android avec Android Studio. 

Pour utiliser openCL avec Android Studio, vous devez effectuer plusieurs opérations. 

  1. Vérifiez si votre appareil prend en charge openCL et quelle version sous OpenCL-Z Android et copiez la bibliothèque préconfigurée sur votre ordinateur, comme l’a dit Robert Wang.
  2. Télécharger Android Studio.
  3. Créer un projet de support C/C++.
  4. Copiez votre libOpenCL.so dans le dossier /<your_project>/app/src/main/jniLibs/<architecture>/ (vous devrez créer le dossier vous-même).
  5. Créez votre fichier natif C/C++ s'il n'est pas encore créé et liez-le à la bibliothèque prédéfinie dans Cmake. Ajoutez également votre fichier C/C++ natif en tant que bibliothèque pour le projet Android. https://developer.Android.com/studio/projects/configure-cmake .
  6. Configurez votre fichier (code) build.gradle de module (app).

    Android{
       ...
       default_config{
           externalNativeBuild{
              cmake {
                 // Filter based on your device architecture
                 abiFilters 'armeabi-v7a'
              }
            }
            ...
       }
       sourceSets {
          main {
             jniLibs.srcDirs = ['src/main/jniLibs']
          }
       }
       ...
    }
    
3
Khoa Tran

Toutes les séries Qualcomm Adreno 300 prennent en charge le profil intégré OpenCL 1.1. Pour utiliser OpenCL, vous devez développer du code NDK car OpenCL n'est pas pris en charge par Google sur la couche Java. Écrire du code OpenCL est assez simple si vous savez développer le code NDK. Vous devez disposer de libOpenCL.so, qui peut être récupéré à partir d'un périphérique compatible OpenCL, tel que les versions HTC one, Moto X et Samsung Note/Galaxy utilisant Snapdragon. 

2
Hunter Wang

Khronos a publié OpenCL 2.0, y compris le support officiel pour Android: https://www.khronos.org/news/press/khronos-releases-opencl-2.0

1
peter rautek

Il suffit de regarder la bibliothèque de calcul open source (ACL), qui contient les noyaux OpenCL: https://developer.arm.com/technologies/compute-library

Il possède un site de documentation: https://arm-software.github.io/ComputeLibrary/latest/

et un site github: https://github.com/ARM-software/ComputeLibrary

Recherchez également le SDK Qualcomm SNPE (il utilise 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

Vous pouvez également voir Tensorflow Lite pour les applications mobiles: https://www.tensorflow.org/lite/

Peut-être qu’à l’avenir il prendra en charge OpenCL sous la forme de ACL (il s’agit maintenant de la solution Android 8.1 NNAPI - https://www.slideshare.net/kstan2/open-source-nn-frameworks-on-cellphones ):

https://github.com/tensorflow/tensorflow/issues/18324

Accélération GPU Tensorflow Lite: fonctionne-t-il pour toutes les versions de système d'exploitation ou uniquement pour la version 8.1?

http://jevois.org/qa/index.php?qa=2057&qa_1=can-tensorflow-lite-use-the-gpu

Voici un bon exemple programmé avec Kotlin: https://github.com/eddywm/KTFLITE

Pour caffe2 utilisant également NNAPI ou OpenGL, il existe un espoir pour OpenCL à l'avenir: https://github.com/laMia482/caffe2_Android

0
42n4