Bibliotecas de Álgebra Lineal Dispersa Avances en la Generación de Bibliotecas de Álgebra Lineal Universidad Politécnica de Valencia Marzo, 2006 Índice Estructuras de datos “dispersas” Vectores Matrices BLAS disperso Introducción Estándar TF Funcionalidad TF Sistemas lineales dispersos Métodos directos Métodos iterativos Problemas de valores propios dispersos Bibliotecas de Álgebra lineal dispersa Estructuras de datos “dispersas”: Vectores Un vector disperso se almacena realmente como dos vectores Valores de elementos no nulos X INDX 10.0 -2.0 1.5 2.3 6.1 -6.4 4.3 8.0 1.9 9.7 0 4 5 6 11 12 23 25 47 53 Bibliotecas de Álgebra lineal dispersa Índices de elementos no nulos Estructuras de datos “dispersas”: Matrices No hay un formato de almacenamiento globalmente óptimo para representar matrices dispersas Las ventajas de un formato concreto dependen de varios factores: Algoritmo que actúa sobre la estructura de datos Patrón de dispersión de la matriz Arquitectura del computador Formato original de los datos Bibliotecas de Álgebra lineal dispersa Estructuras de datos “dispersas”: Matrices ...Aunque sí hay algunos formatos más utilizados Coordinado (por filas) 0 1 0 0.1 1 1.1 2 2.0 3 3.0 2 VAL 0.1 1.1 2.0 2.2 3.0 Valores INDX 0 1 2 2 3 Índices filas JNDX 1 1 0 2 0 Índices columnas 2.2 Bibliotecas de Álgebra lineal dispersa Estructuras de datos “dispersas”: Matrices 0 Harwell-Boeing (por columnas) o formato comprimido por columnas 1 0 0.1 1 1.1 2 2.0 3 3.0 2 VAL 2.0 3.0 0.1 1.1 2.2 Valores INDX 2 3 0 1 2 Índices filas JNDX 0 2 4 5 2.2 Bibliotecas de Álgebra lineal dispersa Índices inicio columnas Estructuras de datos “dispersas”: Matrices También hay formatos para matrices dispersas por bloques 0,0 0,3 1,2 2,0 2.0 0.1 1.1 0.0 0.1 0.2 1.1 1.0 1.1 1.2 2.0 2.1 2.2 3.0 3.1 3.2 2.2 3.0 Bibliotecas de Álgebra lineal dispersa BLAS disperso: Introducción La falta de un formato de representación de matrices universal y la dependencia que tienen los métodos de las características del problema han provocado que no exista una única biblioteca globalmente aceptada como estándar para problemas dispersos Implementaciones BLAS disperso NIST S-BLAS PSBLAS SparseLib++ Bibliotecas de Álgebra lineal dispersa BLAS disperso: Estándar TF La implementación del BLASTF disperso así como el formato de almacenamiento de la matriz queda en manos de la biblioteca El desarrollador de la biblioteca decide la estructura de datos óptima para su problema, arquitectura, datos,... Las matrices dispersas se manejan a través de descriptores (handles) BLAS disperso incluye núcleos de cálculo, aunque en menor número que el BLAS denso BLAS disperso también incluye núcleos para la gestión de matrices dispersas Bibliotecas de Álgebra lineal dispersa BLAS disperso: Funcionalidad TF Operaciones de nivel 1 (Vectores) void BLAS_xusdot void BLAS_xusaxpy void BLAS_xusga void BLAS_xusgz void BLAS_xussc Bibliotecas de Álgebra lineal dispersa BLAS disperso: Funcionalidad TF Gestión de matrices dispersas: #include “blas_sparse.h” ... blas_sparse_matrix A; % Descriptor (int) ... A = BLAS_duscr_begin( M, N ); for (i=0; i<nz; i++) BLAS_duscr_insert_entry( A, val[i], indx[i], jndx[i] ); BLAS_uscr_end(A); ... BLAS_usds(A); Existen diferentes métodos de introducir elementos en la matriz dispersa, así como de especificar propiedades de las matrices Bibliotecas de Álgebra lineal dispersa Sistemas lineales dispersos: Métodos directos Calculan una factorización de la matriz con “bajo llenado” de los factores PAQ = LU El principal problema de los métodos directos es la explosión en el número de elementos no nulos en los factores, aunque han mejorado Habitualmente un método directo está compuesto por una serie de etapas: 1) Reordenación para minimización del llenado 2) Elaboración del grafo de dependencias de tareas 3) Algoritmo de factorización numérica 4) Algoritmo de resolución de sistemas triangulares lineales La etapa 1) junto con la estrategia de pivotamiento determinan el llenado Bibliotecas de Álgebra lineal dispersa Sistemas lineales dispersos: Métodos directos Existen multitud de paquetes de métodos secuenciales y paralelos: GSPAR (de HSL) UMFPACK 2.2, 3.2 MA41, MA48 MUMPS PARDISO SuperLU WSMP etc. “Recent advances in direct methods for solving unsymmetric sparse systems of linear equations” A. Gupta ACM TOMS, Vol. 28(3):301-324, 2002 Bibliotecas de Álgebra lineal dispersa Sistemas lineales dispersos: Métodos iterativos Aplican un esquema iterativo que, bajo ciertas condiciones, converge a la solución x k 1 = f A , x k El principal problema de los métodos iterativos es la falta de convergencia global o la lentitud de la convergencia. Para solucionar este problema se suelen utilizar métodos de precondicionado Bibliotecas de Álgebra lineal dispersa Sistemas lineales dispersos: Métodos iterativos En los métodos iterativos, la matriz dispersa suele aparecer involucrada en operaciones del tipo matriz-vector: Bajo coste Preservan la estructura dispersa de la matriz Los paquetes de métodos iterativos a menudo utilizan “comunicación revertida” para dejar en manos del usuario el procedimiento para el cálculo del producto. Los métodos iterativos en sí NO acceden a la matriz, sólo a los resultados de las operaciones Bibliotecas de Álgebra lineal dispersa Sistemas lineales dispersos: Métodos iterativos Existen diferentes familias de métodos iterativos: Métodos básicos: Jacobi, Gauss-Seidel, SOR Métodos de proyección Métodos basados en subespacios de Krylov También existen diferentes bibliotecas que implementan estos métodos: BlockSolve95 CERFACS ITPACK LASPack SPARSKIT PETSc etc. Bibliotecas de Álgebra lineal dispersa Problemas de valores propios dispersos Los paquetes para la resolución de problemas de valores propios dispersos están basados en los métodos iterativos de Lanczos y Arnoldi En estos métodos, la matriz dispersa aparece en operaciones del tipo producto matriz-vector o resolución de sistemas lineales El modo de realizar estas operaciones queda en manos del usuario usando “comunicación revertida” Bibliotecas de Álgebra lineal dispersa Problemas de valores propios dispersos Ejemplo (ARPACK): while (TRUE){ ... snaupd( &ido, &bmat, &n,..., &info ); if (ido == newprod) matvec('A', n,...) /* Rutina del usuario, independiente * de ARPACK. */ else break } ... Bibliotecas de Álgebra lineal dispersa Problemas de valores propios dispersos Existen diferentes bibliotecas que implementan métodos iterativos para este tipo de problemas LZPACK LASO PARPACK SLEPc SPAM etc. Bibliotecas de Álgebra lineal dispersa