Programmer en C/C++ pour le GPU : Possible ?

Programmer en C/C++ pour le GPU : Possible ?

Amine Abidi - Lead Software Engineer C++/Qt - Associé PointerLab

Publié par Amine Abidi - Lead Software Engineer C++/Qt - Associé PointerLab

Lors de la conférence LLVM Developers' Meeting 2024 , AMD a présenté une avancée technologique qui pourrait transformer la façon dont les développeurs exploitent les GPU. Joseph Huber, ingénieur chez AMD, a démontré comment il est possible d’exécuter directement du code standard C/C++ sur les GPU, sans passer par des langages ou des dialectes spécifiques au GPU. Cette approche ouvre la voie à une accessibilité accrue pour les développeurs et une meilleure portabilité des applications.


Présentation AMD

Télécharger le PDF de présentation

Le Constat : Complexité des langages spécifiques aux GPU

Historiquement, le développement sur GPU exigeait l’utilisation de frameworks ou de langages comme CUDA, OpenCL ou OpenMP. Bien que puissants, ces outils nécessitent :

  • Une adaptation du code.
  • Des connaissances spécifiques.
  • Des ajustements qui limitent la portabilité.

AMD, en collaboration avec la communauté LLVM, propose une solution différente : permettre aux GPU modernes d’agir comme des cibles “standards”, capables d’exécuter directement du code C/C++ sans modification.


Une Nouvelle Approche : Porter le runtime LLVM sur les GPU

Pour rendre cela possible, AMD a entrepris de porter les bibliothèques runtime LLVM pour le C et le C++ directement sur les GPU. Cela inclut :

1. La bibliothèque libc

  • Fournit les fonctions de base du langage C.
  • Adaptée pour fonctionner sur GPU via des appels RPC (Remote Procedure Calls).

2. Compiler-RT

  • Bibliothèque runtime appelée implicitement par Clang.

3. libc++

  • Runtime C++ adapté pour les GPU.
  • Quelques ajustements nécessaires, comme la suppression des threads et de la gestion des fichiers.

En rendant ces bibliothèques compatibles avec les GPU, AMD permet de compiler directement du code C/C++ standard, sans passer par des langages spécifiques comme CUDA ou OpenCL.


Un Succès Retentissant : DOOM sur GPU

Pour illustrer cette innovation, AMD a porté le célèbre jeu DOOM sur un GPU en utilisant uniquement leur nouvelle chaîne d’outils C/C++.

Le résultat :

  • DOOM s’exécute entièrement sur le GPU.
  • Aucun recours aux frameworks GPU traditionnels.

Ce cas pratique démontre la faisabilité technique, ainsi que la puissance et la portabilité de cette approche.


Les Défis Restants

Bien que prometteuse, cette technologie n’est pas sans obstacles. AMD a identifié plusieurs défis majeurs :

1. Gestion des threads et mutex

  • Les GPU offrent des garanties limitées pour la progression des threads.
  • Cela complique l’utilisation de concepts comme <thread> et <mutex>.

2. Temps de compilation

  • L’optimisation par LTO (Link-Time Optimization) est essentielle.
  • Elle augmente cependant considérablement les temps de compilation.

3. Portabilité limitée sur NVIDIA

  • Bien que compatible, l’implémentation sur GPU NVIDIA est freinée par les limitations du format intermédiaire PTX.

4. Allocation dynamique

  • Certaines opérations comme les réallocations de mémoire sur GPU peuvent provoquer des erreurs critiques.

Un Avenir Prometteur

Malgré ces défis, cette approche marque une étape importante vers la simplification du développement sur GPU. En permettant aux développeurs d’utiliser des langages standards, AMD supprime :

  • Les barrières liées aux écosystèmes fragmentés.
  • Les limitations de portabilité du code sur différentes architectures GPU.

Pour Aller Plus Loin

Les développeurs intéressés peuvent consulter :

  • La présentation complète de Joseph Huber, disponible sur YouTube .
  • Un PDF détaillé accompagnant cette présentation.

Télécharger le PDF de présentation

Cette initiative n’est pas seulement un exploit technique, mais aussi une preuve du potentiel inexploité des GPU comme cibles standards pour le développement d’applications généralistes.


À propos de Lambda Labs

Lambda Labs s’inspire des fonctions lambda en C++, symbole de code concis, flexible et performant. C’est cette philosophie, mêlant rigueur et modernité, que nous mettons au service des défis de nos clients.

Experts en C et C++, nous maîtrisons des technologies de pointe comme Qt, OpenGL, OpenCV et Unreal Engine 5 pour concevoir des solutions logicielles sur mesure et robustes. Présents dans des secteurs exigeants tels que la simulation 3D, le médical ou l’aéronautique, nous allions innovation et expertise pour relever les défis les plus complexes.

Vous avez un projet ? Contactez-nous dès maintenant pour discuter de vos besoins et découvrir comment nous pouvons collaborer.

Vous êtes ingénieur logiciel C++ ? Rejoignez-nous ! Découvrez nos opportunités ici

Envie d’échanger avec la communauté des passionnés de C++ ? Rejoignez le Discord C++ France :CPP France By Lambda Labs

Rejoignez la communauté C++ France sur Discord !

Développez votre réseau et boostez votre carrière avec la communauté C++ France