OpenCL et GPU Computing 

OpenCL et Programmation Générale sur GPU

GPU et CPU

Le calcul sur Processeur Graphique

La tache d'un processeur graphique (GPU) est de convertir une liste d'objets ayant des coordonnées spatiales (formés de dizianes de triangles) et des textures, à une image en deux dimensions à afficher à l'écran, et ce le plus rapidement possible pour avoir l'illusion de mouvement.

Il doit donc déterminer l'aspect visuel de chaque triangle en fonction du point de vue de la caméra, comme illustré ci-dessous :

Scène 3D en vue 'fil de fer'

Pour chaque triangle, sa position est absolue et ne dépend pas de celles d'autres triangles.

Ainsi, l'architecture des GPU s'est adaptée en conséquence pour maximiser le nombre de triangles traités en un cycle d'horloge, en parallélisant au maximum les unités de calcul (qui disposent de peu de cache), en minimisant les structures de contrôle et en optimisant les jeux d'instructions.

Architecture des GPU et CPU

Ci-dessous, les architectures simplifiées d'un CPU et d'un GPU :

Architectures des GPU et CPU

On observe qu'un CPU dispose de peu d'unités de calcul (ici 4 ALU), mais d'un cache volumineux (plusieurs MégaOctets) et une unité de contrôle importante. Cela est dû à sa mission : gérer plusieurs tâches très différentes en parallèle qui nécessitent beaucoup de données. Ainsi, les données sont stockées en cache pour accélérer leur accès, et l'unité de contrôle va optimiser le flux d'instructions pour maximiser l'occupation des unités de calcul et optimiser la gestion du cache.

À l'inverse, un GPU dispose d'un nombre important d'unités de calcul (plusieurs centaines) qui disposent de peu de cache (quelques KiloOctets) et de faibles unités de contrôle. Cela lui permet de calculer de façon massivement parallèle le rendu de ces petits éléments indépendants, tout en ayant un nombre important de données traitées.

Performances

Le graphique ci-dessous montre la puissance de calcul théorique des cartes graphique Nvidia (GPU) et des processeurs Intel (CPU) de l'année 2003 à 2009.
On distingue 2 courbes : celle en simple precision représentant le calcul de nombres à virgule sur 32 bits et celle en double precision représentant le calcul de nombres à virgule sur 64 bits.

Chaque point du graphique correspond à la date de mise sur le marché d'une nouvelle architecture de carte graphique ou processeur.

Performances des CPU et GPU en GFlops

On remarque que la courbe de progression des GPU en terme de performance brute ne fait que s'accentuée. Ils permettent donc, lorsqu'ils sont exploités correctement, d'avoir un vitesse de calcul bien supérieure au plus puissant des processeurs (CPU) actuels.

Conclusion

Les calculs sur cartes graphiques permettent de gros gains de performance, cependant il faut pouvoir les exploiter correctement (langages de programmations efficaces) et avoir un grand nombre de données parallélisables.