EA2014 GPGPU
Présentation
- Enseignants : Georges-Pierre Bonneau, Didier Donsez (EA2014)
- Sujet : GPGPU
- Date : 17 octobre 2014
- Auteur : William Bobo <william.bobo@e.ujf-grenoble.fr>
- Lien vers les slides de la présentation : [Transparents]
Résumé
GPGPU ou General-purpose Processing on Graphics Processing Units. C'est une méthode permettant l’exécution de calculs hautes performances sur des GPU. Ces calculs peuvent ne pas être des calculs graphique pour lesquels ont été conçu les GPU à l'origine. Nous prenons OpenCL comme exemple pour l’exécution de calcul sur le GPU.
Mots Clés
GPU, calculs hautes performances, OpenCL
Abstract
GPGPU or General-purpose Processing on Graphics Processing Units. It's a methodology for high-performance computing that uses graphics processing. Accelerated algorithms can be others than graphics algorithms that have enabled the development of GPU. We will use OpenCL to run algorithms on a GPU.
Key Words
GPU, HPC, OpenCL
Synthèse
Introduction
Les GPU ont été à l'origine concu pour les calcul graphique permettant l'affichage sur un écran. Leurs architecture est différente des CPU, les GPU contiennent beaucoup plus de cœurs permettant la parallélisation d'une même tache. Les écrans se modernisant, les besoins en calcul ont aussi augmenté et avec leurs nombre coeur, les GPU ont gagné en puissant brut comparé aux CPU. En 2002, une importante avancée dans la flexibilité de la programmation des GPU facilite les calculs autres que graphiques sur ces circuits. C'est la naissance de la méthode GPGPU.
Motivations
De nombreux domaines nécessitent de calcul à haute performance. Le fait d'utiliser GPGPU pour une application est appelé acceleration GPU. Les principaux domaines sont :
- Le traitement de l'image
- Les simulations (Météorologique, simulation neuronal, simulation de fluide etc )
- Les outils scientifique tel que Matlab
- Tout ce qui calcul sur de grand ensemble de données (Moteur physique etc..)
Les calculs hautes performances peuvent aussi être fait sur des CPU à l'aide de cluster mais le coût est incomparable. Le rapport prix/puissance baisse régulièrement grâce aux jeux vidéos qui démocratise l'utilisation de GPU.
Pre-conditions
Les algorithmes exécuté sur les GPU ne sont pas les même que ceux sur les CPU. Les algorithmes doivent être re-écris pour une exécution parallèle.
Ce type d’exécution rend très efficace le traitement de grands ensembles de données dans le cas où le traitement est identique pour chacun de ces éléments.
Solutions
Il y a trois grand type de solution. La plus ancienne est celle des shaders qui semblera familière aux utilisateurs d'OpenGL. La second méthode est conçu par les constructeurs de GPU. Nvidia a fait CUDA et AMD FireStream par exemple. La dernière méthode et celle qui est présenté est OpenCL.
OpenCl
OpenCl ou Open Computing Langage est un standard proposé par le Khronos Group. C'est un consortium industriel dont font parti entre autres Nvidia, ATI, AMD, ARM et Intel.
OpenCL spécifie une API et un langage. Le langage est un dérivé du C et permet d’écrire les algorithme à exécuter. L'API permet de gérer les entré sorties de l'algorithme, la synchronisation et l’exécution. OpenCL permet d'utiliser GPGPU mais va au delà. Ce standard est conçu pour qu'avec le même code, l’exécution puisse être faite sur un GPU ou un CPU.
Principes
Les programmes crées dans le langage OpenCl sont compilé à l’exécution à l'aide de l'API OpenCl. Cela rappel l'utilisation des shader dans OpenGl. Il est possible de créer un pont entre OpenCl et OpenGl pour échanger des objets tel que des buffers.
Le CUDA se basait sur l'unité "Thread" pour exprimé l’exécution parallèle. Pour OpenCl, l'unité est le work-item.
Notes et références
-