Programmation des GPU en C++

La montée en puissance des GPUs s’est accompagnée du développement de langages de programmation spécifiques comme Cg ou GLSL pour tirer parti de leurs performances. La syntaxe de ces langages est proche du C, mais ils sont clairement destinés à la programmation d’applications graphiques, et demandent une bonne connaissance du fonctionnement interne des GPU.

Pour exécuter des programmes plus généraux sur les GPUs, l’idéal serait de disposer de compilateurs capables de générer « tout seuls » du code optimisé pour les GPU à partir d’un source C++ standard. On n’y est pas encore, mais ça progresse.

Actuellement, il existe des librairies permettant d’utiliser le GPU comme coprocesseur au travers d’un API comme:

Dans sa thèse de doctorat « GPU++ – An Embedded GPU Development System for General-Purpose Computations » Thomas Jansen a franchi une étape de plus en permettant de développer des shaders directement en C++ à l’aide d’une librairie qui génère du code GPU (je n’ai pas encore compris comment) à la compilation sur un compilateur standard.

RapidMind propose une « plateforme » basée sur une idée similaire, mais en la généralisant encore. Leur système permet d’optimiser le même code sur des processeurs aussi différents que les GPU multi-coeurs, les GPU et le processeur Cell qui équipe les PlayStation 3. Mais comme on le voit ci-dessous, le langage C++ est difficilement reconnaissable derrière l’utilisation d’un API et de macros:

Cette approche est cependant très générale et efficace, comme on le voit sur la page des « Case Studies« , qui inclut au moins deux domaines qui m’intéressent:

  1. La simulation des fluides
  2. Les fractales. J’y reviens dans un prochain article

Documents intéressants:

Publicité

No comments yet

Votre commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :