Nova implementação do precondicionador AINV em acelerador NVIDIA utilizando a biblioteca CUSP

Documentos relacionados
Precondicionadores baseados na aproximação da inversa da matriz de coeficientes

Método de Precondicionamento CPR em Simulações de Reservatório de Petróleo

Implementação Paralela de Núcleos Computacionais do Solver Orthomin

Universidade Federal do Espírito Santo DI/PPGEM/PPGI 1 o Trabalho de Algoritmos Numéricos II - Computação Científica 17/1

Construção e aplicação de precondicionador ILUk por blocos com paralelismo em memória compartilhada.

Implementação paralela de um precondicionador algébrico de dois níveis de decomposição de domínios baseado em ILU(k)

Universidade Federal do Espírito Santo Departamento de Informática 1 o Trabalho de Algoritmos Numéricos I - 17/2 Sistemas Lineares

Um Método para o Cálculo da Inversa de Matrizes Simétricas e Positivas Definidas em Bloco

Universidade Federal do Espírito Santo DI/PPGEM/PPGI 2 o Trabalho de Algoritmos Numéricos II - Computação Científica 17/1

Universidade Federal do Espírito Santo Departamento de Informática 1 o Trabalho de Algoritmos Numéricos I - 14/2 Sistemas Lineares

Data de entrega: 30 de junho de 2015

Um algoritmo pseudo-periférico genérico para a heurística de Snay

Data de entrega: 19 de junho de 2016

na Diagonal da Fatoração Controlada de Cholesky aplicado ao Método de Pontos Interiores

LCAD. LNCC - Programa de Verão Minicurso M16 Estrutura de Dados e Solvers. Lucia Catabriga

Cálculo Numérico BCC760

Universidade Federal do Espírito Santo - UFES

Sparse Matrix-Vector Multiplication on GPU: When Is Rows Reordering Worthwhile?

MAP Segundo exercício programa Resolvendo sistemas esparsos por Gradientes Conjugados

CÁLCULO NUMÉRICO. Profa. Dra. Yara de Souza Tadano

SaddleOO um programa para o estudo de soluções de sistemas lineares em problemas de ponto de sela

étodos uméricos SISTEMAS DE EQUAÇÕES LINEARES (Continuação) Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

Técnicas de Processamento Paralelo na Geração do Fractal de Mandelbrot

Sistemas de Equações Lineares

ALGORITMOS ADAPTATIVOS PARA O MÉTODO GMRES(m)

Um Solucionador Iterativo Para Sistemas-Lineares: Aplicação no Problema do Fluxo de Carga

Métodos de Pontos Interiores com a Aplicação do Precondicionador de Elman

MODELAGEM COMPUTACIONAL DE EXPERIMENTOS NUMÉRICOS COM USO DA PORTABLE, EXTENSIBLE TOOLKIT FOR SCIENTIFIC COMPUTATION (PETSC)

Resolução de Sistemas Lineares. Ana Paula

Autovalores e Autovetores

Krylov no Método GMRES(m) e suas Variantes

Sistemas Lineares. Métodos Iterativos Estacionários

Fatoração LU André Luís M. Martinez UTFPR

Refletores de Householder e Fatoração QR

Algoritmos para o Método dos Mínimos Quadrados

ADEQUAÇÃO DO PRÉ-CONDICIONADOR ILUT PARA SOLUÇÃO DO SUBPROBLEMA LINEAR DO FLUXO DE CARGA VIA GMRES

étodos uméricos SISTEMAS DE EQUAÇÕES LINEARES (Continuação) Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

Análise de Desempenho da Paralelização do Problema de Caixeiro Viajante

7 Formas Quadráticas

ESTATÍSTICA COMPUTACIONAL

Resolução de sistemas de equações lineares: Método dos Gradientes Conjugados

Laboratório de Simulação Matemática. Parte 7 2

4.1 Resolvendo o Sistema Linear

7 Formas Quadráticas

Silvia Maria Pereira Grandi dos Santos

Introdução ao CUDA. Material elaborado por Davi Conte.

DESENVOLVIMENTO DE UM ALGORITMO PARALELO PARA APLICAÇÃO EM CLUSTER DE COMPUTADORES

Uma nova taxa de convergência para o Método do Gradiente

étodos uméricos SISTEMAS DE EQUAÇÕES LINEARES (Continuação) Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

ALGORITMOS DE REORDENAMENTO DE MATRIZES ESPARSAS APLICADOS A PRECONDICIONADORES ILU(p)

