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?
[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf
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 /). –
Interessante, grazie per il link. Quel post sul blog implica anche che le GPU K10 non hanno Hyper-Q, mentre il K20 lo farà. –
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). –