Inversión de matriz grande
Estoy considerando tomar la inversa de una matriz grande, tamaño común de 1000 x 1000, pero a veces supera los 100000 x 100000 (que actualmente está fallando debido al tiempo y la memoria). Sé que el sentimiento normal es 'no tome el inverso, busque otra forma de hacerlo', pero eso no es posible en este momento. La razón de esto se debe al uso del software que ya está hecho y que espera obtener la matriz inversa. (Nota: estoy buscando formas de cambiar esto, pero eso llevará mucho tiempo)
En este momento estamos usando un método de descomposición de LU de las recopilaciones numéricas, y actualmente estoy en el proceso de probar la biblioteca eigen. La biblioteca eigen parece ser más estable y un poco más rápida, pero todavía estoy en fase de prueba para verificar la precisión. He echado un vistazo rápido a otras bibliotecas como ATLAS y LAPACK, pero todavía no he realizado ninguna prueba sustancial con estas.
Parece que la biblioteca eigen no usa métodos concurrentes para calcular la inversa (aunque sí lo hace para la factorización LU de la inversa) y, por lo que puedo decir, ATLAS y LAPACK son similares en esta limitación. (Actualmente estoy probando la diferencia de velocidad para eigen con openMP y sin).
La primera pregunta es si alguien puede explicar cómo sería posible optimizar la inversión de la matriz mediante la paralelización. Encontré un articuloaquí Eso habla de algoritmos paralelos de inversión de matrices, pero no entendí. Pareceesta ¿El artículo habla de otro método? Tampoco estoy seguro de si scaLAPACK o PETSc son útiles?
Segunda pregunta, leoesta Artículo sobre el uso de las GPU para aumentar el rendimiento, pero nunca he codificado para GPU y, por lo tanto, no tengo idea de lo que se intenta transmitir, pero los gráficos en la parte inferior parecen bastante alarmantes. ¿Cómo es esto posible? ¿Cómo puedo empezar a implementar algo como esto para que sea verdad?
Tambien encontreesta Este artículo aún no ha tenido tiempo de leerlo para comprenderlo, pero parece prometedor, ya que la memoria es un problema actual de nuestro software.
Cualquier información sobre estos artículos o los problemas en general sería de gran ayuda. Y nuevamente me disculpo si esta pregunta parece vaga, intentaré expandirme más si es necesario.