Inversão de Matriz Grande
Eu estou olhando para tomar o inverso de uma matriz grande, tamanho comum de 1000 x 1000, mas às vezes excede 100000 x 100000 (que atualmente está falhando devido ao tempo e memória). Eu sei que o sentimento normal é "não tome o inverso, encontre outro jeito de fazê-lo", mas isso não é possível no momento. A razão para isso é devido ao uso de software que já é feito que espera obter a matriz inversa. (Nota: estou procurando maneiras de mudar isso, mas isso levará muito tempo)
No momento, estamos usando um método de decomposição de LU a partir de recopies numéricas, e atualmente estou no processo de testar a biblioteca de eigen. A biblioteca eigen parece ser mais estável e um pouco mais rápida, mas ainda estou em fase de testes para precisão. Eu dei uma olhada rápida em outras bibliotecas, como ATLAS e LAPACK, mas ainda não fiz nenhum teste substancial com essas bibliotecas.
Parece que a biblioteca eigen não usa métodos concorrentes para calcular o inverso (embora para a parte de fatoração LU do inverso) e, tanto quanto eu posso dizer ATLAS e LAPACK são semelhantes nesta limitação. (Atualmente estou testando a diferença de velocidade para eigen com openMP e sem.)
A primeira pergunta é alguém pode explicar como seria possível otimizar a inversão de matrizes por paralelização. Eu encontrei um artigoAqui que fala sobre algoritmos paralelos de inversão de matriz, mas eu não entendi. Pareceisto artigo fala sobre outro método? Eu também não tenho certeza se scaLAPACK ou PETSc são úteis?
Segunda pergunta, eu liisto artigo de usar as GPUs para aumentar o desempenho, mas nunca codifiquei para GPUs e, portanto, não tenho ideia do que está tentando transmitir, mas os gráficos na parte inferior pareciam bastante alarmantes. Como isso é possível, e como posso começar a implementar algo assim para ser verdade.
Eu também acheiisto artigo, ainda teve tempo para lê-lo para entender, mas parece promissor, já que a memória é um problema atual com o nosso software.
Qualquer informação sobre esses artigos ou sobre os problemas em geral seria de grande ajuda. E mais uma vez peço desculpas se esta questão parece vaga, vou tentar expandir mais se necessário.