DD3IMP (FINITE ELEMENT SOLVER) THE CHALLENGE OF COMPUTATIONAL PERFORMANCE IMPROVEMENT THROUGH HPC

UNIVERSIDADE DE BRASÍLIA FACULDADE DE TECNOLOGIA DEPARTAMENTO DE ENGENHARIA ELÉTRICA

Resolução de problemas com apenas restrições lineares de igualdade

Nem todos os problemas algorítmicos que podem ser resolvidos em princípio podem ser resolvidos na prática: os recursos computacionais requeridos

Paralelização do Método de Jacobi em Memória Compartilhada 1

étodos uméricos SISTEMAS DE EQUAÇÕES LINEARES (Continuação) Prof. Erivelton Geraldo Nepomuceno PROGRAMA DE PÓS-GRADUAÇÃO EM ENGENHARIA ELÉTRICA

Um Esquema GMRES Precondicionado para

decomposição de Cholesky.

Implementação do Best Linear Unbiased Prediction (BLUP) em Python para avaliação genética animal

Antonio Elias Fabris. Map 2210 Aplicações de Álgebra Linear

Aplicação de Processamento Paralelo com GPU a Problemas de Escoamento Monofásico em Meios Porosos. Bruno Pereira dos Santos Dany Sanchez Dominguez

Sistemas de equações lineares

MÉTODO DE FATORAÇÃO LU PARA SOLUÇÃO DE SISTEMAS LINEARES

Utilização de Algoritmos Genéticos para Otimização de Altura de Coluna da Matriz de Rigidez em Perfil no Método dos Elementos Finitos

Map05 - Métodos Matriciais Computacionais Mat Álgebra Matricial Computacional Primeiro Exercicio Computacional, entregar ao Prof: 22/10/2012

CRIVO QUADRÁTICO: IMPLEMENTAÇÃO DA OBTENÇÃO DE UM CONJUNTO DE NÚMEROS COMPLETAMENTE FATORADOS SOBRE UMA BASE DE FATORES

1 Complexidade de Algoritmos em Álgebra Linear

Uma nova abordagem baseada em wavelets para o método Multigrid Algébrico: Parte II - Algoritmo Paralelo

Introdução aos Métodos Numéricos

Algoritmo Array Rápido para Filtragem de Sistemas Lineares Sujeitos a Saltos Markovianos com Variação Estruturada dos Parâmetros no Tempo

Paradigmas de Processamento Paralelo na Resolução do Fractal de Mandelbrot

A solução completa da equação de Poisson depende dos valores do potencial na fronteira do domínio em estudo. Os dois tipos mais comuns de

Modelagem Computacional. Parte 6 2

Resolução de Sistemas Lineares. Método de Gauss. O algoritimo conhecido como Método de Gauss é desenvolvido a partir de dois ingredientes básicos:

Computação Paralela: Algoritmos e Aplicações

USO DE PARALELISMO DE DADOS PARA MAIOR EFICIÊNCIA DE ALGORITMOS DE PROCESSAMENTO DE IMAGENS

Aluno de Pós-Graduação em Engenharia de Software para Dispositivos Móveis pela UNINTER

Métodos de Aproximação em Engenharia

INTRODUÇÃO AOS MÉTODOS NUMÉRICOS. Solução de Sistemas Lineares

Data de entrega: 20 de junho de 2014

PROGRAMAÇÃO PARALELA DE UM MÉTODO ITERATIVO PARA SOLUÇÃO DE GRANDES SISTEMAS DE EQUAÇÕES LINEARES USANDO A INTEGRAÇÃO CUDA-MATLAB

UNIVERSIDADE FEDERAL DO ABC

Introdução aos Métodos Numéricos

Introdução aos Métodos Numéricos

Estabilidade e Estabilização de Sistemas Lineares via

Impacto da Organização dos Dados em Operações com Matrizes Esparsas na GPU

Matemática Computacional - Exercícios

Laboratório de Simulação Matemática. Parte 6 2

Melhoria do desempenho da Fatoração Controlada de Cholesky no precondicionamento de Sistemas Lineares oriundos dos Métodos de Pontos Interiores

Afiliação. Professor Titular do Departamento de Estatística Faculdade de Matemática da PUCRS

Introdução aos Métodos Numéricos

Resolução de sistemas de equações lineares: Fatorações de matrizes

