/ / Calcola autovalori / autovettori di centinaia di piccole matrici usando CUDA - matrice, cuda, opencl, algebra lineare, metodi numerici

Calcola autovalori / autovettori di centinaia di piccole matrici usando CUDA - matrice, cuda, opencl, algebra lineare, metodi numerici

Ho una domanda sulla decomposizione degli automi di centinaia di piccole matrici che usano CUDA.

Ho bisogno di calcolare gli autovalori eautovettori di centinaia (ad esempio 500) di piccole (64 per 64) matrici simmetriche reali contemporaneamente. Ho provato a implementarlo con il metodo Jacobi usando l'ordinazione del torneo di scacchi (vedi questo documento (PDF) per maggiori informazioni).

In questo algoritmo, sono definiti 32 thread in ciascunoblocco, mentre ogni blocco gestisce una piccola matrice e i 32 thread lavorano insieme per gonfiare 32 elementi fuori diagonale fino alla convergenza. Tuttavia, non sono molto soddisfatto delle sue prestazioni.

Mi chiedo dove c'è di meglioalgoritmo per la mia domanda, vale a dire la decomposizione degli automi di molte matrici simmetriche reali 64 per 64. Immagino che il metodo del capofamiglia possa essere una scelta migliore ma non sono sicuro che possa essere implementato in modo efficiente in CUDA. Non ci sono molte informazioni utili online, dal momento che la maggior parte degli altri programmatori sono più interessati ad usare CUDA / OpenCL per scomporre uno matrice grande anziché molte piccole matrici.

risposte:

3 per risposta № 1

Almeno per gli autovalori, è possibile trovare un campione nell'SDK di Cuda

http://www.nvidia.de/content/cudazone/cuda_sdk/Linear_Algebra.html

Le immagini sembrano rotte, ma il download dei campioni funziona ancora. Suggerirei di scaricare l'SDK completo e dare un'occhiata a questo esempio. Inoltre, questo documento potrebbe essere utile:

http://docs.nvidia.com/cuda/samples/6_Advanced/eigenvalues/doc/eigenvalues.pdf