web-dev-qa-db-fra.com

Introduction à la programmation GPU

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

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

-Adam

167
Adam Davis

Découvrez CUDA de NVidia. IMO est la plate-forme la plus simple pour programmer des 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 tout type de calcul en utilisant GPU.

J'espère que ça t'as aidé.

66
Nazgob
  1. Vous obtenez des shaders de vertex et de pixel programmables qui permettent l'exécution de code directement sur le GPU pour manipuler les tampons à dessiner. Ces langages (c'est-à-dire OpenGL GL Shader Lang et équivalents de haut niveau Shader Lang et DirectX)), sont une syntaxe de style C et sont vraiment faciles à utiliser. Quelques exemples de HLSL peuvent être trouvés ici pour le studio de jeu XNA 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 shaders donnent une quantité énorme de pouvoir pour manipuler ce qui est dessiné niveau des sommets ou des pixels, directement sur la carte graphique, ce qui facilite grandement la mise en œuvre, par exemple, des ombres, de l'éclairage et de la floraison.
  2. La deuxième chose qui me vient à l’esprit est d’utiliser openCL pour coder les nouvelles lignes de GPU à usage général. Je ne suis pas sûr de savoir comment utiliser cela, mais d'après ce que je comprends, openCL vous donne le début pour pouvoir accéder aux processeurs à la fois sur la carte graphique et sur le processeur normal. Ce n'est pas encore une technologie grand public, et semble être piloté par Apple.
  3. CUDA semble être un sujet brûlant. CUDA est le moyen utilisé par nVidia pour accéder au pouvoir du processeur graphique. Ici quelques intros
16
DavidG

Je pense que les autres ont répondu à votre deuxième question. Pour ce qui est du premier, le "Hello World" de CUDA, je ne pense pas qu’il existe un standard, 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 kit de développement NVIDIA, la tâche très simple peut être étendue pour illustrer de nombreuses considérations CUDA telles que les lectures fusionnées, les conflits de banques de mémoire et le déroulement de boucles.

Voir cette présentation pour plus d'informations:

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

8
biozinc

Examinez le SDK ATI Stream Computing . Il est basé sur BrookGP développé à Stanford.

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

7
graphics

CUDA est un excellent cadre 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 s’exécute sur le CPU à votre compilateur habituel. N'est NVIDIA que si et ne fonctionne que sur les cartes 8 séries ou mieux. Vous pouvez vérifier zone CUDA pour voir ce que l'on peut en faire. Il y a quelques bonnes démos dans le CUDA SDK . La documentation fournie avec le SDK constitue un très bon point de départ pour écrire du code. Il vous guidera à travers l’écriture d’un noyau de multiplication matricielle, ce qui en fait un excellent point de départ.

6
Jay Conrod

OpenCL est un effort pour rendre une bibliothèque multi-plateforme capable de programmer le code approprié, entre autres choses, aux GPU. Il permet d'écrire le code sans savoir sur quel processeur graphique il sera exécuté, ce qui facilite l'utilisation d'une partie de la puissance du processeur graphique sans cibler spécifiquement plusieurs types de processeur graphique. Je soupçonne qu’il n’est pas aussi performant que le code GPU natif (ou aussi naturel que le permettent les fabricants de GPU), mais le compromis peut en valoir la peine pour certaines applications.

Il en est encore à ses débuts (1.1 dans ce cas-ci), mais a gagné du terrain dans le secteur - par exemple, il est supporté nativement sur OS X 10.5 et supérieur.

6
Adam Davis

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 compilation (comme #pragma acc kernels) pour envoyer du travail au GPU. Par exemple, si vous avez une grosse boucle (seules les plus grandes en bénéficient réellement):

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 réellement en charge OpenACC pour le moment, pour les cartes NVIDIA GPU.

5
Kyle Niemeyer

Peut-être aimerez-vous ceci GPGPU IDE , qui cache une complexité inutile pour les expériences GPU générales. Actuellement, les noyaux peuvent être programmés pour les shaders OpenCL et/ou GLSL.

4

Essayez GPU ++ et libSh

Le lien LibSh décrit bien comment ils ont lié le langage de programmation aux primitives graphiques (et, bien entendu, aux primitives elles-mêmes), et GPU ++ décrit l’essentiel, à la fois avec des exemples de code.

3
gbjbaanb

Si vous utilisez MATLAB, il devient assez simple d'utiliser des GPU pour l'informatique technique (calculs matriciels et calculs complexes). Je trouve cela utile pour les utilisations des cartes GPU en dehors des jeux. Consultez le lien ci-dessous:

http://www.mathworks.com/discovery/matlab-gpu.html

3
Chetan Rawal

Je m'intéresse également à ce sujet et à la programmation parallèle. Et j'ai trouvé ce qui suit lien , jetez un coup d'œil à Udacity.com!

1
Randika Vishman