2012-09-06 14 views
8

Per il mio sviluppo CUDA, sto utilizzando una macchina con 16 core e 1 GPU GTX 580 con 16 SM. Per il lavoro che sto facendo, ho in programma di lanciare 16 thread host (1 su ciascun core) e 1 lancio del kernel per thread, ciascuno con 1 blocco e 1024 thread. Il mio obiettivo è quello di eseguire 16 kernel in parallelo su 16 SM. È possibile/fattibile?Thread host multipli che lanciano singoli kernel CUDA

Ho provato a leggere il più possibile su contesti indipendenti, ma non sembrano esserci troppe informazioni disponibili. A quanto ho capito, ogni thread host può avere il proprio contesto GPU. Ma non sono sicuro che i kernel funzioneranno in parallelo se utilizzo contesti indipendenti.

Posso leggere tutti i dati da tutti i 16 thread host in un'unica struttura gigante e passarlo a GPU per avviare un kernel. Tuttavia, sarà troppo copiato e rallenterà l'applicazione.

+0

I contesti multipli non possono utilizzare contemporaneamente una singola GPU, quindi no, questo non funzionerà. – talonmies

+0

Grazie. Puoi per favore mettere sopra quanto sopra in modo che io possa accettarlo? – gmemon

+0

@gmemon, vedere il mio commento qui sotto per la creazione e l'esecuzione di più contesti in CUDA 5.5. Hai eseguito con successo 16 kernel in 16SM? Qual è stata la tua soluzione alla fine. – Tariq

risposta

4

Mentre un'applicazione multithreading può contenere più contesti CUDA contemporaneamente sulla stessa GPU, tali contesti non possono eseguire operazioni contemporaneamente. Quando è attivo, ogni contesto ha il solo uso della GPU e deve cedere prima che un altro contesto (che potrebbe includere operazioni con un'API di rendering o un display manager) possa avere accesso alla GPU.

Quindi in una parola, questa strategia non può funzionare con le versioni o l'hardware CUDA correnti.

+0

Sto usando CUDA 5.5. Supporta l'esecuzione concomitante di più contesti CUDA su una singola GPU? – Tariq

+0

Sto creando due thread separati sull'host e creo il contesto CUDA utilizzando l'API del driver. Questi contesti sono in esecuzione contemporaneamente in CUDA 5.5. – Tariq

6

È possibile avere un solo contesto su una GPU alla volta. Un modo per ottenere il tipo di parallelismo necessario è utilizzare i flussi CUDA. È possibile creare 16 flussi all'interno del contesto e avviare memcopie e kernel in stream per nome. Puoi leggere di più in un webinar veloce sull'utilizzo degli stream su: http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf. Il riferimento completo alle API si trova nei manuali del toolkit CUDA. Il manuale CUDA 4.2 è disponibile allo http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdf.

Problemi correlati