Sto tentando di ottimizzare un'applicazione nella modellazione 3D in tempo reale. La parte di calcolo dell'applicazione viene eseguita quasi interamente sulla GPU in CUDA. L'applicazione richiede la soluzione di un piccolo (6x6) sistema lineare definito positivo simmetrico a doppia precisione Ax = b 500+ volte al secondo. Attualmente questo viene fatto con un'efficiente libreria di algebra lineare basata su CPU che utilizza Cholesky ma richiede la copia di dati dalla CPU - GPU e di nuovo in GPU centinaia di volte al secondo e il sovraccarico di kernel avvia ogni volta ecc.Risolvi il piccolo simmetrico positivo definito Ax = b solo sulla GPU
Come posso calcolare la soluzione al sistema lineare sulla GPU solo senza dover prendere i dati sulla CPU? Ho letto un po 'della libreria MAGMA ma sembra che utilizzi algoritmi ibridi anziché algoritmi solo per GPU.
Sono preparato per il fatto che la soluzione di un singolo sistema lineare sulla GPU sarà molto più lenta rispetto alla libreria basata su CPU esistente, ma voglio vedere se questo può essere compensato rimuovendo la comunicazione dati tra l'host e il dispositivo e il sovraccarico di kernel avvia ecc. centinaia di volte al secondo. Se non ci sono GPU alternative LAPACK-like, come posso implementare qualcosa per risolvere questo particolare caso 6x6 solo sulla GPU? Potrebbe essere fatto senza un enorme investimento di tempo con le librerie GPU BLAS, ad esempio?
Un sistema lineare 6x6 è così piccolo, che è possibile scrivere le equazioni da soli all'interno del codice CUDA ... Ovviamente per un sistema così piccolo sarebbe molto difficile ottenere alcun beneficio dalla natura parallela di CUDA, ma sbarazzarsi di la comunicazione con la GPU-CPU avrebbe davvero un enorme vantaggio. Sarebbe possibile, parallelizzare in un modo diverso? Risolvi il sistema su un singolo core GPU e quindi utilizza più core fino a 500+ soluzioni/s. Sarebbe il migliore, a meno che non hai bisogno di risultati dal sistema precedente per iniziare a lavorare su quello successivo. – Eiver
@Eiver è in the money. puoi fare quelle 500 in parallelo o dipendono l'una dall'altra? per 6x6 questo approccio http://en.wikipedia.org/wiki/Cholesky_decomposition#Block_variant sembra codificabile a mano ... –