Domanda

Sto imparando OpenCL , e io sono al punto quando si cerca di lanciare un kernel. Perché è che i fili GPU sono gestite in una griglia?

ho intenzione di saperne di più su questo in dettaglio, ma sarebbe bello con una semplice spiegazione. E 'sempre così quando si lavora con GPGPUs ?

È stato utile?

Soluzione

Si tratta di un approccio comune, che viene utilizzato in CUDA, OpenCL e penso ATI Stream.

L'idea alla base della griglia è di fornire un semplice, ma flessibile, mappatura tra i dati che vengono elaborati e le filettature responsabili del trattamento dei dati. Nella versione semplice del modello di esecuzione GPGPU, un thread GPU è "assegnata" per ogni elemento di uscita in un 1D, 2D o 3D griglia di dati. Per elaborare questo elemento di uscita, il filo leggerà uno (o più) elementi dal posizione corrispondente o posizioni adiacenti nella griglia di dati in ingresso (s). Organizzando i fili in una griglia, è più facile per i fili per capire quali elementi di dati di ingresso per leggere e dove memorizzare gli elementi dei dati di uscita.

Ciò contrasta con il comune multi-core, threading CPU dove un thread viene allocato per core CPU ed ogni molti elementi di ingresso e uscita processi filettati (es 1/4 dei dati in un sistema quad-core).

Altri suggerimenti

La risposta semplice è che le GPU sono progettate per elaborare le immagini e texture che sono griglie 2D di pixel. Quando si esegue il rendering di un triangolo in DirectX o OpenGL, l'hardware rasterizzati in una griglia di pixel.

invocherò la classica analogia di mettere un piolo quadrato in un buco rotondo. Ebbene, in questo caso la GPU è un buco molto quadrata e non come ben arrotondati come GP (General Purpose) suggerirebbe.

Le spiegazioni sopra addotte le idee di texture 2D, ecc L'architettura della GPU è tale che tutta l'elaborazione avviene in flussi con pipeline essendo identica a ciascun flusso, così i dati elaborati necessità di essere segmentato come quello .

Un motivo per cui questo è un bel API è che in genere si lavora con un algoritmo che ha diversi cicli annidati. Se si dispone di uno, due o tre anelli poi una griglia di uno, due o tre dimensioni atlanti ben al problema, dando un filo per il valore di ciascun indice.

Quindi, i valori che avete bisogno nel vostro kernel (valori di indice) sono naturalmente espressi nel API.

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