Vous êtes sur la page 1sur 6

3.1.

Idée générale d’une méthode hybride


Le principe d’une méthode hybride est d’utiliser différentes méthodes conjointement afin de
résoudre un problème complexe en exploitant les forces de chacune des méthodes. Ainsi, le
problème initial est décomposé selon ses aspects physiques en différentes parties qui sont résolues
avec des méthodes différentes. Même si chacune des méthodes est bien connue individuellement,
comme pour les méthodes exposées en section 1.1.2, le couplage doit être étudié en détail. La
décomposition du problème global selon ses aspects physiques permet, par exemple dans le cadre
de l’étude d’interactions entre un fluide et une structure, de séparer la résolution du fluide et du
solide. De même pour le cas d’un transport de scalaire passif, il est possible de séparer la résolution
du fluide de celle du transport du scalaire. Enfin, nous avons vu dans les chapitres précédents, que
l’emploi d’une méthode semi-Lagrangienne pour la résolution d’un écoulement fait intervenir une
équation de transport de la vorticité ainsi qu’une équation de Poisson permettant de calculer le
champ de vitesse associé. Là encore une décomposition peut avoir lieu pour séparer la résolution de
l’équation de Poisson de celle de l’équation de transport.

CPU
L’acronyme CPU signifie Central Processing Unit. Le CPU est le processeur central
de l'ordinateur, c’est le cerveau de votre machine. Le CPU est un élément essentiel du
hardware. En effet, il est impliqué dans la plupart des tâches et calculs effectués par tous les
autres composants.

GPU
Le GPU est l’acronyme de Graphics Processing Unit. Il s’agit donc tout simplement de la
carte graphique de l’appareil. Le GPU désigne le processeur qui équipe la carte
graphique,Et, son rôle est de gérer l’affichage de l’image sur l’écran. Leur parallélisme
massif les rend aussi intéressants comme processeurs de calcul matriciel

introduction

En informatique, la programmation parallèle est devenue un outil indispensable,


notamment pour des applications à haut débit. Un algorithme parallèle consiste à partitionner
le problème étudié en tâches élémentaires afin que ces tâches soient exécutées simultanément
dans plusieurs processeurs en vue que le temps d’exécution soit plus rapide que celui de
l’algorithme séquentiel.
L'arrivée des unités graphiques de calcul (GPUs) programmables rend les cartes
graphiques extrêmement intéressantes pour déporter les calculs sur ces processeurs en
permettant un parallélisme massif, dans un environnement de programmation correcte à bas
coût. Il s’agit alors d’une niche qu'il faut exploiter dans les différentes applications,
particulièrement en bioinformatique.

II. Unité centrale de calcul (CPU) versus Unité graphique de calcul


(GPU)

Les processeurs graphiques sont habituellement destinés aux calculs 3D issus des jeux
et aux applications multimédia. Cependant, ces applications ne constituent qu’une très faible
proportion des tâches attendues de ces processeurs. Les processeurs graphiques sont
considérés alors sous-exploités. Afin de profiter pleinement de leurs performances, une
compagnie appelée NVIDIA à lancer des versions de cartes graphiques dédiées uniquement
pour des calculs de haut débit plutôt que pour des jeux vidéo. L' utilisation du GPU comme
coprocesseur permet également d’alléger le CPU d'une certaine quantité de travail.
Depuis les cinq dernières années, le développement des GPUs a connue une évolution
exponentielle comparativement aux CPUs. Cette évolution ne veut pas dire que les GPUs
évoluent plus que les CPUs, mais il s'agirait d’une nouvelle exploitation des GPUs, plus
précisément dans des calculs intensifs de haut niveau en se basant sur le principe de la
programmation parallèle. L’évolution des GPU et des CPU est illustrée dans la figure 1.
Figure1. Évolution de GPU vs CPU

III. Architecture d’un GPU