COMPARAÇÃO ENTRE ABORDAGENS DIRETAS E ITERATIVAS NA SOLUÇÃO DOS SISTEMAS LINEARES EM MÉTODOS DE PONTOS INTERIORES

SOLUÇÃO DE SISTEMAS LINEARES ESPARSOS UTILIZANDO CUDA UMA COMPARAÇÃO DE DESEMPENHO EM SISTEMAS WINDOWS E LINUX

JinSol, uma interface em Java para solvers lineares.

Método de Newton truncado

Métodos Iterativos para a Solução da Equação de Poisson

Medida do Tempo de Execução de um Programa. Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP

ANÁLISE DE DESEMPENHO COM A PARALELIZAÇÃO DO CÁLCULO DE NÚMEROS PERFEITOS 1

Transcrição:

Trabalho apresentado no CNMAC, Gramado - RS, 2016. Proceeding Series of the Brazilian Society of Computational and Applied Mathematics Nova implementação do precondicionador AINV em acelerador NVIDIA utilizando a biblioteca CUSP Michael Souza 1 Departamento de Estatística e Matemática Aplicada, UFC, Fortaleza, CE Luiz Mariano Paes de Carvalho 2 Instituto de Matemática e Estatística, UERJ, Rio de Janeiro, RJ João P. Zanardi 3 Faculdade de Engenharia, UERJ, Rio de Janeiro, RJ Douglas A. Augusto 4 Fundação Oswaldo Cruz, Rio de Janeiro, RJ Paulo Goldfeld 5 Instituto de Matemática, UFRJ, Rio de Janeiro, RJ Resumo. Comparamos o desempenho em placa gráfica (GPU) do precondicionador AINV baseado na aproximação da inversa. Os resultados de nossos experimentos numéricos e computacionais indicam que nossa implementação é competitiva e possui resultados melhores do que a versão disponível na biblioteca CUSP largamente utilizada em aplicações com aceleradores NVIDIA. Além disso, apresentamos as ideias principais na definição do precondicionador e detalhes sobre a implementação. Palavras-chave. Inversa Aproximada, Sistemas lineares, Precondicionadores, Paralelismo, Aceleradores 1 Introdução Computadores paralelos são uma realidade onipresente. Neste contexto, o desenvolvimento de solvers paralelos eficientes para a resolução de sistemas lineares Ax = b esparsos de grande porte passa a ser um dos problemas mais importantes da computação científica. Esta importância decorre da frequente utilização direta de modelos lineares ou ainda de métodos baseados em linearizações de modelos mais complexos. Os métodos iterativos modernos para resolução de sistemas lineares esparsos de grande porte como, por exemplo, os métodos de subespaço de Krylov, substituem operações do tipo matriz-matriz por operações vetor-vetor ou ainda matriz-vetor, mas sua eficiência depende fortemente de técnicas de precondicionamento. Sendo assim, para alcançar escalabilidade, tanto os métodos de Krylov quando os precondicionadores precisam ser paralelos. 1 michael@ufc.br 2 luizmc@ime.uerj.br 3 jpzanardi@gmail.com 4 daa@fiocruz.br 5 goldfeld@ufrj.br DOI: 10.5540/03.2017.005.01.0093 010093-1 2017 SBMAC

