Sto osservando l'inverso di una matrice grande, dimensione comune di 1000 x 1000, ma a volte supera 100000 x 100000 (che attualmente non funziona a causa del tempo e della memoria). So che il sentimento normale è "non prendere l'inverso, trovare un altro modo per farlo", ma al momento non è possibile. La ragione di ciò è dovuta all'utilizzo del software già realizzato che si aspetta di ottenere la matrice inversa. (Nota: sto cercando dei modi per cambiare questo, ma ci vorrà molto tempo)Inversione matrice grande
Al momento stiamo usando un metodo di decomposizione LU da recopie numeriche, e attualmente sto testando la libreria di eigen . La libreria eigen sembra essere più stabile e un po 'più veloce, ma sono ancora in fase di test per la precisione. Ho dato una rapida occhiata ad altre librerie come ATLAS e LAPACK ma non ho ancora fatto test sostanziali con questi.
Sembra che la libreria eigen non utilizzi metodi concorrenti per calcolare l'inverso (sebbene per la parte di fattorizzazione LU dell'inverso) e per quanto posso dire ATLAS e LAPACK sono simili in questa limitazione. (Sto attualmente testando la differenza di velocità per eigen con openMP e senza.)
La prima domanda è: qualcuno può spiegare come sarebbe possibile ottimizzare l'inversione della matrice mediante la parallelizzazione. Ho trovato un articolo here che parla di algoritmi paralleli di inversione di matrice, ma non ho capito. Sembra che l'articolo this parli di un altro metodo? Non sono nemmeno sicuro se scaLapack o PETSc sono utili?
Seconda domanda, ho letto l'articolo this di utilizzare le GPU per aumentare le prestazioni, ma non ho mai codificato per GPU e quindi non ho idea di cosa stia cercando di trasmettere, ma i grafici in basso sembravano piuttosto allarmanti. Com'è possibile, e come posso iniziare a implementare qualcosa di simile se è vero?
Ho trovato anche l'articolo this, ho ancora avuto il tempo di leggerlo per capire, ma sembra promettente, poiché la memoria è un problema attuale con il nostro software.
Qualsiasi informazione su questi articoli o sui problemi in generale sarebbe di grande aiuto. E di nuovo mi scuso se questa domanda sembra vaga, cercherò di espandermi di più se necessario.
è la matrice sparsa o è denso? ci sono molti buoni e veloci modi per operare su matrici sparse, quindi spero che il tuo sia uno di questi. – vlsd
Si potrebbe voler controllare [FLAME] (http://z.cs.utexas.edu/wiki/flame.wiki/FrontPage). Dovrebbe produrre codice algebra lineare corretto e molto efficiente e matematicamente provato che funzioni su varie piattaforme parallele, incluse le GPU. –
Daremo un'occhiata a FLAME, non ne ho mai sentito parlare fino ad ora. Grazie. – Onekuo