Fastest large SVD computation in multithreaded machine?
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I have a waveform optimization problem that uses a large SVD in an interative loop. For instance, with my current settings, the matrix is 18800x18937, or roughly 356M elements (complex, either double or single, been experimenting). I have a machine with enough RAM (128 GB) to hold the entire thing; for other portions of the code I get some help using parpool('threads') and a parfor. Given the matrix sizes, I don't see a process pool as an option for other portions of the code.
Watching the utilization, it appears it uses about 6-10 threads for the native SVD, so it's partly parallel; I don't know if this is a Linux processor counting problem because the parpool only generated 10 workers despite it having 20 CPU cores. SPMD and distributed arrays seem to be only for process pools; with threads I don't need to distribute the array in memory.
Any tips on what to try, or is it going as fast as possible already? RdTildeRoot is 18800x18800 and computed once, Z is updated each iteration. From profiling, the SVD on this one line is 90% of the execution time.
[Ubar, ~, Utilde] = svd(RdTildeRoot * Z, 'econ');
4 commentaires
Réponses (1)
Benjamin Thompson
le 25 Jan 2022
If you have the parallel computing toolbox and a good NVIDIA GPU, try using gpu Arrays. Try svds if you don't need all the singular values.
0 commentaires
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!