2011-09-22 13 views
7

Sto lavorando con qualcuno che ha qualche codice MATLAB che vuole essere velocizzato. Attualmente stanno cercando di convertire tutto questo codice in CUDA per farlo funzionare su una CPU. Penso che sarebbe più rapido utilizzare il Toolbox di calcolo parallelo di MATLAB per velocizzarlo, ed eseguirlo su un cluster dotato di Distributed Computing Toolbox di MATLAB, permettendomi di eseguirlo su diversi nodi di lavoro diversi. Ora, come parte della toolbox di calcolo parallelo, è possibile utilizzare things like GPUArray. Tuttavia, sono confuso su come questo potrebbe funzionare. Stai usando cose come parfor (parallelizzazione) e gpuarray (programmazione gpu) compatibili tra loro? Posso usare entrambi? Qualcosa può essere diviso tra diversi nodi di lavoro (parallelizzazione) e allo stesso tempo utilizzare qualsiasi GPU disponibile su ciascun lavoratore?MATLAB Parallel Computing Toolbox - Parallizzazione vs GPU?

Pensano che valga ancora la pena esplorare il tempo necessario per convertire tutto il codice matlab in codice cuda da eseguire su una macchina con più GPU ... ma penso che l'approccio giusto sarebbe utilizzare le funzionalità già incorporate MATLAB.

Qualsiasi aiuto, consiglio, direzione sarebbe davvero apprezzato!

Grazie!

+0

Si potrebbe pensare di provare Jacket per questo invece di gpuArrays.Non ho mai sentito nessuno contento delle prestazioni di gpuArrays, per questi motivi: http://accelereyes.com/compare – arrayfire

risposta

8

Quando si utilizza parfor, si sta effettivamente dividendo il ciclo for in attività, con un'attività per loop iterativo e suddividendo quelle attività in modo che vengano calcolate in parallelo da più worker in cui ogni worker può essere pensato come una sessione MATLAB senza una GUI interattiva. Configurare il cluster per eseguire un numero specificato di worker su ciascun nodo del cluster (in genere, si sceglie di eseguire un numero di worker uguale al numero di core del processore disponibili su quel nodo).

D'altra parte, gpuarray indica a MATLAB che si desidera rendere disponibile una matrice per l'elaborazione da parte della GPU. Sotto il cofano, MATLAB sta eseguendo il marshalling dei dati dalla memoria principale alla memoria interna della scheda grafica. Alcune funzioni MATLAB (ce ne sono una lista nella documentazione) possono funzionare su gpuarrays e il calcolo avviene sulla GPU.

Le differenze chiave tra le due tecniche sono che i calcoli parfor si verificano sulle CPU dei nodi del cluster con accesso diretto alla memoria principale. I core della CPU in genere hanno una frequenza di clock elevata, ma in genere in un cluster di CPU ce ne sono meno di quelli in cui sono presenti core GPU. Individualmente, i core GPU sono più lenti di un tipico core della CPU e il loro utilizzo richiede che i dati vengano trasferiti dalla memoria principale alla memoria video e viceversa, ma ce ne sono molti altri in un cluster. Per quanto ne so, gli approcci ibridi dovrebbero essere possibili, in cui si dispone di un cluster di PC e ogni PC ha una o più schede Nvidia Tesla e si utilizzano sia i loop parfor che i gpuarray. Tuttavia, non ho ancora avuto occasione di provarlo.

-2

Se lo si scrive in CUDA, è garantito che venga eseguito in parallelo a livello di chip, anziché andare con la migliore ipotesi di MATLAB per un'architettura non parallela e il miglior sforzo per eseguirlo in parallelo.

Un po 'come bere il diluvio di acqua di montagna fresca contro l'acquisto di acqua filtrata. Vai con la soluzione purista.

3

Se sei principalmente interessato alle simulazioni, l'elaborazione GPU è la scelta perfetta. Tuttavia, se si desidera analizzare (grandi) dati, utilizzare Parallization. Il motivo è che l'elaborazione della GPU è più veloce dell'elaborazione della CPU se non è necessario copiare i dati avanti e indietro. In caso di simulazione, è possibile generare la maggior parte dei dati sulla GPU e copiare solo il risultato. Se si tenta di lavorare con dati più grandi sulla GPU, molto spesso si verificheranno problemi di memoria. La parallizzazione è ottima se si dispone di grandi strutture dati e più di 2 core nella CPU del computer.

Problemi correlati