Site de Jean-Michel RICHER

Maître de Conférences en Informatique à l'Université d'Angers

Ce site est en cours de reconstruction certains liens peuvent ne pas fonctionner ou certaines images peuvent ne pas s'afficher.


stacks

6. Récapitulatif

Au final, on peut dire que la programmation many-core sur GPU avec CUDA possède quelques avantages :

  • on se fonde sur une extension de C/C++ : on n'a pas à apprendre un nouveau langage de programmation
  • le fait de disposer de nombreuses tâches à exécuter permet de masquer la latence d'accès à la mémoire
  • on peut accelérer quelques traitements de base, mais il faut se tourner vers des traitements de calcul intensif sur des réels pour espérer trouver un gain significatif

On peut voir que la programmation CUDA est formée de deux modèles (on pourrait également parler de couches) :

  • un modèle logique lié à l'organisation des tâches
  • un modèle physique lié à l'exécution des tâches

L'intérêt de ce modèle est que l'on peut modifier la couche physique sans toucher à la couche logique.

En fait, celà est vrai pour NVidia qui conçoit les GPUs et a tout loisir de faire évoluer l'architecture (couche physique), mais pas pour le programmeur qui cherche à atteindre le maximum de performance puisqu'alors modèle logique et physique sont intimement liés.

6.1. Le modèle logique

Le modèle logique à pour but d'aider à scinder le calcul initial en plusieurs tâches (kernels) qui seront par la suite exécutées en parallèle.

L'organisation se fait sous forme d'une grille (de une à trois dimensions) composée de blocs de threads (de une à 3 dimensions).

On est contraint par les caractéristiques et capacités de calcul (compute capability) de la carte graphique afin d'exprimer la taille de la grille ou du bloc.

6.2. Le modèle physique

Il permet d'exécuter les threads (ou kernels) en utilisant au mieux les capacités de l'architecture.

  • Les blocs sont assignés pour exécution aux SM (Streaming Multiprocessors)
  • l'exécution est réalisée par groupe de 32 threads (warp) qui sont sensés être synchronisés

les ressources sont limitées, il faut les utiliser au mieux pour atteindre le maximum de performances

On est contraint notamment par :

  • le nombre de registres assignés à chaque thread
  • la taille des différentes mémoires (partagée, constante, de textures)

6.3. Les tendances technologiques

Plus de puissance, plus de parallèlisme, plus d'intégration.

Depuis l'apparition des processeurs Pentium D (dual-core) en 2005, nous assistons à une augmentation du nombre de coeurs :

  • de l'ordre de 8 (soit 16 threads) en 2012 sur les Intel Xeon E7-8830 et 16 coeurs sur AMD Opteron 6200.

Depuis quelques années, on assiste également à l'intégration des GPU sur la même puce que le CPU (APU = Accelerated Processing Unit) :

  • chez AMD avec la technologie Fusion : intégration d'un coeur graphique Radeon avec le processeur et le northbridge
  • chez Intel IGP - GMA (Graphics Media Accelerator), HD Graphics

6.3.1. Intel Xeon Phi (Knights Corner)

Dernièrement en 2012, Intel a introduit le Xeon Phi (Knights Corner) composé de 64 x86 cores (256 threads) dotés d'unités vectorielles de 512-bits qui peuvent traiter 8 doubles en SIMD, l'objectif pour Intel étant de proposer avec le Xeon Phi une puissance de calcul de l'ordre du Téraflops en double précision.

Chez Intel le Xeon Phi se place dans la lignée MIC (Many Integrated Core) qui consiste a utiliser un haut degré de parallèlisme pour effectuer des calculs.

On pourra également lire cet article : The Xeon Phi at work at TACC

6.3.2. ARM

Du côté d'ARM (Advanced Risc Machine), on intégre plusieurs unités différentes :

  • FPU
  • DSP pour le traitement du signal
  • Hardware-accelerated Java support (Jazelle)

6.3.3. Tegra de NVidia

L'intégration de ces différents éléments permet de créer des SoC (System on Chip) qui rassemblent processeur, mémoire, graphique, circuit de calcul dédié, comme le Tegra de NVidia. Ces Soc sont destinés à être utilisés dans les systèmes embarqués : smartphone, tablette, ...

6.4. Conclusion

La question majeure que l'on peut se poser face à ces systèmes est la suivant : va t-on continuer à disposer de systèmes hétérogènes ou va t-on converger vers un système unique ?

Autre question, notre ordinateur ne va t-il pas devenir une sorte de super calculateur d'ici quelques années ?

6.5. Bibliographie et Sitographie

Bibliographie

  • [1] Programming Massively Parallel Processors, A Hands-on approach, David B. Kirk, Wen-mei W. Hwu, Morgan Kaufmann Publishers, 2010, ISBN 978-0-12-381472-2.
  • [2] CUDA, Application Design and Development, Rob Farber, Morgan Kaufmann Publisher, 2011, ISBN 978-0-12-388426-8.
  • [3] CUDA par l'exemple, Une introduction à la programmation parallèle de GPU, Jason Sanders, Edward Kandbrot, Pearson, Mai 2011, 978-2-7440-2486-3

Sites