Nvidia CUDA : plus en pratique

Tags : CUDA; GPGPU; Nvidia;
Publié le 09/08/2007 par
Imprimer
Conclusion
Cette seconde approche de CUDA a été fort intéressante. CUDA a gagné en performances, en flexibilité et en robustesse et bien que la liste des fonctions à ajouter et des petits bugs à corriger représente probablement de quoi occuper les ingénieurs de Nvidia pendant quelques temps, CUDA est réellement utilisable et exploitable.

Nous avons pu évaluer les performances des GPU de classe GeForce 8 de Nvidia dans une application pratique et ainsi constater un net avantage face aux CPUs sur un algorithme qui leur était pourtant initialement destiné. De quoi ouvrir de nouvelles perspectives pour ce type d'application. Des résultats qui tranchent avec notre précédente conclusion sur CUDA dans laquelle nous indiquions que la puissance déployée par le GeForce 8800 n'était pas encore suffisante pour réellement justifier un nouveau développement face aux systèmes multi-CPUs. Nous avions alors sous-estimé 2 points importants.


Le premier est qu'un GPU haut de gamme va disposer d'une bande passante mémoire de 100 Go/s là où les quatre cores d'un CPU doivent se partager 10 Go/s. Une différence significative qui limite les CPUs dans certains cas. Le second point est qu'un GPU est conçu pour maximiser le débit. Il va donc automatiquement utiliser un nombre très élevé de threads pour maximiser son rendement là où un CPU passera beaucoup plus souvent de nombreux cycles à attendre. Ces 2 raisons permettent aux GPUs de prendre un avantage énorme sur les CPUs dans certaines applications telles que celle testée.

Exploiter un GPU à travers CUDA peut sembler très difficile voire hasardeux au premier abord, mais est en réalité plus simple que ce que la plupart des gens ne le pensent. La raison est qu'un GPU n'est pas destiné à remplacer un CPU mais bien à l'épauler pour certaines tâches spécifiques. Il ne s'agit pas d'essayer de paralléliser une tâche pour exploiter plusieurs cores (comme c'est le cas actuellement avec les CPUs) mais d'implémenter une tâche qui est, de part sa nature, massivement parallèle, et elles sont nombreuses. On n'utilise pas une voiture de course pour transporter un troupeau de bétail et on n'utilise pas un tracteur pour concourir en F1. C'est la même chose avec les GPUs. Il s'agit donc avant tout de rendre efficace un algorithme massivement parallèle par rapport à une architecture donnée.


Une erreur serait de se limiter à voir un GPU tel que le GeForce 8800 comme un amas de 128 cores qu'il faudrait essayer d'exploiter en segmentant son algorithme. Un GeForce 8800 ce n'est pas simplement 128 processeurs mais avant tout jusqu'à 25.000 threads en vol ! Il faut donc fournir au GPU un nombre énorme de threads, en essayant qu'ils restent dans les limites du hardware pour un rendement maximal, et laisser ce GPU se charger de les exécuter efficacement.

Il faut ainsi laisser de côté certains points pourtant très importants lorsque l'on développe sur un CPU et se concentrer sur d'autres. Un changement de manière de travailler qui est malheureusement encore très peu enseigné dans les universités. Nvidia est conscient de ce problème et sait qu'il s'agit d'un élément clé dans le succès de l'utilisation des ses puces comme unité de calcul. David Kirk, Chief Scientist chez Nvidia, s'est ainsi chargé de donner un cours dédié à l'apprentissage de la programmation massivement parallèle à l'université d'Illinois à Urbana-Champaign et Nvidia a soutenu et sponsorisés d'autres cours similaires.

Le cours de David Kirk, très intéressant, est disponible en ligne et présenté comme un kit d'apprentissage libre d'utilisation. Si le cours utilise l'exemple de la GeForce 8800, les concepts qui y sont présentés ne sont pas réellement spécifiques à une architecture donnée, à l'exception des optimisations bien entendu. Vous pouvez le retrouver ici :

ECE 498 AL : Programming Massively Parallel Processors 

Par ailleurs, si le sujet vous intéresse, nous vous conseillons les retranscriptions publiées par Beyond3D des interviews de David Kirk , d'Andy Keane  et de Ian Buck , respectivement Chief Scientist, General Manager du GPU Computing Group et CUDA Software Manager.
Vos réactions

Top articles