Domanda

PyCUDA, per tutti i suoi difetti, di solito ha ottimi esempi forniti con esso / scaricabili dal wiki. Ma non riuscivo a trovare nulla negli esempi o nella documentazione (o una ricerca google superficiale) che dimostra il modo in cui PyCUDA di assegnazione dyanmically carichi di lavoro su più dispositivi.

Qualcuno può o mi accenno verso ciò che dovrei fare o indicarlo agli esempi?

Un'idea che mi è venuta in mente è stata usando multiprocessing, generando un pool di processi N, ciascuno legato ad un unico dispositivo, e poi, quando la classe si chiama (ho tutte le mie funzioni di GPU in una classe separata, probabilmente non il migliore idea, ma funziona) E 'round-robin i multiprocesses. Quanto è buono / ritardato l'idea è questa?

PS La mia macchina dev è 1 GPU e la mia macchina di prova a 4 GPU, quindi ho bisogno di qualsiasi soluzione per essere in grado di affrontare una serie dinamica di dispositivi (non è così anche aiuto che sono diverse le capacità di calcolo, ma questo è la vita)

È stato utile?

Soluzione

Pycuda non ha avuto alcun supporto di più GPU CUDA intrinseca perché, inoltre, non ha avuto alcun supporto a più GPU intrinseca. Questo cambierà in CUDA 4.0 perché l'API è stato modificato per essere thread-safe e multi-GPU a conoscenza. Ma Pycuda non ha ancora che il sostegno per quanto ne so. Anche quando si tratta, ogni dispositivo deve essere gestito in modo esplicito, e il carico di lavoro diviso per voi. Non c'è la distribuzione del carico di lavoro automatico o qualcosa di simile.

Per multi-GPU, ho normalmente utilizzato mpi4py. Si potrebbe usare uno schema pitone multithread, con ogni thread apertura di un contesto separato Pycuda. Ciò che funziona meglio sarà probabilmente dipenderà da quanto la comunicazione è necessaria tra i dispositivi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top