Introduction à la programmation GPU [fermé]


176

Tout le monde a cet énorme superordinateur massivement parallélisé sur son bureau sous la forme d'un GPU de carte graphique.

  • Quel est l'équivalent "bonjour du monde" de la communauté GPU?
  • Que dois-je faire, où dois-je aller, pour commencer à programmer le GPU pour les principaux fournisseurs de GPU?

-Adam


1
Parlez-vous de GPGPU ou de codage graphique?
Menkboy

5
Il parle de CUDA (une API pour les GPU nVidia) et d'autres techniques. Utilisation des unités FPU disponibles dans les GPU pour le codage non graphique.
Wedge

1
Pour référence, une GeForce 8800 de dernière génération dispose de 128 processeurs de flux fonctionnant à ~ 1,3 GHz, une GTX 280 haut de gamme a 240 processeurs de flux, les performances théoriques de ces GPU sont respectivement de 0,5 et 0,9 TeraFLOPS.
Wedge

Réponses:


70

Découvrez CUDA par NVidia, IMO est la plate-forme la plus simple pour faire de la programmation GPU. Il y a des tonnes de documents sympas à lire. http://www.nvidia.com/object/cuda_home.html

Bonjour tout le monde serait de faire n'importe quel type de calcul en utilisant le GPU.

J'espère que cela pourra aider.


17
  1. Vous obtenez des vertex et des pixels shaders programmables qui permettent l'exécution de code directement sur le GPU pour manipuler les tampons à dessiner. Ces langages (c'est-à-dire GL Shader Lang d'OpenGL et High Level Shader Lang et les équivalents de DirectX) sont une syntaxe de style C et sont vraiment faciles à utiliser. Quelques exemples de HLSL peuvent être trouvés ici pour XNA game studio et Direct X. Je n'ai pas de références GLSL décentes, mais je suis sûr qu'il y en a beaucoup autour. Ces langages de shader donnent une immense puissance pour manipuler ce qui est dessiné à un niveau par sommet ou par pixel, directement sur la carte graphique, ce qui rend des choses comme les ombres, l'éclairage et la floraison vraiment faciles à mettre en œuvre.
  2. La deuxième chose qui me vient à l'esprit est l'utilisation d' openCL pour coder les nouvelles lignes de GPU à usage général. Je ne sais pas comment l'utiliser, mais je crois comprendre qu'openCL vous donne les débuts pour pouvoir accéder aux processeurs à la fois sur la carte graphique et sur le processeur normal. Ce n'est pas encore une technologie courante et semble être motivé par Apple.
  3. CUDA semble être un sujet brûlant. CUDA est le moyen pour nVidia d'accéder à la puissance du GPU. Voici quelques intros

9

Je pense que les autres ont répondu à votre deuxième question. En ce qui concerne le premier, le "Hello World" de CUDA, je ne pense pas qu'il existe une norme établie, mais personnellement, je recommanderais un additionneur parallèle (c'est-à-dire un programme qui additionne N entiers).

Si vous regardez l'exemple de «réduction» dans le SDK NVIDIA, la tâche superficiellement simple peut être étendue pour démontrer de nombreuses considérations CUDA telles que les lectures fusionnées, les conflits de banques de mémoire et le déroulement de boucle.

Voir cette présentation pour plus d'informations:

http://www.gpgpu.org/sc2007/SC07_CUDA_5_Optimization_Harris.pdf


7

Jetez un œil au SDK ATI Stream Computing . Il est basé sur BrookGPU développé à Stanford.

À l'avenir, tous les travaux GPU seront normalisés à l'aide d' OpenCL . C'est une initiative parrainée par Apple qui sera indépendante des fournisseurs de cartes graphiques.


7

OpenCL est un effort pour créer une bibliothèque multiplateforme capable de programmer du code adapté, entre autres, aux GPU. Il permet d'écrire le code sans savoir sur quel GPU il fonctionnera, ce qui facilite l'utilisation d'une partie de la puissance du GPU sans cibler spécifiquement plusieurs types de GPU. Je soupçonne que ce n'est pas aussi performant que le code GPU natif (ou aussi natif que les fabricants de GPU le permettent), mais le compromis peut en valoir la peine pour certaines applications.

Il en est encore à ses débuts (1.1 à partir de cette réponse), mais a gagné en popularité dans l'industrie - par exemple, il est pris en charge nativement sur OS X 10.5 et supérieur.


6

CUDA est un excellent framework pour commencer. Il vous permet d'écrire des noyaux GPGPU en C. Le compilateur produira un microcode GPU à partir de votre code et enverra tout ce qui fonctionne sur le CPU à votre compilateur régulier. Il s'agit uniquement de NVIDIA et ne fonctionne que sur les cartes de la série 8 ou mieux. Vous pouvez consulter la zone CUDA pour voir ce que vous pouvez en faire. Il existe d'excellentes démos dans le SDK CUDA . La documentation fournie avec le SDK est un très bon point de départ pour écrire du code. Il vous guidera tout au long de l'écriture d'un noyau de multiplication matricielle, ce qui est un excellent point de départ.


5

Un autre moyen facile d'entrer dans la programmation GPU, sans entrer dans CUDA ou OpenCL, est de le faire via OpenACC .

OpenACC fonctionne comme OpenMP, avec des directives de compilateur (comme #pragma acc kernels) pour envoyer le travail au GPU. Par exemple, si vous avez une grande boucle (seules les plus grandes en bénéficient vraiment):

int i;
float a = 2.0;
float b[10000];
#pragma acc kernels
for (i = 0; i < 10000; ++i) b[i] = 1.0f;
#pragma acc kernels
for (i = 0; i < 10000; ++i) {
  b[i] = b[i] * a;
}

Edit: malheureusement, seul le compilateur PGI prend vraiment en charge OpenACC pour le moment, pour les cartes GPU NVIDIA.


3

Essayez GPU ++ et libSh

Le lien LibSh a une bonne description de la façon dont ils ont lié le langage de programmation aux primitives graphiques (et évidemment, les primitives elles-mêmes), et GPU ++ décrit de quoi il s'agit, à la fois avec des exemples de code.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.