Bienvenue à l'Onera, le centre français de recherche aérospatiale |
Traitement de l'information et modélisation| le DTIM | moyens | références | publications | contacts | GPU for Image : Notions générales sur la programmation CUDAPrésentation du calcul sur GPULes développements présentés ici utilisent le langage de programmation CUDA développé par nVidia. Nous disposons des GPU de la gamme professionnelle « Tesla » ainsi que des GPU grand public de la gamme GTX 280. Un GPU est une carte graphique reliée au CPU (processeur central) via un port PCI express. Sur la figure 1, nous présentons l'architecture d'un PC moderne. Un point important est que la bande passante entre le CPU et le GPU est faible comparé à celle que ces deux processeurs ont vers leurs mémoires respectives. ![]() Figure 1. Architecture d’un ordinateur moderne
La notion importante pour la programmation d’un GPU n’est pas son architecture hardware mais le modèle de programmation, ou grille de calcul, représenté en Figure 2. La grille de calcul est une grille à deux niveaux de granularité. ![]() Figure 2. Modèle de calcul d’un GPU Le niveau le plus grossier est composé de blocs (blocks) exécutés indépendamment les un des autres, sur lesquels le programmeur ne possède aucun contrôle d'exécution. Les blocs sont constitués d'un ensemble de « threads » : le thread est le plus petit élément d’éxécution dans un GPU. Le programmeur a la possibilité de contrôler l'exécution de ces threads par des points de synchronisation et peut faire échanger des informations entre les threads grâce à de la mémoire partagée. La programmation d'une fonction GPU avec CUDA se décompose en deux étapes :
Figure 3. Structure de la mémoire accessible au GPU Un aspect essentiel de la programmation efficace sur GPU est la gestion des mémoires partagées : la structure de la mémoire est présentée en figure 3. L’accès des threads à la mémoire globale à un temps de la latence important, il convient donc d’utiliser un système de cache à l’aide des mémoires locales disponibles dans chaque bloc (registres, shared memory) dont le temps d’accès est très rapide (comparable au cache L1 des CPU).
Précédente | Haut | Suivante |
|
|||
| |
||||
|
Mis à jour le - © ONERA 2008 - Crédits et conditions d'utilisation |