2 Contudo, muitos dos precondicionadores de uso geral, como os baseados em fatorações incompletas do operador A, são altamente sequenciais e implementações eficientes em computadores paralelos têm sido um grande desafio [6]. Por isso, nas últimas décadas, os métodos que aproximam diretamente a inversa de A, sendo portanto bons candidados a precondicionadores, têm atraído bastante atenção [8, 10]. A mais importante vantagem destes métodos é que sua aplicação consiste simplesmente no produto matriz-vetor. Isto os torna extremamente convenientes para aplicação em ambientes computacionais paralelos. O presente trabalho é a continuação do artigo [9], onde apresentamos as comparações com respeito ao número de iterações dos solvers lineares utilizando diferentes precondicionadores baseados em aproximações da inversa. As comparações anteriormente realizadas foram feitas sem explorar o paralelismo não levando em consideração o desempenho computacional (tempo). Neste artigo, focamos no desempenho paralelo da aplicação do precondicionador AINV proposto por Benzi [6], o mais promissor dentre os analisados no trabalho anterior. A seção 2 deste artigo será dedicada a uma rápida apresentação do precondicionador AINV. Na seção 3, faremos a descrição da implementação que ora propomos. As comparações e resultados experimentais serão apresentados na seção 4. Finalmente, na seção 5, concluímos com um resumo do presente trabalho. 2 O precondicionador AINV O precondicionador ideal para o sistema Ax = b seria a matriz M = A 1, pois permitiria resolver o sistema linear em uma única iteração. Infelizmente, esta alternativa é inviável pelo tempo necessário para calcular a inversa e, mais ainda, pelo consumo de memória. De fato, a elevada esparsidade dos operadores de muitos problemas reais faz que com que sistemas cada vez maiores sejam considerados. Atualmente, não é difícil encontrar sistemas com dezenas de milhões de colunas. Neste contexto, o armazenamento de inversas potencialmente densas é proibitivo. Para contornar estas dificuldades, os precondicionadores baseados em aproximações da inversa operam determinando fatores Z e W tais que Z U 1 e W t L 1, onde A = LDU é decomposição triangular de A. O precondicionador AINV proposto por Benzi e Tuma aproxima os inversos dos fatores da decomposição A = LDU utilizando um esquema de biconjugação [3, 4, 6]. Mais especificamente, dada uma matriz não-singular A R n n, o precondicionador AINV gera dois conjuntos de vetores {z i } n i=1 e {w i} n i=1 A-biconjugados, ou seja, para W = [w 1,..., w n ] e Z = [z 1,..., z n ] temos W t AZ = D, ou ainda, W t = L 1 e Z = U 1. Os fatores Z e W podem ser densos, então para evitar que isto ocorra os elementos z ij e w ij em magnitude menores que um valor especificado são eliminados. 3 Comentários sobre a implementação O precondicionador AINV pode ser implementado como um processo de ortogonalização de Gram-Schmidt generalizado com respeito a forma bilinear associada ao operador A [5, 6]. A forma geral da nossa implementação do precondicionador AINV pode ser vista DOI: 10.5540/03.2017.005.01.0093 010093-2 2017 SBMAC

3 no Algoritmo 1 (apresentado em notação do Matlab apenas por simplicidade). Como pode ser visto, as construções dos fatores W e Z são independentes podendo ser feitas paralelamente. Algoritmo 1: AINV 1 function [Z,D,W] = ainv (A,droptol, nmax ) 2 [Z,p] = ainv_core (A,droptol, nmax ); 3 W = ainv_core (A, droptol, nmax ); 4 W = W ; 5 D = sparse (1:n,1:n,1./ p); 6 end 7 8 function [Z,p] = ainv_core (A,droptol, nmax ) 9 n = length (A); 10 Z = speye (n); 11 s = sset (Z); 12 for i = 1: n 13 p(i) = A(:,i) * Z(:,i); 14 15 % eliminates the possibility of division by zero 16 if(abs (p(i)) <1E -8) p(i) =1; end 17 18 if( i == n) break ; end 19 20 cols = s. get_cols (i, A(:,i)); 21 22 % update Z and W 23 for k = 1: length ( cols ) 24 j = cols (k); 25 p(j) = A(:,i) * Z(:,j); 26 Z(:,j) = Z(:,j) - (p(j)/p(i))*z(:,i); 27 Z(:,j) = drop (Z(:,j),nmax, droptol,j); 28 s. update_col (j, Z(:,j)); 29 end 30 end 31 end O custo de construção do precondicionador AINV é fortemente dependente do número de iterações do laço mais interno (linha 23), onde a ortogonalização é efetivamente realizada. Para otimizar a performance é necessário fazer o menor número possível de iterações. Pela estratégia de eliminação (drop) dos valores com magnitude menor que um dado valor, garantimos a esparsidade das colunas dos fatores e, portanto, a ortogonalidade simbólica entre muitas colunas. Exploramos esta característica das colunas, reduzindo o laço mais interno a apenas as colunas que não sejam simbolicamente ortogonais, ou seja, consideramos apenas as colunas que precisam ser atualizadas. Mais precisamente, na i-ésima iteração do laço externo (linha 12), consideramos apenas as colunas de Z cujo produto interno A(:, i) Z(:, j) não é nulo. Estas colunas são as mesmas que possuem ao menos um elemento não nulo na mesma posição (linha) que A(:, i). Nossa implementação utiliza a classe especializada sset para gerenciar as informações sobre a estrutura de esparsidade do fator Z (ver Algoritmo 2). Com estas estratégias, obtemos uma implementação com DOI: 10.5540/03.2017.005.01.0093 010093-3 2017 SBMAC

