Solução de sistemas lineares de grande porte e computação de alto desempenho - Ariza Ariza, Cristian David (2024)
Este trabalho descreve um método de solução de sistemas lineares densos de grande porte, positivo definido e bloco-estruturado, com múltiplos lados direitos, que utiliza computação paralela de alto desempenho. A solução do sistema é obtida através da recursão de Levinson generalizada que utiliza a combinação linear de soluções menores, direta e reversa, associadas aos subsistemas de menor ordem. A nova implementação é descrita para computação paralela e baseada em um algoritmo de matriz particionada. O algoritmo foi separado em duas sub-rotinas, a primeira que calcula a solução reversa e a matriz da energia dos erros para as ordens menores, e a segunda que calcula a solução recursivamente. O algoritmo foi implementado para três tipos de sistemas: sistemas de memória compartilhada, memória distribuída e para sistemas com GPU. Em cada caso os sistemas de menor ordem foram calculados usando bibliotecas apropriadas. No primeiro, foi utilizada a biblioteca OpenBLAS ou MKL, no segundo SCALAPACK e finalmente para sistemas com GPU implementamos um algoritmo OUT-OF-CORE, no qual os sistemas de menor ordem foram calculados utilizando MAGMA. Nos três casos, a solução final é comparada com a solução completa do sistema utilizando LAPACK, SCALAPACK e MAGMA, respectivamente. Nos três casos, a primeira parte do algoritmo mostrou-se mais dispendiosa computacionalmente, comparada à decomposição de Cholesky. Porém a segunda parte que calcula a solução, mostrou-se mais eficiente que a solução sucessiva de dois sistemas triangulares, quando o lado direito do sistema possui um tamanho significativo, geralmente algumas vezes o valor de N. O erro no modelo estimado não apresenta variações significativas comparado com a solução de referência. Finalmente, apresentamos a utilização do algoritmo na modelagem de ondas sísmicas no domínio da frequência, que envolve a solução de grandes sistemas lineares esparsos. Estes resultados mostram uma desvantagem do algoritmo em sistemas esparsos não Toeplitz, já que aumenta o custo computacional e o consumo de memória.