2010-08-25 5 views
17

Esiste un numero massimo di stream che è possibile creare in CUDA?Esiste un numero massimo di stream in CUDA?

Per chiarire intendo flussi CUDA come nel flusso che consente di eseguire i kernel e le operazioni di memoria.

+0

Intendi stream CUDA (esegui operazioni di memoria parallela ed esecuzioni del kernel) o thread CUDA (per eseguire un singolo kernel). – KoppeKTop

risposta

11

Non ho visto alcun limite nella documentazione, ma ciò non significa che tutti gli stream verranno eseguiti contemporaneamente, poiché si tratta di un limite hardware hardware (Multiprocessori, registri, ecc.).

16

Non esiste un limite realistico al numero di flussi che è possibile creare (almeno 1000). Tuttavia, esiste un limite al numero di flussi che è possibile utilizzare in modo efficace per raggiungere la concorrenza.

In Fermi, l'architettura supporta lanci di kernel simultanei a 16 vie, ma esiste solo una singola connessione dall'host alla GPU. Quindi, anche se hai 16 stream CUDA, alla fine verranno incanalati in una coda HW. Questo può creare false dipendenze dei dati e limitare la quantità di concorrenza che si può ottenere facilmente.

Con Kepler, il numero di connessioni tra l'host e la GPU è ora 32 (anziché uno con Fermi). Con la nuova tecnologia Hyper-Q, ora è molto più semplice mantenere la GPU occupata con lavoro simultaneo.

+2

Si potrebbe voler menzionare il sovraccarico di creazione e distruzione di flussi, che avrà un effetto se molti flussi vengono creati e distrutti. – harrism

+1

@ Mark Ebersole Ma perché avevamo bisogno di 32 connessioni tra l'host e la GPU per l'unico lancio simultaneo di 16 stream di stream su Kepler? – Alex

Problemi correlati