4 complexidade O(nm 2 ), onde n é o número de colunas de A e m é o número médio de elementos não-nulos em cada uma das colunas de A. 1 classdef sset < handle 2 properties 3 s = {}; % empty cell 4 end 5 6 methods 7 function this = sset ( n) 8 this.s = cell (n,1) ; 9 for i = 1: n 10 this.s{i} = i; 11 end 12 end 13 Algoritmo 2: SSET 14 function this = update_ col ( this, j, Zj) 15 irow = find (Zj); 16 this.s{ irow (k)} = [ this.s{ irow (k)},j]; 17 end 18 19 function cols = get_cols (this,i,ai) 20 cols = []; 21 rows = find ( Ai); % index of nnz elements of A(:, i) 22 for j = 1: length ( rows ) 23 irow = rows (j); 24 % remove duplicated indices and keep the 25 % indices greater than i 26 this.s = unique ( this.s{j}( this.ss{i} > i)); 27 cols = [cols, this.ss{i }]; % concatenate 28 end 29 cols = unique ( cols (cols >i)); 30 end 31 end 32 end 4 Experimentos computacionais Nossos experimentos foram feitos utilizando os métodos de Krylov GMRES e BICGSTAB com implementações em GPU (Graphics Processing Unit). Utilizamos a versão 0.4.0 da biblioteca CUSP, que fornece uma interface flexível e de alto nível para manipulação de matrizes esparsas e resolução de sistemas lineares [2]. Além da interface de manipulação de matrizes esparsas, a biblioteca CUSP também disponibiliza os precondicionadores (a) DIAGONAL formado pela matriz diagonal cujos elementos são os inversos dos elementos diagonais de A; (b) a clássica decomposição incompleta ILU(0); (c) uma variante de inversa aproximada chamada BRIDSON baseada em uma formulação de produto tensorial (outer product) [7]; (d) e, por completude, também aplicamos os solvers diretamente sem precondicionamento (NONE). DOI: 10.5540/03.2017.005.01.0093 010093-4 2017 SBMAC

5 A utilização de qualquer precondicionador pode ser separada em duas etapas: (i) a fase de construção do precondicionador e (ii) a fase de aplicação durante as iterações dos solvers lineares. A fase de construção de nossa implementação é feita sequencialmente em CPU, ou seja, não paralelizamos a fase de construção. Nossa opção justifica-se pelo caráter fortemente sequencial da construção do precondicionador AINV que basicamente realiza uma biconjugação. A implementação foi feita em linguagem C++. Fixamos a tolerância relativa dos resíduos dos métodos de Krylov em 10 4 e realizamos no máximo 500 iterações. Além disso, reinicializamos o método GMRES a cada 30 iterações. Com estas configurações, consideramos um método como bem sucedido em uma dada instância se uma solução com resíduo relativo ɛ = Ax b 2 / b 2 < 10 4 pôde ser encontrada em, no máximo, 500 iterações. Utilizamos em nossos experimentos uma CPU Intel Core i7-3820 de 3.66GHz com 16GB de RAM, e uma GPU Tesla K20c com 2096 cores e 5GB de memória GDDR5. O sistema operacional utilizado foi o Linux em distribuição Ubuntu 15.04 e compiladores GCC 4.8.2 e NVCC 7.0. A Tabela 1 apresenta as 18 matrizes utilizadas em nossos experimentos. O número n de colunas das matrizes consideradas vai de aproximadamente 500 a 17750, já o número nnz de elementos não-nulos varia de aproximadamente 3500 a 126k. Esse é o mesmo conjunto de matrizes não-simétricas apresentadas em [5]. As matrizes foram armazenadas no formato CSR (Compressed Storage Row) que é geral, não assume qualquer hipótese estrutural e é bastante eficiente em termos de memória já que armazena apenas os valores não-nulos. Por outro lado, não é o mais eficiente em termos de acesso já que faz uso de endereçamento indireto [1]. Tabela 1: Número de colunas e elementos não-nulos das matrizes consideradas. # matriz n nnz # matriz n nnz 01 orsreg 1 2205 14133 10 sherman1 1000 3750 02 orsirr 1 1030 6858 11 sherman2 1080 23094 03 orsirr 2 886 5970 12 sherman3 5005 20033 04 saylr3 1000 3750 13 sherman4 1104 3786 05 saylr4 3564 22316 14 sherman5 3312 20793 06 add32 4960 23884 15 pores 2 1224 9613 07 add20 2395 17319 16 pores 3 532 3474 08 memplus 17758 126150 17 watt 1 1856 11360 09 swang1 3169 20841 18 watt 2 1856 11550 Na Tabela 2, podemos ver o percentual de instâncias resolvidas por cada par de precondicionador e método de Krylov. O precondicionador AINV apresentou os melhores resultados, deixando de resolver apenas uma das dezoito instâncias. A Tabela 2 também ilustra a importância do precondionamento, pois quase a metade das instâncias não puderam ser resolvidas sem ele. DOI: 10.5540/03.2017.005.01.0093 010093-5 2017 SBMAC