Dans l’ensemble, un GPU dans sa version GeForce 8800 peut être vu comme une
grosse unité de calcul divisée en 16 multiprocesseurs qui traitent des groupes de 32 threads à
travers 8 processeurs généraux et 2 processeurs spécialisés. Ces 16 multiprocesseurs cadencés
permettent ensemble de traiter toutes les instructions courantes sur 512 threads, et avec un
débit de 256 opérations par cycle. Le GeForce 8800 a été décrit comme un GPU équipé de
128 processeurs appelées ALUs répartis en 8 partitions de haute fréquence 1350 MHz.

Compute Unified Device Architecture (CUDA)

Nvidia a mis en disposition un langage et un logiciel de haut niveau appelé Compute


Unified Device Architecture (CUDA). Cet outil accompagné d'une documentation détaillée
permet d'exploiter les capacités du calcul des GPUs, en se basant sur le principe de
programmation parallèle en utilisant des threads. CUDA est un API considéré comme une
extension du langage C. CUDA logiciel est composé de trois modules : une interface pour
l’application des programmations ‘API’, un runtime qui joue le rôle intermédiaire entre
l’utilisateur et le driver et enfin une librairie pour les outils mathématiques.
Figure 3.: Diagramme représentant l’architecture de Compute Unified Device
Architecture.

Dans ce qui suit nous allons expliquer sans rentrer dans les détails, le fonctionnement
de CUDA:
- La première étape consiste à définir la composante sur laquelle le programme va être
exécuté. Cette spécification se fait par un kernel appelé par le CPU et exécuté par le GPU
- La deuxième étape est la façon par laquelle le kernel est appelé dans le programme:
Fonction<<< blocks, threads, memory >>>
Tels que les blocs ‘blocks’ représentent le nombre de threads à traiter, threads
représentent le nombre de threads par bloc et memory un espace mémoire optionnel
dynamiquement alloué dans la mémoire partagée, voir la figure 4.
Enfin, une librairie de fonctions mathématiques est supportée par le GPU telles que les
fonctions d’algèbre linéaire et FFT, et une fonction de synchronisation qui permet de bloquer
l'exécution d'un kernel dans un multiprocesseur tant que tous les threads ne sont pas arrivés à
ce point, de manière à éviter les problèmes de type lecture après écriture.
Pour exploiter les performances du GPU, il est essentiel de répartir les tâches sur les
grilles des blocs dont la taille doit être adaptée au problème traité afin de maximiser
l'utilisation des unités de calcul.
Figure 4. Diagramme représentant le fonctionnement du CUDA

V. Test de performance entre CPU et GPU.

Afin de comparer les performances du GPU et du CPU en terme de temps de calcul,


nous allons présenter deux exemples qui expliquent la variation de chacune des
deux composantes en fonction de deux paramètres, nombre de blocs et complexité du
problème.
Dans le premier graphique, en fait varier le nombre de blocs et en fixant le nombre
d’éléments traités c'est-à-dire, la complexité du problème. Dans le cas du CPU chaque bloc
peut être vu comme un thread et donc être exécuté sur un core différent. Sur le CPU, les
performances sont identiques quelque soit le nombre de cores,. Dans le cas du GPU, il faut au
moins 2 blocs pour qu’il surpasse la performance du CPU. Ensuite, le temps d’exécution
décroît jusqu’à 16 blocs pour que les 16 multiprocesseurs soient exploités, et à partir de 32
blocs sa performance demeure identique, du moins pour cet exemple.
Figure 5. GPU versus CPU en faisant varier le nombre de blocs.
Le second exemple consiste à augmenter la complexité du problème sachant que le
nombre de blocs étant fixé à 32. On s’apperçoit que le temps de calcul croît linéairement avec
le CPU, contrairement pour le GPU en dessous d'une certaine complexité, ce qui indique que
le coût de gestion reste élevé. Il ne suffit donc pas de traiter un nombre élevé de données,
mais pour que l’utilisation du GPU soit adéquate, il faut que le problème traité soit
suffisamment complexe.

Figure 6. GPU versus CPU en faisant varier la complexité du problème.

Vous aimerez peut-être aussi