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.
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)
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:
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
Ecrivez votre programme OpenCL en C ou C++
Créez un projet NDK pour compiler votre code C/C++ et testez-le sur le périphérique en tant qu'exécutable.
Créez une interface JNI pour les fonctions de votre programme NDK.
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.
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
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é.
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.
/<your_project>/app/src/main/jniLibs/<architecture>/
(vous devrez créer le dossier vous-même).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']
}
}
...
}
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.
Khronos a publié OpenCL 2.0, y compris le support officiel pour Android: https://www.khronos.org/news/press/khronos-releases-opencl-2.0
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
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