Les GPU sont des processeurs graphiques pouvant être utilisés comme accélérateurs dans des architectures hybrides pour d'autres applications que la production ou le traitement d'images. La caractéristique principale de ce type de matériels est de développer une puissance de calcul importante relativement à une faible consommation électrique à travers un parallélisme many-cores extrêmement important. Ces performances font des GPU un matériel très populaire dans les domaines de l'intelligence artificielle, de la réalité virtuelle et de l'informatique embarqué. L'obtention de bonnes  performances est conditionnée par l'adéquation du parallélisme de  l'algorithme avec celui du matériel. Ce cours permet de donner un  aperçu de deux techniques courantes de programmation des GPU : CUDA et  OpenACC, tout en mettant l'accent sur l'évaluation et l'amélioration  des performances des codes produits.


Objectifs :

  • Comprendre l'architecture d'une machine hybride et ses enjeux
  • Programmer un GPU à l'aide du langage CUDA ou de directives OpenACC
  • Être capable de mesurer les performances d'un code GPU et d'analyser ses limitations afin de procéder à un travail d'optimisation du code.
  • Connaître et employer les techniques de programmation usuelles concernant les GPU : *caching*, *pipelining*, asynchronisme