Question

Tout le monde a sur son bureau cet énorme superordinateur fortement parallélisé sous la forme d’une carte graphique.

  • Qu'est-ce que le "Bonjour tout le monde"? équivalent de la communauté GPU?
  • Que dois-je faire, où vais-je, pour commencer à programmer le GPU pour les principaux fournisseurs de GPU?

-Adam

Était-ce utile?

La solution

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 avec GPU.

L’espoir que cela aide.

Autres conseils

  1. Vous obtenez un sommet programmable et pixel shaders qui permettent l'exécution de code directement sur le GPU pour manipuler les tampons qui doivent Être dessiné. Ces langues (c'est-à-dire GL Shader Lang et High d'OpenGL Level Shader Lang et les équivalents de DirectX ), sont la syntaxe de style C, et vraiment facile à utiliser. Quelques exemples de HLSL peut être trouvé ici pour le jeu XNA studio et Direct X. Je n'ai pas des références GLSL décentes, mais je suis Bien sûr, il y a beaucoup autour. Celles-ci langues de shader donnent un immense quantité de puissance à manipuler ce qui est dessiné à chaque sommet ou par niveau de pixel, directement sur la carte graphique, ce qui rend les choses comme les ombres, l'éclairage et la floraison vraiment facile à mettre en œuvre.
  2. La deuxième chose qui me vient à l'esprit est l'utilisation openCL pour coder pour la nouvelle lignes de GPU à usage général. je suis Je ne sais pas comment l'utiliser, mais mon la compréhension est que OpenCL donne vous les débuts de pouvoir processeurs d'accès sur les deux carte graphique et processeur normal. Ce n'est pas encore une technologie grand public et semble être piloté par Apple.
  3. CUDA semble être un sujet d'actualité. CUDA est le moyen utilisé par nVidia pour accéder au pouvoir du processeur graphique. Voici quelques intros

Je pense que les autres ont répondu à votre deuxième question. En ce qui concerne le premier, le " Hello World " 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 la "réduction" Par exemple, dans le Kit de développement logiciel 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 / p>

Consultez le Kit de développement logiciel (SDK) ATI Stream Computing . Il est basé sur le BrookGPU développé à Stanford.

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

CUDA est un excellent cadre pour commencer. Il vous permet d’écrire les 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 consulter la zone CUDA pour voir ce que l'on peut en faire. Le CUDA SDK contient d'excellentes démonstrations. 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.

OpenCL vise à créer une bibliothèque multiplate-forme capable de code de programmation, notamment: autres choses, les GPU. Il permet d'écrire le code sans savoir sur quel processeur graphique il sera exécuté, ce qui facilite l'utilisation 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 (version 1.1 de la réponse), mais il a gagné du terrain dans le secteur - il est par exemple pris en charge de manière native sur OS X 10.5 et supérieur.

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;
}

Éditer: malheureusement, seul le compilateur PGI prend réellement en charge OpenACC pour le moment, pour les cartes NVIDIA GPU.

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.

Si vous utilisez MATLAB, il devient assez simple d’utiliser des GPU pour le calcul technique (calculs matriciels et calculs compliqués). 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

Je m'intéresse également à ce sujet et à la programmation parallèle. Et j’ai trouvé le lien suivant : consultez le site Udacity.com!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top