2010-12-13 6 views
11

Je voudrais commencer à déclarer que je ne sais rien de la programmation OpenCL/GPU mais je suis un programmeur avancé C# (général .Net) sans crainte de C++ et j'aimerais apprendre la programmation OpenCL/GPU. .. ma question est ... où dois-je commencer?!? Que devrais-je télécharger?!? existe-t-il un moyen de programmer OpenCL/GPU sur Visual Studio (sur C#)!?! comme ... bonjour stuff monde ... TKS tousOpenCL et GPU programmation Roadmap

+0

Possédez-vous une carte ATI ou nvidia? –

+0

j'ai les deux en ce moment ... dans 1 pc j'ai un ati et dans un autre j'ai un nvidia ... – Leonardo

+0

.Net a XNA Framework, qui est la fabrication de jeu xbox. Tu devrais le casser. – Bonshington

Répondre

9

Le meilleur site que j'ai trouvé une introduction claire sur la façon dont la programmation GPU est différente de la programmation CPU est ce site:

http://www.macresearch.org/opencl

Même si ces vidéos sont faites montrant des cartes de style NVIDIA, les concepts importants de:

  • plusieurs threads en cours d'exécution exactement les mêmes instructions de blocage à pas (même si un code est écrit avec if-else constructions), et

  • accès mémoire coalisée

appliquent également à AMD ou NVIDIA et sont crucial pour commencer à changer la façon dont vous pensez à la façon de structurer votre algorithme pour obtenir une amélioration des performances sur le GPU.

+3

Désolé, je pense que cette question concerne principalement la mise en route du codage par opposition à la conception. La série MacResearch est idéale pour commencer à penser en termes de GPU mais n'est pas très informative pour le codage. Il est également plutôt daté maintenant. Je recommanderais la série, cependant. –

7

http://developer.amd.com/zones/OpenCLZone/pages/default.aspx

En supposant que vous voulez faire OpenCL plutôt que cuda alors cela a un tas de tutoriels vidéo d'introduction. Il existe un ensemble similaire chez NVidia - bien qu'ils aient plus de contenu basé sur CUDA.

Si vous voulez faire de la programmation en GPL, il vous suffit d'obtenir un exemple d'application capable d'exporter du code opencl/cuda dans un GPU. Vous devez également apprendre le langage opencl/cuda, puis apprendre à réfléchir aux algorithmes en parallèle et à tester/mesurer les résultats.

Il n'y a pas « utiliser GPU » bouton qui fait instantanément votre code 100x plus rapide

+0

j'espérais une réponse plus directe ... comme ..."allez à cette adresse et téléchargez ça ... si vous avez une carte vidéo ATI allez-y ... si vous avez un Geforce allez dans ce site" sorte de chose ... – Leonardo

+0

ok ... alors où dois-je commencer? !? que dois-je faire à mes programmes afin qu'ils utilisent la puissance du GPU?!? – Leonardo

+0

Sur une note que vous souhaitiez voir: Haskell pourrait très bien avoir ce bouton. Dans une certaine mesure, c'est possible avec toutes les langues, mais avec Haskell c'est plus souvent possible. Et beaucoup plus facile à développer. (La programmation fonctionnelle définit le comportement de manière plus stricte car elle définit les résultats, pas les procédures) – Lodewijk

4

Je dirais check out OpenTK et leurs liaisons C# pour obtenir un saut sur OpenCL. Regardez OpenCL's website pour obtenir les liaisons C ou C++ standard.

Apprentissage OpenCL, il y a différentes ressources ... pas une tonne. J'ai trouvé following this utile.

1

Je suis désolé d'avoir 7 ans de retard. Mais voici une bibliothèque C# GPGPU open source pour écrire vos propres noyaux OpenCL:

https://github.com/tugrul512bit/Cekirdekler/wiki/Beginning

et un monde bonjour comme tradition:

ClNumberCruncher gpus= new ClNumberCruncher(
    ClPlatforms.all().devicesAmd().gpus(), @" 
     __constant char text[12] = {'h','e','l','l','o',' ','w','o','r','l','d',' '}; 
     __kernel void hello(__global char * arr) 
     { 
       printf(text); 
     } 
    "); 
gpus.performanceFeed = true; 
ClArray<byte> array = new ClArray<byte>(5,1); 
array.compute(gpus, 1, "hello", 5, 1); 
array.compute(gpus, 1, "hello", 5, 1); 
array.compute(gpus, 1, "hello", 5, 1); 

c'est la sortie:

hello world 
hello world 
hello world 
hello worldhello world 

Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] ----------------------------------------------------- 
Device 0(gddr): Oland        ||| time: 29.47ms, workitems: 2 
Device 1(gddr): gfx804        ||| time: 29.76ms, workitems: 3 
----------------------------------------------------------------------------------------------------------------- 

hello worldhello world 
hello world 
hello world 
hello world 

Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] ----------------------------------------------------- 
Device 0(gddr): Oland        ||| time: 1.64ms, workitems: 2 
Device 1(gddr): gfx804        ||| time: 1.33ms, workitems: 3 
----------------------------------------------------------------------------------------------------------------- 

hello worldhello world 
hello world 
hello world 
hello world 

Compute-ID: 1 ----- Load Distributions: [40.0%] - [60.0%] ----------------------------------------------------- 
Device 0(gddr): Oland        ||| time: 1.08ms, workitems: 2 
Device 1(gddr): gfx804        ||| time: .87ms, workitems: 3 
----------------------------------------------------------------------------------------------------------------- 

il peut faire un tas de choses de pipelining à la planification du pool de tâches.

+1

hahahahah tks quand même! – Leonardo