2012-10-01 12 views
9

Ho un'applicazione in cui vorrei condividere una singola GPU tra più processi. Cioè, ognuno di questi processi creerebbe il proprio contesto CUDA o OpenCL, mirando alla stessa GPU. Secondo il white paper di Fermi [1], il cambio di contesto a livello di applicazione è inferiore a 25 microsecondi, ma i lanci sono effettivamente serializzati mentre si avviano sulla GPU - quindi Fermi non avrebbe funzionato bene per questo. Secondo il white paper di Kepler [2], esiste qualcosa chiamato Hyper-Q che consente fino a 32 connessioni simultanee da più flussi CUDA, processi MPI o thread all'interno di un processo.Esecuzione simultanea del kernel GPU da più processi

Le mie domande: qualcuno ha provato questo su una GPU Kepler e verificato che i suoi kernel sono eseguiti contemporaneamente quando programmati da processi distinti? Questa è solo una funzionalità CUDA o può essere utilizzata anche con OpenCL su GPU Nvidia? Le GPU di AMD supportano qualcosa di simile?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

+2

In risposta alla prima domanda che poni, nvidia ha pubblicato alcuni risultati hyper-Q in un blog [qui] (http://blogs.nvidia.com/2012/08/unleash-legacy-mpi-codes-with -keplers-iper-q /). –

+0

Interessante, grazie per il link. Quel post sul blog implica anche che le GPU K10 non hanno Hyper-Q, mentre il K20 lo farà. –

+0

Questo è corretto. Noterai il link al white paper di Kepler che hai inserito nel titolo "GK110". La GPU su K20 è GK110. La GPU su K10 è GK104 (due di loro). –

risposta

7

In risposta alla prima domanda, NVIDIA ha pubblicato alcuni risultati iper-Q in un blog here. Il blog sta facendo notare che gli sviluppatori che eseguivano il porting del CP2K sono stati in grado di ottenere risultati accelerati più rapidamente perché hyper-Q ha permesso loro di utilizzare la struttura MPI dell'applicazione più o meno così com'è e di eseguire più ranghi su una singola GPU, e ottenere utilizzo della GPU più efficace in questo modo. Come menzionato nei commenti, questa funzione (hyper-Q) è disponibile solo sui processori K20 attualmente, in quanto dipende dalla GPU GK110.

+0

Grazie Robert, è positivo per la prima domanda e credo che dovrò continuare a cercare gli altri. –

-2

Ho eseguito kernel contemporanei dall'architettura di Fermi, funziona in modo meraviglioso e, di fatto, è spesso l'unico modo per ottenere un'alta occupazione dall'hardware. Ho usato OpenCL ed è necessario eseguire una coda di comando separata da un thread cpu separato per fare questo. Hyper-Q è la capacità di inviare nuovi kernel paralleli di dati da un altro kernel. Questo è solo su Keplero.

Problemi correlati