Utilisation de GPU pour la mise au
point de récepteurs solaires
Sylvain Collange
Stage de Master deuxième année encadré par
Marc Daumas et David Defour
Équipe DALI,
Laboratoire ELIAUS,
Université de Perpignan Via Domitia
Février-juin 2007
École normale supérieure de Lyon
46 allée d’Italie
69364 Lyon Cedex 07 - France
Introduction
Conçus à l’origine pour accélérer les calculs géométriques et graphiques liés au
rendu d’images de synthèse, les processeurs graphiques (graphics processing units,
GPU) permettent aujourd’hui une souplesse d’utilisation suffisante pour envisager leur
utilisation pour d’autres tâches de calcul intensif.
Nous allons nous intéresser ici aux problématiques soulevées par le portage d’une
application de modélisation physique sur GPU.
1 Présentation des processeurs graphiques
FIG. 1 – L’ASUS EN7800GTX TOP, une des cartes graphiques que nous utilisons.
Un processeur graphique, ou GPU, est un coprocesseur spécialisé dans le traite-
ment graphique utilisé dans des ordinateurs personnels. Les processeurs graphiques
répondent principalement à une demande en calcul pour produire des images de syn-
thèse en temps réel pour les jeux vidéo. S’étant généralisés à partir de la fin des années
1990, les premiers GPU commercialisés à grande échelle étaient basés sur un pipeline
fixe correspondant à un certain modèle de traitement géométrique. Dans ce modèle, les
fonctionnalités désirées pouvaient uniquement être activées ou désactivées à l’aide de
drapeaux de contrôle et paramétrés par des constantes.
La demande pour des effets de rendu graphique plus variés à conduit les construc-
teurs de GPU à rendre certaines unités de traitement programmables plutôt que sim-
plement paramétrables, à partir de la version 8 de la bibliothèque Microsoft DirectX en
2001. Cela a permis d’envisager leur utilisation pour d’autres tâches que des applica-
tions purement graphiques.
L’importance du marché du jeu vidéo permet des volumes de production — et
par là même des économies d’échelles — qui conduisent à un coût unitaire des GPU
relativement faible, de l’ordre de celui d’un processeur généraliste. Ce prix est sans
comparaison avec celui d’un coprocesseur spécialisé pour des applications de calcul
scientifique tel que le ClearSpeed Advance1, nécessairement produit en faible volume.
1http://www.clearspeed.com
2
La demande des utilisateurs conduit également à des cycles de développement de
produits très courts, avec une nouvelle génération de GPU tous les six mois à un an.
De même, la production en volume permet aux GPU de bénéficier des dernières tech-
nologies de gravure disponibles, en même temps que les processeurs.
En contrepartie de ces avantages, les applications scientifiques à porter sur GPU
devront exhiber un parallélisme de données suffisant, et surtout pouvoir se projeter de
manière efficace sur la structure du GPU, prévue pour les applications graphiques.
Nous disposons de deux cartes graphiques pour le développement : elles sont équi-
pées respectivement d’un GeForce 7800 GTX de nVidia et d’un Radeon X1800 XL
d’ATI, ainsi que de 256 Mo de mémoire chacune.
1.1 Architecture des GPU
1.1.1 Spécificités des GPU
Le GPU est généralement implanté sur une carte graphique qui contient également
de la mémoire dédiée. Cette carte graphique communique avec le reste de la machine
par un lien dédié, actuellement de type PCI-Express (peripheral component intercon-
nect – Express).
La figure 2 présente l’architecture générale d’une station de travail haut de gamme
typique de 2007, avec les débits crêtes des différents bus et canaux de communication.
Une première chose que l’on remarque sur ce diagramme est que la bande passante
CPU
Intel Core 2 Duo
Northbridge
Southbridge
M´
emoire
centrale
GPU
M´
emoire
graphique
Intel P965
Intel ICH 8
2×DDR2-800
nVidia GeForce
8800 GTX
GDDR4
Carte m`
ere
Carte graphique
8,5 Go/s
12,8 Go/s
2 Go/s
4 Go/s
86,4 Go/s
Entr´
ees/sorties
´
Ecran
FIG. 2 – Diagramme d’un exemple de carte-mère équipée d’un GPU
entre le GPU et sa mémoire dédiée (86,4 Go/s dans cet exemple) est largement su-
périeure à celle des autres liens de communications. Elle est en particulier supérieure
d’un facteur 20 à celle du lien PCI-Express à 4 Go/s reliant la carte graphique au reste
du système, et d’un facteur 10 à celle du lien PSB (processor system bus) à 8,5 Go/s
vers le processeur central.
Même programmables, les unités d’exécution des GPU restent très différentes de
celles d’un processeur généraliste. En effet, un GPU effectue des tâches à très fort pa-
rallélisme de données : typiquement des transformations géométriques identiques sur
des sommets traités indépendamment ou des calculs d’éclairement sur des pixels éga-
3
lement indépendants. Ces spécificités conduisent les concepteurs de GPU à chercher à
optimiser le débit des unités de calcul et d’accès mémoire, plutôt que leur latence.
D’une part, alors qu’un processeur généraliste utilisera les transistors disponibles
principalement pour le contrôle et les caches, un GPU privilégiera les unités de calcul
virgule flottante, le contrôle étant simplifié par la présence de parallélisme de données.
On peut ainsi disposer de nombreuses unités de calcul en parallèle. Un GPU est donc
parallèle en largeur.
D’autre part, en continuité avec l’architecture historique d’un long pipeline gra-
phique unique, les unités de calcul distinctes (multiplieur, additionneur, accès mé-
moire. . .) sont souvent organisées en pipeline plutôt que parallèlement (fig. 3). Un GPU
est donc également parallèle en profondeur.
Load/
Store
MulAdd
Banc de registres
Donn´
ees
Adresses (num´
eros de registres)
D´
ecodage
Instructions
Unit´
es d’ex´
ecution
(a) Organisation horizontale (superscalaire,
VLIW. . .).
Texture
(Load)
Mul
Add Banc de registres
D´
ecodage
d’instructions
num´
eros
de
registres
(b) Organisation verticale (GPU, DSP. ..).
FIG. 3 – Comparaison entre les organisations respectives des unités de calcul des pro-
cesseurs généralistes et des GPU.
De façon à alimenter suffisamment rapidement les unités de calcul, le contrôle de
la mémoire est également conçu de manière à maximiser le débit au détriment de la
latence. Tout comme les unités de calcul, les unités mémoire disposent de larges bus de
données (384 à 512 bits sur les modèles hauts de gamme actuels). Elles maintiennent
également en vol un grand nombre d’instructions d’accès mémoire, qui seront éven-
tuellement réordonnées pour optimiser le débit mémoire. Les technologies mémoire
utilisées (GDDR3, GDDR4) sont également conçues pour fournir des débits élevés
avec une architecture profondément pipelinée. En revanche, un GPU ayant à traiter
quasi-exclusivement des données séquentielles, l’utilisation de caches reste très limi-
tée, avec des caches de taille réduite à faible associativé.
Ces paramètres expliquent que la puissance brute théorique disponible dans un
GPU soit très supérieure à celle d’un processeur généraliste.
1.1.2 Le pipeline graphique
Le chemin de données dans un GPU est conçu pour des données graphiques. Ce
chemin, appelé pipeline graphique, est représenté figure 4.
Les données en entrée sont des listes de sommets décrivant des primitives, soit des
polygones, segments ou points. Ces données sont en général transférées depuis la mé-
4
Vertex shader Pixel shaderRasterizer
Textures
Fragments
Coordonn´
ee (z)
Coordonn´
ees de texture
Couleur
SommetsSommets
Coordonn´
ees (x, y, z)
Coordonn´
ees de texture
Couleur
Coordonn´
ees (x, y, z, w)
Vecteur normal
Coordonn´
ees de texture
Couleur
Fragments
Coordonn´
ee (z)
Couleur
ROP
Pixels
Couleur
M´
emoire GPU Tampon d’imageTampon de sommets
FIG. 4 – Pipeline graphique simplifié
moire centrale vers la mémoire graphique préalablement au rendu. À chaque sommet
est associé plusieurs attributs, tels que ses coordonnés dans l’espace tri-dimensionnel
de la scène, sa couleur, ses caractéristiques ou ses coordonnées de texture. Chacun de
ces attributs est généralement représenté sous la forme d’un vecteur à quatre compo-
santes contenant des nombres en virgule flottante simple précision (32 bits).
La première étape du pipeline graphique consiste à traiter chaque sommet pour opé-
rer des transformations sur ses attributs. Notamment, le sommet doit être projeté depuis
l’espace tri-dimensionnel de la scène à représenter vers la surface bi-dimensionnelle de
l’écran. Des calculs d’éclairements simples peuvent égalements être effectués pour mo-
difier l’attribut couleur du sommet. Toutes ces transformations sont réalisées par une
unité programmable, le vertex shader2.
Une fois le traitement géométrique sur les sommets effectués, le GPU discrétise
les primitives en sélectionnant les pixels qui se trouvent à l’intérieur. Cela consiste en
l’étape de rasterization. À ces pixels, aussi appelés fragments, sont associés les mêmes
attributs qu’aux sommets transformés (couleur, coordonnées de texture). Ces attributs
sont interpolés bilinéairement à partir des attributs des sommets de la primitive.
Les fragments arrivent alors dans la seconde unité programmable, le pixel shader
ou fragment shader. Cette unité permet d’effectuer des calculs sur chaque fragment,
tels que de l’application de texture.
Enfin, les unités ROP (raster operations) sont principalement chargées d’arbitrer
les situations où plusieurs fragments se trouvent aux mêmes coordonnées et doivent
former un unique pixel. Le test d’occlusion, ou Z-Culling, consiste à ne conserver que
le fragment le plus proche de l’observateur. Cela est réalisé en comparant sa coordon-
née Z avec la coordonnée minimale rencontrée jusque là, stockée dans le Z-buffer. Le
blending consiste à fusionner la couleur du fragment à écrire avec la couleur du pixel
dans le tampon d’image, selon une équation prédéfinie.
La génération suivante, arrivée fin 2006 et 2007 et correspondant à la version 10
de DirectX, marque une rupture avec ce modèle en unifiant les vertex et pixel shaders
et en ajoutant un nouveau type de shader, le geometry shader. Celui-ci se place entre
le vertex shader et le pixel shader. Ce programme permet d’ajouter ou supprimer des
sommets : prenant en entrée une primitive (triangle, ligne. . .), il fournit en sortie une
autre primitive constitué d’un ensemble de sommets.
2Vertex shader désigne traditionnellement le programme qui sera exécuté sur les sommets. Par abus de
langage, on utilise également ce terme pour les unités matérielles qui exécuteront ce programme.
5
1 / 24 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !