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.
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.
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.).
In base a questa presentazione NVIDIA, max è 16 flussi (su Fermi). http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf
Per chiarire, ho creato con successo più di 16 corsi d'acqua, ma penso che l'hardware può supportare solo 16 kernel concorrenti, per cui valgono in eccesso vengono sprecati in termini di concorrenza.
Kepler è probabilmente diverso.
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.
Si potrebbe voler menzionare il sovraccarico di creazione e distruzione di flussi, che avrà un effetto se molti flussi vengono creati e distrutti. – harrism
@ 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
Intendi stream CUDA (esegui operazioni di memoria parallela ed esecuzioni del kernel) o thread CUDA (per eseguire un singolo kernel). – KoppeKTop