Domanda

Ognuno ha questo enorme supercomputer massicciamente parallelizzato sul proprio desktop sotto forma di una GPU della scheda grafica.

  • Qual è il mondo "ciao" " equivalente della comunità GPU?
  • Cosa devo fare, dove devo andare, per iniziare a programmare la GPU per i principali fornitori di GPU?

-Adam

È stato utile?

Soluzione

Dai un'occhiata a CUDA di NVidia, IMO è la piattaforma più semplice per eseguire la programmazione GPU. Ci sono tonnellate di materiali interessanti da leggere. http://www.nvidia.com/object/cuda_home.html

Ciao mondo sarebbe fare qualsiasi tipo di calcolo usando la GPU.

Spero che sia d'aiuto.

Altri suggerimenti

  1. Ottieni vertici programmabili e pixel shader che consentono l'esecuzione di codice direttamente sulla GPU a manipolare i buffer che devono essere disegnato. Queste lingue (ad es. OpenGL GL Shader Lang e High Level Shader Lang e equivalenti di DirectX ), sono sintassi in stile C e davvero facile da usare. Alcuni esempi di HLSL può essere trovato qui per il gioco XNA studio e Direct X. Non ho qualsiasi riferimento GLSL decente, ma lo sono certo ce ne sono molti in giro. Questi le lingue shader danno un immenso quantità di potere a manipola ciò che viene disegnato in un vertice o livello per pixel, direttamente sulla scheda grafica, facendo cose come le ombre, l'illuminazione e la fioritura davvero facile da implementare.
  2. La seconda cosa che viene in mente sta usando openCL per codificare il nuovo linee di GPU generiche. sono non sono sicuro di come usare questo, ma il mio la comprensione è che openCL dà voi gli inizi di poterlo fare processori di accesso su entrambi scheda grafica e CPU normale. Questa non è ancora la tecnologia tradizionale e sembra guidata da Apple.
  3. CUDA sembra essere un argomento caldo. CUDA è il modo di nVidia di accedere alla potenza della GPU. Qui ci sono delle introduzioni

Penso che gli altri abbiano risposto alla tua seconda domanda. Per quanto riguarda il primo, il "Ciao mondo" di CUDA, non credo che esista uno standard prestabilito, ma personalmente consiglierei un sommatore parallelo (ovvero un programma che somma N numeri interi).

Se cerchi la "riduzione" " esempio nell'SDK di NVIDIA, il compito superficialmente semplice può essere esteso per dimostrare numerose considerazioni CUDA come letture a coalescenza, conflitti tra banche di memoria e srotolamento di loop.

Vedi questa presentazione per maggiori informazioni:

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

Dai un'occhiata al ATI Stream Computing SDK . Si basa su BrookGPU sviluppato a Stanford.

In futuro tutto il lavoro della GPU sarà standardizzato usando OpenCL . È un'iniziativa sponsorizzata da Apple che sarà neutrale per i fornitori di schede grafiche.

CUDA è un eccellente framework per cominciare. Ti permette di scrivere kernel GPGPU in C. Il compilatore produrrà microcodice GPU dal tuo codice e invierà tutto ciò che gira sulla CPU al tuo normale compilatore. È solo NVIDIA e funziona solo su schede serie 8 o superiori. Puoi controllare zona CUDA per vedere cosa è possibile fare con esso. Ci sono alcune fantastiche demo nel SDK CUDA . La documentazione fornita con l'SDK è un ottimo punto di partenza per scrivere effettivamente il codice. Ti guiderà attraverso la scrittura di un kernel di moltiplicazione matrice, che è un ottimo punto di partenza.

OpenCL è uno sforzo per rendere una libreria multipiattaforma in grado di programmare il codice adatto, tra altre cose, GPU. Permette di scrivere il codice senza sapere su quale GPU funzionerà, rendendo così più semplice utilizzare parte della potenza della GPU senza indirizzare specifici tipi di GPU. Sospetto che non sia performante come il codice GPU nativo (o nativo come consentiranno i produttori di GPU) ma il compromesso può valere la pena per alcune applicazioni.

È ancora nelle sue fasi relativamente iniziali (1.1 a partire da questa risposta), ma ha guadagnato una certa forza nel settore, ad esempio è supportato nativamente su OS X 10.5 e versioni successive.

Un altro modo semplice per accedere alla programmazione GPU, senza entrare in CUDA o OpenCL, è farlo tramite OpenACC .

OpenACC funziona come OpenMP, con le direttive del compilatore (come #pragma acc kernel ) per inviare lavoro alla GPU. Ad esempio, se hai un loop grande (solo quelli più grandi ne beneficiano davvero):

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

Modifica: sfortunatamente, solo il compilatore PGI supporta davvero OpenACC al momento, per le schede GPU NVIDIA.

Prova GPU ++ e libSh

Il collegamento LibSh ha una buona descrizione di come legano il linguaggio di programmazione alle primitive grafiche (e ovviamente, le primitive stesse), e GPU ++ descrive di cosa si tratta, entrambi con esempi di codice.

Se si utilizza MATLAB, diventa abbastanza semplice utilizzare le GPU per il calcolo tecnico (calcoli matriciali e calcoli matematici / numerici pesanti). Lo trovo utile per gli usi delle schede GPU al di fuori dei giochi. Dai un'occhiata al link qui sotto:

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

Sono anche interessato a questo argomento e alla programmazione parallela. E ho trovato il seguente link , dai un'occhiata a Udacity.com!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top