Graphics Processing Units

publicité
Graphics Processing Units
Corky
Maigre et Alexandre Lemaire
Année Académique 2012-2013
Table des matières
1
Introduction au GPU
2
CPU
11
3
Programmation en parallèle sur GPU
14
1.1
1.2
1.3
1.4
Historique du GPU . . .
Domaines d'utilisations .
Architecture du GPU . .
Fonctionnement du GPU
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
6
8
9
2.1 Dénition du CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Comparaison GPU-CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Principes et notions de l'informatique en parallèle . . . . . . . . . . . . . . . . . 16
3.3 Langages de programmation sur GPU . . . . . . . . . . . . . . . . . . . . . . . . 17
1
Avant-propos
Nous sommes en première année Bachelier en Sciences de l'Ingénieur à l'Isims.
Voici notre rapport sur une recherche bibliographique dans le cadre du cours de "Méthodologie Scientique".
Le sujet de notre travail traîte des "GPU".
Ainsi nous parlerons de l'histoire des cartes graphiques, de leurs domaines d'utilisations, de
l'architecture et du fonctionnement d'un GPU. Nous introduirons les notions de processeur et
de processeur graphique et nous les comparerons.
Enn, nous développerons les bases des principes de programmation en parallèle sur GPU.
Ce document a été rédigé en LATEX.
Figure
1 Illustration d'un processeur graphique NVIDIA NV40 et d'une carte graphique
GeForce GTX 480 [1]
2
Chapitre 1
Introduction au GPU
Un GPU, "Graphics Processing Unit" signiant "Unité de Traitements Graphiques", est un
processeur graphique, c'est-à-dire que c'est l'élément principal d'une carte graphique.
Ce sont donc des unités de traitements graphiques appelés processeurs graphiques placés sur
des cartes graphiques et utilisés pour accélérer les applications 3D telles que les jeux vidéo.
1.1 Historique du GPU
Avant l'arrivée des processeurs graphiques, l'achage de données sur un écran était entièrement géré par le processeur de l'ordinateur.
Avec la demande croissante de la technologie informatique, aussi bien dans les centres de
recherche que pour les particuliers, le travail seul du processeur ne pouvait sure à gérer les
calculs et l'achage. En eet, il était impératif d'améliorer l'achage pour pouvoir avancer
dans les recherches et pour que l'informatique garde sa place de leader. De l'autre côté, suite à
l'arrivée des ordinateurs sur le marché public, la nécessité d'avoir un meilleur rendu graphique
fût primordial pour des raisons purement marketing notamment avec les premiers jeux vidéo.
Ces derniers temps, la qualité des jeux sur ordinateur s'est nettement améliorée par l'ajout
de cartes graphiques spéciques. Les constructeurs ont été dans l'obligation de créer des cartes
dédiées à l'accélération 3D an de soulager le processeur. Ces cartes ont eu pour mission d'alléger le processeur en calculant à sa place le grand nombre de polygones demandés.
Toutes ces raisons furent bénéques au développement rapides des GPU et, encore de nos jours,
la technologie n'arrête pas de s'améliorer.
Les premières cartes graphiques apparaissent en 1981 pour le grand public avec les cartes
CGA ou Color Graphic Adapter qui permettaient d'acher dans une résolution de 320 colonnes sur 200 lignes en 4 couleurs diérentes. Suivent alors une succession de cartes dédiées
au graphisme sur ordinateur poussant de plus en plus loin le nombre de lignes et de colonnes
adressables ainsi que le nombre de couleurs simultanées pouvant être achées ; ce sont les modes
graphiques utilisables.
De plus en plus de fonctions assurées par le processeur sont petit à petit gérées par le
contrôleur graphique des cartes. Comme, par exemple, le tracé de lignes, de surfaces pleines, de
cercles, etc. ; fonctions très utiles pour accompagner la naissance des systèmes d'exploitation
basés sur des interfaces graphiques et en accélérer l'achage.
3
Une des premières compagnies à s'être lancée dans le marché des GPU fut ATI Technologies
Inc. Cettz société s'est concentrée sur l'élaboration de standards graphiques puis sur le développement et l'amélioration de ses cartes.
En 1991, ATI présenta sa nouvelle carte : La Mach8. Cette carte était dotée de performances
extraordinaires pour l'époque (1024x768x256) et était capable de travailler indépendamment
du micro-processeur, ce qui fut une réelle évolution. Par la suite, la rme continua à améliorer
sa carte.
Ce ne fut qu'en 1995 que NVIDIA entra dans le marché des GPU avec sa puce NV1. La
puce proposait une carte 2D, un accélérateur 3D, une carte son et un emplacement pour des
manettes Saturn dans la même carte PCI. Cette carte fut l'une des premières à être destinée
aux jeux et dessins industriels ; malheureusement, ce fut un échec. À cause d'une gestion différente de la 3D, elle utilisait le quadratic texture mapping au lieu de la technique actuelle, à
base de polygones.
Avec l'évolution des techniques, le port ISA habituellement utilisé sera remplacé par le port
PCI pour augmenter la vitesse de transfert entre le processeur et la carte graphique. En plus
des cartes graphiques d'achage en 2D, apparaissent dans les années 1990 des cartes dédiées à
la gestion et l'achage d'éléments représentés en 3 dimensions, comme les cartes 3DFX. Puis
apparurent les cartes graphiques 2D/3D ayant l'avantage de n'occuper qu'un seul connecteur
AGP ou PCI au lieu de deux (pour les congurations courantes de l'époque, en l'occurrence
avant 1998).
En eet, jusqu'alors, les cartes 2D étaient proposées séparément des cartes dites accélératrice 3D, chacune ayant un processeur graphique spécique.
Depuis la sortie des premières cartes 2D/3D intégrées par ATI en 1996, toutes les cartes graphiques modernes gèrent la 2D et la 3D au sein d'un seul circuit intégré.
En 1996, ATI lança la première carte 3D du marché : La 3D Rage, cette carte n'était cependant pas encore accélératrice 3D (ce fut le constructeur 3DFX qui créa la première d'entre
elles, la Voodoo (voir Figure 1.1), qui fut une véritable révolution dans le monde du jeu en 3D),
ce ne fut qu'en 1997 que NVIDIA passa à la 3D à base de polygones avec le NV3, plus connu
sous le nom de Riva 128.
4
Figure 1.1 Carte Voodoo Banshee (1998) [2]
Depuis la n des années 1995, les cartes graphiques ont fortement évolué. Le matériel est
devenu de plus en plus puissant avec des coûts de production et d'achat de plus en plus bas.
Autrefois, la fonction essentielle d'une carte graphique était de transmettre les images produites
par l'ordinateur à l'écran. C'est encore sa fonction principale sur beaucoup de machines à vocation bureautique. Aujourd'hui, le marché des GPU pour particulier sert surtout pour les jeux
vidéo et les logiciels de graphisme.
Les GPU étant des calculateurs externes dédiés à un type de calcul, elles ont depuis plus de
dix ans dépassé les capacités des CPU (voir Section 2.1). Si bien que les scientiques sont de
plus en plus nombreux à vouloir en exploiter le potentiel dans d'autres domaines. Il peut s'agir
de faire tourner des simulations de modèles météo, nanciers ou toute opération parallélisable
et nécessitant une très grande quantité de calcul. NVIDIA et ATI/AMD, les deux principaux
fabricants de cartes graphiques à haute performance et pour le grand public proposent chacun
des solutions propriétaires an de pouvoir utiliser leur produit pour du calcul scientique. Pour
NVIDIA, on pourra se référer au projet CUDA, tandis que pour AMD, ce sera le projet ATI
Stream (voir Section 3.3) [3].
5
1.2 Domaines d'utilisations
Les processeurs graphiques GPU peuvent être utilisés pour de nombreuses applications aussi
bien dans le domaine professionnel que pour les particuliers ou le grand public.
Dans le domaine public, elles sont surtout utilisées pour les jeux vidéo ou les logiciels de
traitement graphique (montages vidéo, 3D, ...).
Dans le domaine professionnel, elles sont utilisées pour du dessin, des traitements graphiques,
des graphismes, des modélisations en tout genre (lms, animations, architecture,...).
À la base, elles s'occupaient donc des aspects graphiques. De nos jours, elles servent de plus
en plus au calcul parallèle et au calcul intensif (haute performance).
Les cartes graphiques professionnelles sont basées sur des GPU identiques aux cartes graphiques grand public, mais qui se diérencient avec la taille. Les performances sont optimisées
pour les applications 3D professionnelles, souvent en Open GL, grâce à des pilotes spéciques.
Par exemple, une Quadro 5000, basée sur le même GPU que la GTX 465, peut acher 50%
de triangles de plus qu'une GTX 480... Les cartes professionnels sont surtout utilisées dans de
grands Data center pour notamment permettre l'utilisation à distance d'applications lourdes
ou permettre la demande en ressources de grandes entreprises.
Les cartes professionnelles se distinguent aussi par un niveau de qualité et une validation
plus poussés. Elles disposent également d'un design propre optimisé pour les contraintes d'une
station de travail ainsi que d'une connectique adaptée. Par exemple, à l'inverse des produits
grand public, le DisplayPort est présent sur toutes les cartes actuelles alors que le HDMI est
aux abonnés absents. Les fréquences et le nombre d'unités actives sont par contre en général
revus à la baisse. Les cartes professionnelles disposent donc de moins de puissances brutes que
les cartes grand public.
Dans le monde plus sérieux du travail, il n'est bien entendu pas question de pousser les
fréquences, et donc la consommation, pour gagner 3% de performances face à la concurrence. Il
n'est pas question non plus de designs prévus pour laisser beaucoup de marge à l'overclocking,
ni d'économies de bout de chandelle sur le choix des composants de l'étage d'alimentation.
Eviter de dépasser 150 watts et donc d'avoir recours à plus d'un connecteur d'alimentation 6
broches est important pour que les produits puissent être intégrés et certiés pour un maximum
de stations de travail. Il en va de même pour le format single slot qui est la règle en dehors du
très haut de gamme, contrairement aux cartes grand public qui ont tendance à abuser du dual
slot, même dans l'entrée de gamme.
Enn, certaines fonctionnalités des GPUs sont réservées aux cartes professionnelles. C'est
par exemple le cas de la synchronisation stéréo ou framelock/genlock qui est disponible sur les
Quadros et FirePros haut de gamme.
Avec ses nouveaux GPUs, Nvidia a désactivé plus de fonctionnalités matérielles dans les
GeForce, ce qui ajoute donc des points de diérentiations aux nouvelles Quadro. (voir Figure
1.2)
Support de l'ECC.
Calcul en double précision performant, à demi vitesse (ralenti à 1/8esur les GeForce).
Débit de triangles rastérisés à pleine vitesse (bridé sur GeForce).
6
Figure 1.2 Débit de triangle entre Quadro et GeForce
7
1.3 Architecture du GPU
Un GPU est une multiplication importante de n petites machines SIMD indépendantes et
partageant une mémoire globale. Ces machines SIMD représentent chacune un multiprocesseur
composé d'ALU (ou thread hardware) synchronisés, d'un décodeur d'instructions, et de trois
mémoires partagées entre toutes les ALUs dont deux mémoires caches.
Son architecture est très complexe et spécialement conçue pour traiter des pixels en parallèles, il est constitué de nombreux composants dont le vertex pipeline qui s'occupe des
vertices et le pixel pipeline qui s'occupe des pixels.
Il est aussi constitué de beaucoup de c÷urs, donc de beaucoup de multiprocesseurs, ce qui
permet d'eectuer plusieurs traitements à la fois grâce au parallélisme que nous aborderons au
Chapitre 3. (Il y a par exemple 128 processeurs dans la GeForce 8800).
Les processeurs graphiques permettent donc une multiplication des unités de traitement et
une complexication des unités de contrôle ainsi qu'une augmentation régulière de la mémoire
cache.
Figure 1.3 Architecture d'un GPU [4]
8
1.4 Fonctionnement du GPU
Le GPU fonctionne sur un mode d'exécution vectoriel contrairement à une exécution pipelinée.
L'exécution pipelinée signie par son nom que le travail est eectué le long d'un "tuyau".
Elle suit donc un processus qui passe par les étapes suivantes : fetch, decode, load, execute, et
write. Dans ce mode, les résultats dépendent des précédents, et pour qu'une instruction soit
donc eectuée, elle doit attendre qu'une autre soit nie. Les instructions en attente sont mises
dans un "buer" ou "tampon", on utilise, dans ce cas, une mémoire cache ce qui est par conséquent impossible pour les jeux vidéo car ce serait évidemment trop lent.
Pour ce faire, la solution est la vectorisation du travail. C'est un mode qui suit les mêmes
étapes que le mode pipelinée, sauf qu'au moment du load, le travail est divisé. Plusieurs instructions se font en même temps, les résultats ne dépendent donc plus des précédents. Et pour
ceux qui, éventuellement, dépendraient d'un résultat antérieur, il existe un compilateur qui
gère ces dépendances. Elles accèdent à la mémoire avec des motifs connus. La mémoire est alors
fortement entrelacée.
Comparé au pipeline, il y a une amortie des latences d'accès à la mémoire, et on a théoriquement pas besoin de cache.
En conclusion, la vectorisation du travail accélère l'exécution. [5]
Figure 1.4 Schéma fonctionnel d'un Pipeline graphique [6]
Il y deux traitements, celui de la géométrie et celui du rendu.
Le traitement de la géométrie consiste à gérer les données reçues (vertices et primitives) qui
sont alors traitées et analysées, voire modiées par les composants via la tessellation, le vertex
pipeline, le clipping, le culling, et enn le tramage.
Le traitement du rendu se fait via le pixel pipeline, le test de profondeur, le test alpha, le test
brouillon, le brouillard et l'alpha blending. (voir Figure 1.5) [7]
Le calcul par le GPU (GPGPU) consiste à utiliser le processeur graphique (GPU) en parallèle du CPU pour accélérer des tâches de calcul polyvalentes de sciences et d'ingénierie.
9
Figure 1.5 Schéma de fonctionnement d'un GPU [7]
10
Chapitre 2
CPU
2.1 Dénition du CPU
Le CPU (Central Processing Unit) signiant unité centrale de traitement est le processeur
principal d'un ordinateur et est plaçé sur la carte mère de ce dernier. Il est capable de lire, comprendre, et exécuter les instructions d'un algorithme, il eectue donc des traitements appelés
processus. Les processeurs existent dans tous les ordinateurs depuis le tout début de l'informatique. [8]
Il est soumis à divers paramètres tels que la cadence, la fréquence, la mémoire cache, eux mêmes
assujettis à la nesse de gravure et au nombre de transistors gravés lors de l'usinage de cette
puce composée de silicium.
Chargé de l'exécution des instructions des programmes, le CPU est l'élément prédominant
d'une conguration informatique. Sa puissance se mesure en Flops, soit le nombre de calculs à
virgule ottante eectués en une seconde. [9]
2.2 Comparaison GPU-CPU
Nous comparons ici la diérence entre le GPU et le CPU, nous voyons sur la Figure 3.1 que
le GPU est constitué de nombreux multicoeurs comparé au CPU.
Comme dit précédemment, le GPU est le processeur de la carte graphique tandis que le CPU
est le processeur de l'ordinateur.
La diérence est que les GPU sont nettement plus performants que les CPU pour l'achage
et le rendu 3D.
Cela s'explique facilement étant donné que le processeur d'un ordinateur est prévu pour effectuer toutes sortes de tâches diérentes, alors que le processeur d'une carte graphique est
optimisé pour l'achage graphique (2D/3D).
Un GPU est une unité de calcul massivement parallèle. La tâche qui consiste à remplir un
million de pixels en moins d'une milliseconde est extrêmement répétitive. En eet, on peut
facilement demander à n sous unités de remplir un million de polygones sur chacune de leur
partie d'écran. Doubler la performance sur cette tâche simple reviendrait donc à doubler le
nombre d'unités qui remplissent les pixels.
Typiquement dans un jeu vidéo le CPU qui orchestre les opérations pour le GPU est un
facteur limitant certain. Le GPU peut s'en sortir en augmentant continuellement la charge qui
lui est assignée (augmentation de la résolution, de l'antialiasing, des calculs d'éclairage etc..).
11
Mais si sa charge n'augmente pas alors le GPU peut apparaître comme stagnant sur une application limitée par le CPU.
Pour toutes les tâches qui sont fortement "data parallel" ou SIMD (un seul compteur d'instructions : simple instruction, données multiples), le GPU est à son avantage. De même pour
toutes les tâches qui consistent à tracer des triangles puisque l'on peut mettre à prot toute la
puissance de calcul dédiée. Mais si la tâche consiste à travailler sur un seul thread d'éxecution
et sur une donnée à la fois, cet avantage disparaît. C'est que le CPU, ne pouvant mettre à
prot ni une parallélisation facile, ni un gros pipelining, doit donc utiliser ses transistors pour
maximiser le nombre d'instructions uniques exécutées par seconde. Il va donc dédier une grosse
partie de sa surface à l'exécution "désordonnée".
Si une instruction dépend d'une information située en mémoire principale, le délai d'attente
sera assez long. Le CPU restera donc à ne rien faire pendant une bonne partie de son temps.
Pour pallier cette lacune, on va rapatrier une bonne partie de cette mémoire localement, pour
permettre aux unités de calcul de travailler à leur vitesse de croisière. Plus le cache est gros
plus on limite ces délais d'attente.
Le CPU est fortement limité par son jeu d'instructions (les commandes du CPU), ce dernier
est plus ou moins gé et n'a que des opérations très élémentaires. Les gains en ecacité sont
fortement limités par ce jeu d'instructions mais en contrepartie il y gagne un gros avantage.
Comme chaque commande est très simple, changer de commande en cours de route en se basant sur une commande précédente est relativement peu coûteux (encore moins si l'on utilise la
prédiction de branchement) et donc chaque nouvelle commande peut être rendue dépendante
de la précédente. À l'inverse pour le GPU, si chaque commande devait être dépendante d'une
précédente, le gros pipeline resterait vide la plupart du temps.
Dans un GPU, il y a plus de transistors pouvant être consacrés aux traitements des données
plutôt que dans les CPU où se trouvent les données de cache et de contrôle de ux. Un CPU
possède 2, 4, à 8 coeurs tandis que le GPU en possède 240 et plus. (voir Figure 3.1)
Figure 2.1 Comparaison CPU-GPU [1]
12
Les CPU sont composés d'une unité qui va eectuer toutes sortes de calculs divers, il se compose d'une mémoire cache et de coeurs de calcul. Les GPU sont basés sur une puce qui eectuera
les calculs mais aujourd'hui ces unités de calcul sont indépendantes du reste de l'ordinateur,
possédant leur propre mémoire cache cadencée à très haute vitesse. Les cartes graphiques vont
eectuer des types de calculs bien spéciques, ce qui permet d'optimiser leur fonctionnement
et leurs méthodes de calcul. Elles seront donc de plus en plus puissantes.
Les avantages du GPU sont représentés par le fait que la carte peut être insérée dans une
machine de bureau, il n'y a donc pas besoin d'infrastructures particulières et le coût est relativement faible.
Par contre ses désavantages sont qu'il a besoin d'un programme adapté et d'une machine capable de recevoir la carte.
Ces dernières années, le mur entre les CPU et les GPU est en train de tomber. Les GPU
Nvidia, par exemple, peuvent exécuter des applications non graphiques. Ils sont donc capables
de se comporter aussi bien comme des processeurs spécialisés que comme des processeurs arithmétiques. Ces derniers et les GPU font d'ailleurs le même genre de calculs.
Grâce aux optimisations électroniques, un GPU pour les calculs à virgules ottante et à vitesse
d'horloge égale, est en gros 100 fois plus rapide.
[10]
13
Chapitre 3
Programmation en parallèle sur GPU
3.1 Introduction
Tout commence avec Gordon Moore, le co-fondateur de Intel qui a prédit en 1965 que le
nombre de transistors d'un processeur pourrait doubler tous les 18 mois et qu'ils deviendraient
plus petits, plus denses, et plus puissants.
Mais chaque processeur n'est pas plus rapide en lui-même, on peut tout simplement diviser la
tâche de travail à eectuer sur beaucoup plus de transistors, il s'ensuit donc un gain de temps
considérable.
Cette prédiction est appelée la Loi de Moore (voir Figure 3.1 )
Figure 3.1 Comparaison CPU-GPU [2]
Actuellement tous les fournisseurs principaux de processeurs produisent des puces multicoeurs. Et bientôt toute machine sera construite avec un système parallèle, ce qui sera un gros
changement dans l'industrie de l'informatique.
14
Mais cette loi de Moore fût réinterprétée en disant cette fois-ci que le nombre de transistors
d'un processeur doublerait non pas tous les 18 mois mais tous les deux ans.
Malheureusement, même avec une innité de processeurs, l'accélération est limitée en raison
de la loi d'Amdahl que nous ne faisons que mentionner ici.
Cette loi d'Amdahl nous montre le gain de temps R d'un système multiprocesseur par la
relation 3.1 :
R=
1
s
(1 − s) +
N
(3.1)
En eet, si le nombre de processeurs N tend vers l'inni, on a :
R=
1
(1 − s)
(3.2)
Dans cette dernière relation (3.2), le gain de temps R ne dépend que de la proportion
d'activité parallélisable s.
15
3.2 Principes et notions de l'informatique en parallèle
Pour programmer en parallèle, il faut trouver assez de parallélisme, utiliser la notion de
granularité des tâches, c'est-à-dire essayer d'atteindre la plus grande nesse du système où l'on
ne peut plus découper l'information.
Il faut aussi communiquer le moins possible, les données doivent donc être localisées et il est
nécessaire d'équilibrer le chargement si l'on ne veut pas avoir un système trop lourd.
Enn il faut être coordonné, synchronisé et pouvoir modéliser ce qui va se passer.
Voilà ce qui caractérise la programmation en parallèle et qui fait qu'elle est plus compliquée
que la programmation séquentielle. Mais programmer un GPU est plus aisé qu'avant.
16
3.3 Langages de programmation sur GPU
Nous allons introduire quelques langages de programmation pour GPU.
Il existe :
créé en 2004.
Stream : Il fût créé en 2008 pour des cartes ATI uniquement, c'est le concurrent direct
à NVIDIA.
Brook GPU :
ATI
DirectX 11, Open GL :
Créé par Apple en 2009 pour unier l'utilisation parallèle, il est compatible avec
tout type de carte graphique à plusieurs coeurs mais nécessite d'un compilateur spécique
au matériel.
CUDA : Signie "Compute Unied Device Architecture", Il est compatible avec les cartes
NVIDIA et fût créé en 2006-2007. Il est très proche du C/C++. [1] [10]
OpenCL :
Voici l'exemple d'un programme codé en OpenCL. [10]
1
2
3
4
5
6
7
8
9
10
11
12
13
__kernel void addv ( __global const f l o a t ∗ a , __global const f l o a t ∗ b , __global const f l o a t ∗
{
int i = g e t _ g l o b a l _ g i d ( 0 ) ;
c [ i ] = a[ i ] + b[ i ];
}
main ( )
{
}
...
k e r n e l = c l C r e a t e K e r n e l ( . . . , " addv " , . . . )
clEnqueueNDRangeKernel ( queue , k e r n e l , . . . , 1 0 0 0 , . . . ) ;
...
On voit qu'en réalité, ce n'est pas si facile, il nécessite d'avoir une bonne expertise en programmation, proche du matériel.
Nous n'irons pas plus loin dans la programmation.
En résumé, les opérations d'un programme sont distribuées sur les diérents coeurs du processeur, ce qui permet d'être eectuées en parallèle.
17
Bibliographie
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
[10]
Pierre Manneback. Informatique parallèle et distribuée. PhD thesis, FPMs, 2010-2011.
Wikipédia, l'encylopédie libre, Mars 2013. www.wikipedia.org.
Nvidia's website, Mars 2013. www.nvidia.fr.
Hpc wire, Mars 2013. www.hpcwire.com.
David Defour. Dis... c'est quoi un GPU ? PhD thesis, Laboratoire ELIAUS, Université de
Perpignan, 2008.
Pierre Kestener. Introduction à la programmation des GPU. PhD thesis, CEA-Saclay,
IRFU, SEDI, Ensta, 2010.
Pc world, Mars 2013. www.pcworld.fr.
G. Libert and M. Benjelloun. Informatique I. PhD thesis, FPMs, 2011-2012.
C net, Mars 2013. www.cnet.com.
Jean-Stéphane Varré. GPU, processeurs multi-coeurs et bio-informatique. PhD thesis,
Université de Lille.
18
Téléchargement