LAPACK

LAPACK
Información general
Tipo de programa software libre
Licencia BSD
Información técnica
Programado en Fortran
Versiones
Última versión estable 3.9.0 ( 2019 de noviembre del 21)
Enlaces

LAPACK, acrónimo de Linear Algebra Package (en español, Paquete de Álgebra Lineal) es una biblioteca software estándar para álgebra lineal numérica. Proporciona rutinas para resolver sistemas de ecuaciones lineales y mínimos cuadrados lineales, problemas de valores propios y descomposición de valores singulares. También incluye rutinas para implementar las factorizaciones matriciales asociadas como la descomposición LU, QR, Cholesky y Schur. LAPACK se escribió originalmente en FORTRAN 77, pero se trasladó a Fortran 90 en la versión 3.2 (2008).[1]​ Las rutinas manejan matrices tanto reales como complejas con precisión simple y doble.

LAPACK fue diseñada como la sucesora de las ecuaciones lineales y las rutinas lineales de mínimos cuadrados de LINPACK y las rutinas de valores propios de EISPACK. LINPACK, escrita en las décadas de 1970 y 1980, fue diseñada para ejecutarse en las entonces modernas computadoras vectoriales con memoria compartida. LAPACK, por el contrario, fue diseñada para explotar eficazmente las memorias caché en arquitecturas modernas basadas en caché y, por tanto, poder ejecutar órdenes de magnitud más rápido que LINPACK en tales máquinas, para una implementación BLAS bien ajustada. LAPACK también se ha ampliado para ejecutarse en sistemas de memoria distribuida en paquetes posteriores como ScaLAPACK y PLAPACK.[2]

LAPACK tiene una licencia BSD de tres cláusulas, una licencia de software libre permisiva con pocas restricciones.

Nomenclatura[editar]

Las subrutinas en LAPACK tienen una convención de nomenclatura que hace que los identificadores sean muy compactos. Esto era necesario ya que los primeros estándares de Fortran solo admitían identificadores de hasta seis caracteres, por lo que los nombres debían acortarse para que encajaran en este límite.

Un nombre de subrutina LAPACK tiene el formato pmmaaa, donde:

  • p es un código de una letra que indica el tipo de constantes numéricas utilizadas. S, D representan aritmética de coma flotante real respectivamente en precisión simple y doble, mientras que C y Z representan aritmética compleja con precisión simple y doble respectivamente. La versión más reciente, LAPACK95, utiliza subrutinas genéricas para evitar especificar explícitamente el tipo de datos.
  • mm es un código de dos letras que indica el tipo de matriz que espera el algoritmo. Los códigos para los diferentes tipos de matrices se indican a continuación; los datos reales se almacenan en un formato diferente según el tipo específico; por ejemplo, cuando se da el código DI, la subrutina espera un vector de longitud n contiene los elementos en la diagonal, mientras que cuando se da el código GE, la subrutina espera una matriz n×n contenga las entradas de la matriz.
  • aaa es un código de una a tres letras que describe el algoritmo real implementado en la subrutina, por ejemplo, SV denota una subrutina para resolver un sistema lineal, mientras que R denota una actualización de rango 1.

Como ejemplo, la subrutina para resolver un sistema lineal con una matriz general (no estructurada) usando aritmética real de doble precisión se llama DGESV.

Tipos de matriz en la nomenclatura de LAPACK
Nombre Descripción
BD matriz bidiagonal
DI matriz diagonal
GB matriz de banda general
GE matriz general (es decir, asimétrica, en algunos casos rectangular)
GG matrices generales, problema generalizado (es decir, un par de matrices generales)
GT matriz tridiagonal general
HB (complejo) Matriz de bandas hermitianas
HE (complejo) matriz hermitiana
HG matriz de Hessenberg superior, problema generalizado (es decir, una matriz de Hessenberg y una triangular)
HP (complejo) Hermitian, matriz de almacenamiento empaquetada
HS matriz de Hessenberg superior
OP matriz ortogonal (real), matriz de almacenamiento empaquetada
OR matriz ortogonal (real)
PB matriz simétrica o matriz hermitiana banda definida positiva
PO matriz simétrica o matriz hermitiana positiva definida
PP matriz simétrica o matriz de Hermitian matriz de almacenamiento empaquetada, definida positiva
PT matriz simétrica o matriz hermitiana matriz tridiagonal definida positiva
SB matriz de banda simétrica (real)
SP matriz de almacenamiento empaquetada simétrica
ST (real) matriz simétrica matriz tridiagonal
SY matriz simétrica
TB matriz de bandas triangulares
TG matrices triangulares, problema generalizado (es decir, un par de matrices triangulares)
TP matriz de almacenamiento empaquetada triangular
TR matriz triangular (o en algunos casos cuasi-triangular)
TZ matriz trapezoidal
UN (compleja) matriz unitaria
UP (compleja) matriz de almacenamiento empaquetada unitaria

