Introduzione alla programmazione GPU [chiuso]


176

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

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

-Adamo


1
Stai parlando di GPGPU o codifica grafica?
Menkboy,

5
Sta parlando di CUDA (un'API per GPU nVidia) e di altre tecniche. Utilizzo delle unità FPU disponibili nelle GPU per la codifica non grafica.
Wedge

1
Per riferimento, una GeForce 8800 di ultima generazione ha 128 processori stream che funzionano a ~ 1.3 GHz, un top di gamma GTX 280 ha 240 processori stream, le prestazioni teoriche di queste GPU sono rispettivamente 0,5 e 0,9 TeraFLOPS.
Wedge

Risposte:


70

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 aiuti.


17
  1. Ottieni shader di vertici e pixel programmabili che consentono l'esecuzione del codice direttamente sulla GPU per manipolare i buffer che devono essere disegnati. Questi linguaggi (ovvero GL Shader Lang di OpenGL e Lang di Shader di alto livello e equivalenti di DirectX), sono sintassi in stile C e sono davvero facili da usare. Alcuni esempi di HLSL possono essere trovati qui per XNA Game Studio e Direct X. Non ho riferimenti GLSL decenti, ma sono sicuro che ce ne sono molti in giro. Questi linguaggi shader offrono un'enorme quantità di potenza per manipolare ciò che viene disegnato a livello di vertice o pixel, direttamente sulla scheda grafica, rendendo le cose come ombre, luci e fioritura davvero facili da implementare.
  2. La seconda cosa che viene in mente è usare openCL per codificare le nuove linee di GPU generiche. Non sono sicuro di come utilizzare questo, ma la mia comprensione è che openCL ti dà gli inizi di poter accedere ai processori sia sulla scheda grafica che sulla normale CPU. 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. Ecco alcune introduzioni

9

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

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

Vedi questa presentazione per maggiori informazioni:

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


7

Dai un'occhiata a 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.


7

OpenCL si impegna a creare una libreria multipiattaforma in grado di programmare il codice adatto, tra le altre cose, alle GPU. Permette di scrivere il codice senza sapere su quale GPU funzionerà, rendendo così più semplice utilizzare parte della potenza della GPU senza rivolgersi specificamente a diversi 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.


6

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 la zona CUDA per vedere cosa si può fare con esso. Ci sono alcune fantastiche demo nell'SDK di 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.


5

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

OpenACC funziona come OpenMP, con le direttive del compilatore (come #pragma acc kernels) per inviare il 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.


3

Prova GPU ++ e libSh

LibSh link 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.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.