Calcul parallèle sur GPU et sur clusters de GPU (Graphic Processor Unit)
Les GPUs portées par le marché des jeux vidéo constituent aujourd'hui des processeurs extrêmement puissants et bon marché. Cependant ils sont dotées d'une architecture de type SIMD (Single Instruction Multiple Data), qui les rend efficaces seulement sur certains types de codes, et impose de les programmer dans un formalisme SIMD, où l'on crée des milliers (ou plus) de threads très légers.
L'apprentissage d'une algorithmique et de méthodes de programmation particulières est donc nécessaire pour identifier rapidement les codes adaptés à un portage sur GPU, et réaliser les transformations de code requises.
Sur des problèmes adaptés, les accélérations observées lors du passage d'un c?ur CPU à un GPU peuvent varier d'un simple facteur 2 ou 3, à un facteur 100. Ces gains peuvent encore croître avec l'utilisation d'un cluster de GPU, en cumulant une programmation distribuée (sur cluster) et une programmation sur GPU (sur chaque n?ud du cluster). Bien que les gains entre un cluster de CPUs et un cluster de GPUs s'amenuisent quand le nombre de n?uds augmente, utiliser un cluster de GPUs permet d'exploiter de petits clusters faciles à déployer plutôt que de grosses armoires de PCs, ce qui présente aussi des avantages d'encombrement et de consommation énergétique.
Les architectures parallèles récentes et futures sont et seront des clusters de n?uds hétérogènes, cumulant des c?urs de différents types sur chaque n?ud. L'apprentissage de la programmation de clusters de CPUs+GPUs correspond à un réel besoin sur les architectures parallèles actuelles.
Objectifs
- comprendre l'architecture des GPUs NVIDIA
- être capable de programmer en CUDA sur GPU, de réaliser les principales optimisations de code sur GPU et d'interfacer des programmes CUDA et MPI pour programmer des clusters de GPUs
Public concerné
Ingénieurs et chercheurs développant des codes de calcul intensif et des codes distribués (sur clusters).
Connaissances requises
-maîtrise du langage C/C++
- connaissance d'un éditeur de type "vi" ou "emacs" pour pouvoir développer plus aisément sur des machines parallèles distantes pendant les travaux pratiques
Méthodes pédagogiques
- conférences
- travaux pratiques sur clusters de GPUs
Une partie de la documentation fournie est en anglais.
| PROGRAMME |
INTRODUCTION À L'ARCHITECTURE DES GPUS
PRINCIPES DE PROGRAMMATION EN CUDA SUR GPU
- principes de base de CUDA
- principales optimisations des codes CUDA
- mise en ?uvre de la programmation d'un GPU (en CUDA)
- mesure et analyse de performances calculatoires et énergétiques sur GPU
PRINCIPES D'INTERFAÇAGE DES PROGRAMMES MPI ET CUDA
- principe des transferts de données de GPU à GPU au sein d'un cluster de PC
- étude de cas
- mise en ?uvre de la programmation d'un cluster de GPU (en MPI et CUDA) : ajout de code CUDA dans un code MPI
- mesure et analyse de performances calculatoires et énergétiques sur GPU
INTRODUCTION À LA PROGRAMMATION EN OPENCL (COMPARAISON À LA PROGRAMMATION EN CUDA) |
Ce stage n'est pas un stage d'algorithmique parallèle. Il vise à apprendre la programmation des GPUs pour la mise en ?uvre d'algorithmes parallèle à grain fin et de type "data parallélisme". Des bases d'algorithmique parallèle seront données au cours du stage et serviront de support à l'apprentissage théorique et pratique de la programmation sur GPU.
Dernière mise à jour le 25/04/2013 par Supélec - Formation Continue