6 Na Figura 1 podemos ver a performance normalizada, ou seja, o tempo de construção mais o tempo de aplicação de cada um dos métodos e precondicionadores divididos pelo maior deles, considerando-se apenas os testes bem sucedidos. Como pode ser visto, nossa implementação do precondicionador AINV obteve os melhores resultados com o método GMRES. Já com o método BICGSTAB, parece haver uma leve vantagem do com o precondicionador DIAGONAL, mas mesmo neste caso o precondicionador AINV apresentou bom desempenho e estabilidade, sendo o melhor ou um dos dois melhores em praticamente todas as instâncias. BICGSTAB GMRES Perfomance normalizada 1 0.8 0.6 0.4 0.2 1 0.8 0.6 0.4 0.2 0 0 5 10 15 MATRIZ 0 0 5 10 15 NONE MATRIZ AINV BRIDSON DIAGONAL Figura 1: Performance normalizada de cada precondicionador e método de Krylov. A partir dos resultados apresentados, podemos concluir que nossa implementação do precondicionador AINV é competitiva e seu desempenho pode ser comparado ao dos precondicionadores disponibilizados pela biblioteca CUSP. Tabela 2: Percentual de instâncias resolvidas por cada precondicionador. PRECOND GMRES BICGSTAB NONE 67% 56% DIAGONAL 78% 89% BRIDSON 89% 89% AINV 94% 94% DOI: 10.5540/03.2017.005.01.0093 010093-6 2017 SBMAC

7 5 Conclusões Apresentamos no presente trabalho um estudo comparativo da performance em GPU de uma nova implementação do precondicionador AINV baseado na aproximação da inversa da matriz do sistema linear. Comparamos nossa implementação com os precondicionadores disponibilizados pela biblioteca CUSP, desenvolvida especificamente para GPU s da NVI- DIA. Finalmente, nossos resultados indicam que nossa implementação do precondicionador AINV é competitiva e seu desempenho pode ser comparado ao dos precondicionadores da biblioteca CUSP. Referências [1] N. Bell and M. Garland. Efficient sparse matrix-vector multiplication on cuda. Technical report, Nvidia Technical Report NVR-2008-004, Nvidia Corporation, 2008. [2] N. Bell and M. Garland. Cusp: Generic parallel algorithms for sparse matrix and graph computations, 2012. Version 0.3.0. [3] M. Benzi. A direct row-projection method for sparse linear systems. PhD thesis, North Carolina State University, 1993. [4] M. Benzi, C. D. Meyer, and M. Tůma. A sparse approximate inverse preconditioner for the conjugate gradient method. SIAM Journal on Scientific Computing, 17(5):1135 1149, 1996. [5] M. Benzi and M. Tůma. A sparse approximate inverse preconditioner for nonsymmetric linear systems. SIAM Journal on Scientific Computing, 19(3):968 994, 1998. [6] M. Benzi and M. Tůma. A comparative study of sparse approximate inverse preconditioners. Applied Numerical Mathematics, 30(2):305 340, 1999. [7] R. Bridson and W.-P. Tang. Ordering, anisotropy, and factored sparse approximate inverses. SIAM Journal on Scientific Computing, 21(3):867 882, 1999. [8] R. Bru, J. Marín, J. Mas, and M. Tůma. Improved balanced incomplete factorization. SIAM Journal on Matrix Analysis and Applications, 31(5):2431 2452, 2010. [9] L. M. P. Carvalho, J. P. Zanardi, Ítalo Nievinski, and M. Souza. An overview of approximate inverse methods. In Proceeding Series of the Brazilian Society of Computational and Applied Mathematics, volume 3, pages 010097 1 010097 7, 2015. [10] L. Y. Kolotilina and Y. A. Yu. Factorized sparse approximate inverse preconditioning. i:theory. SIAM Journal on Matrix Analysis and Applications, 14:45 58, 1993. DOI: 10.5540/03.2017.005.01.0093 010093-7 2017 SBMAC