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.
Voir le code source de Coriander.
Source : présentation à IWOCL.