Los detalles sobre este esquema se pueden encontrar en la sección Esquema de nombres en la Guía del usuario de LAPACK.

Uso con otros lenguajes de programación[editar]

Hoy en día, muchos entornos de programación admiten el uso de bibliotecas con enlace en el lenguaje C. Las rutinas LAPACK se pueden usar como funciones en C si se atiende a algunas restricciones.

También se encuentran disponibles varios bindings alternativos:

Implementaciones[editar]

Al igual que BLAS, LAPACK se bifurca o se reescribe con frecuencia para proporcionar un mejor rendimiento en sistemas específicos. Algunas de sus implementaciones son:

Accelerate
El framework de Apple para macOS e iOS, que incluye versiones optimizadas de BLAS y LAPACK.[3][4]
Netlib LAPACK
La versión oficial de LAPACK.
Netlib ScaLAPACK
LAPACK escalable (multinúcleo), construido sobre PBLAS.
Intel MKL
Rutinas matemáticas de Intel para sus CPU x86.
OpenBLAS
Reimplementación de código abierto de BLAS y LAPACK.
Gonum LAPACK
Implementación parcial en Go nativo.

Dado que LAPACK usa BLAS para el trabajo pesado, el simple hecho de vincularlo a una implementación BLAS mejor ajustada generalmente mejora el rendimiento lo suficiente. Es por esto por lo que LAPACK no se reimplementa con tanta frecuencia como BLAS.

Proyectos similares[editar]

Estos proyectos proporcionan una funcionalidad similar a LAPACK, pero la interfaz principal difiere de la de LAPACK:

Libflame
Una biblioteca densa de álgebra lineal. Tiene una envoltura compatible con LAPACK. Se puede utilizar con cualquier BLAS, aunque BLIS es la implementación preferida.[5]
Eigen
Una biblioteca de encabezados para álgebra lineal. Tiene una implementación BLAS y una LAPACK parcial para compatibilidad.
MAGMA
El proyecto Matrix Algebra on GPU and Multicore Architectures (MAGMA) desarrolla una biblioteca de álgebra lineal densa similar a LAPACK pero para arquitecturas heterogéneas e híbridas que incluyen sistemas multinúcleo acelerados con GPGPU.
PLASMA
El proyecto Álgebra lineal paralela para arquitecturas multinúcleo escalables (PLASMA) es un reemplazo moderno de LAPACK para arquitecturas multinúcleo. PLASMA es un marco de software para el desarrollo de operaciones asincrónicas y funciones de programación fuera de orden con un programador de tiempo de ejecución llamado QUARK que puede usarse para cualquier código que exprese sus dependencias con un gráfico acíclico dirigido.[6]

Referencias[editar]

  1. «LAPACK 3.2 Release Notes». 16 de noviembre de 2008. 
  2. «PLAPACK: Parallel Linear Algebra Package». www.cs.utexas.edu. University of Texas at Austin. 12 de junio de 2007. Consultado el 20 de abril de 2017. 
  3. «Guides and Sample Code». developer.apple.com. Consultado el 7 de julio de 2017. 
  4. «Guides and Sample Code». developer.apple.com. Consultado el 7 de julio de 2017. 
  5. «amd/libflame: High-performance object-based library for DLA computations». GitHub. AMD. 25 de agosto de 2020. 
  6. «ICL». icl.eecs.utk.edu (en inglés). Consultado el 7 de julio de 2017. 

Otras lecturas[editar]

Enlaces externos[editar]