Une nouvelle manière d'utiliser du code CUDA sur d'autres architectures
Le projet Coriander permet une compilation à la volée

Le , par dourouc05, Responsable Qt
NVIDIA CUDA est et reste la technologie de choix pour l’utilisation de processeurs graphiques pour des calculs. Pour ainsi dire, toutes les bibliothèques d’apprentissage profond utilisent CUDA pour accélérer leurs calculs (pour la plupart, exclusivement) : TensorFlow, Caffe, Torch, Theano, etc. — même si quelques rares bibliothèques s’opposent à cette hégémonie, comme DeepCL. Cependant, cela pose un gros problème à l’écosystème : CUDA est limité aux processeurs fournis par NVIDIA, ce qui limite la concurrence.

C’est notamment pour cela qu’AMD a lancé le projet de transpilateur HIP, qui vise à transformer du code source CUDA en OpenCL. L’outil est vraiment prévu pour que le code source CUDA ne soit plus utilisé, qu’OpenCL le remplace sur toutes les plateformes — malgré les possibilités d’optimisation possibles uniquement avec CUDA pour les processeurs NVIDIA. Un défaut est que toutes les possibilités du langage CUDA ne sont pas gérées. Certains projets, comme Caffe ou Torch, ont lancé une opération de conversion manuelle, qui a le même genre de défauts : le développement se produit principalement en CUDA, pas en OpenCL.

Pour améliorer la situation, certains développeurs se sont lancés dans le projet Coriander (anciennement connu sous le nom de CUDA-on-CL) : ils agissent au moment de la compilation, pas sur les sources. Ainsi, un projet peut être développé entièrement avec CUDA, mais être portable sur toutes les architectures de processeurs graphiques (et d’autres plateformes compatibles OpenCL).

Le principe est proche de HIP : le code CUDA est compilé normalement avec Clang ; ensuite, Coriander traduit le code intermédiaire LLVM en code OpenCL 1.2, qui peut alors être recompilé pour n’importe quelle cible. La partie restante est alors l’API CUDA, qui permet de gérer finement l’exécution sur les processeurs, mais ce travail est actuellement moins abouti. La force de CUDA réside non seulement dans le langage de programmation des GPU, mais aussi dans les bibliothèques de fonctions courantes déjà implémentées et optimisées : pour ce faire, des parties considérables de cuBLAS et cuDNN ont déjà été portées.


À l’exécution, le code produit est moins performant que s’il était directement exécuté sur un GPU NVIDIA. Cependant, pour des tâches d’apprentissage profond, selon le type d’opérations à effectuer, les résultats peuvent être très proches de ceux de CUDA (opérations unitaires, tangente hyperbolique) ; d’autres sont clairement en dessous (réductions). Cela est en bonne partie dû aux optimisations effectuées par les compilateurs de NVIDIA, mais aussi au fait que le projet Coriander génère du code OpenCL pas forcément traditionnel (afin de coller au mieux à la sémantique de CUDA et éviter des problèmes de correction).




Voir le code source de Coriander
.

Source : présentation à IWOCL.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Jhulk Jhulk - Membre du Club https://www.developpez.com
le 22/05/2017 à 15:26
Ils essaient de faire un Cuda libré ?
Avatar de dourouc05 dourouc05 - Responsable Qt https://www.developpez.com
le 22/05/2017 à 15:33
D'une certaine manière, oui : une implémentation de CUDA qui serait assez transparente à l'utilisateur, sans partie propriétaire. Pour le moment, ça semble être équivalent à ajouter quelques lignes dans son Makefile (ou équivalent).
Offres d'emploi IT
Ingénieur développement électronique H/F
Safran - Ile de France - 100 rue de Paris 91300 MASSY
Ingénieur développement logiciel embarqué temps réel (model based) H/F
Safran - Ile de France - VILLAROCHE
Responsable de projets - actionneurs H/F
SAFRAN - Ile de France - MASSY / MANTES

Voir plus d'offres Voir la carte des offres IT
Responsable bénévole de la rubrique HPC : Thibaut Cuvelier -