LAPACK (" L inear A lgebra Pack age") es una biblioteca de 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 fue escrito originalmente en FORTRAN 77, pero se trasladó a Fortran 90 en la versión 3.2 (2008). [2] Las rutinas manejan matrices tanto reales como complejas con precisión simple y doble .
Versión inicial | 1992 |
---|---|
Lanzamiento estable | 3.9.1 [1] / 1 de abril de 2021 |
Escrito en | Fortran 90 |
Tipo | Biblioteca de software |
Licencia | BSD-nuevo |
Sitio web | www |
LAPACK fue diseñado como el sucesor de las ecuaciones lineales y las rutinas lineales de mínimos cuadrados de LINPACK y las rutinas de valores propios de EISPACK . LINPACK , escrito en las décadas de 1970 y 1980, fue diseñado para ejecutarse en las entonces modernas computadoras vectoriales con memoria compartida. LAPACK, por el contrario, fue diseñado para explotar eficazmente los cachés en arquitecturas modernas basadas en caché y, por lo tanto, puede ejecutar órdenes de magnitud más rápido que LINPACK en tales máquinas, dada 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. [3]
Netlib LAPACK tiene una licencia de estilo BSD de tres cláusulas , una licencia de software libre permisiva con pocas restricciones.
Esquema de nombres
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 de longitud, por lo que los nombres debían acortarse para ajustarse a 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 queC
yZ
representan aritmética compleja con precisión simple y doble respectivamente. La versión más reciente, LAPACK95, utiliza subrutinas genéricas para superar la necesidad de 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, cuandoDI
se da el código , la subrutina espera un vector de longitud quen
contiene los elementos en la diagonal, mientras que cuandoGE
se da el código , la subrutina espera una matriz n × n que contiene 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 queR
denota una actualización de rango 1.
Por ejemplo, se llama a la subrutina para resolver un sistema lineal con una matriz general (no estructurada) usando aritmética real de doble precisión DGESV
.
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 |
media pensión | ( complejo ) Matriz de bandas hermitianas |
ÉL | ( 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 |
O | matriz ortogonal ( real ) |
PB | matriz simétrica o matriz hermitiana banda definida positiva |
correos | matriz simétrica o matriz hermitiana positiva definida |
PÁGINAS | 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 | ( real ) matriz de bandas simétricas |
SP | simétrica , matriz de almacenamiento lleno |
S T | ( real ) matriz simétrica matriz tridiagonal |
SY | matriz simétrica |
tuberculosis | matriz de bandas triangulares |
TG | matrices triangulares , problema generalizado (es decir, un par de matrices triangulares ) |
TP | triangular , matriz de almacenamiento lleno |
TR | matriz triangular (o en algunos casos cuasi-triangular) |
TZ | matriz trapezoidal |
Naciones Unidas | ( compleja ) matriz unitaria |
ARRIBA | ( Complejo ) unitario , de matriz cargada de almacenamiento |
Los detalles sobre este esquema se pueden encontrar en la sección Esquema de nombres en la Guía del usuario de LAPACK.
Usar con otros lenguajes de programación
Hoy en día, muchos entornos de programación admiten el uso de bibliotecas con enlace C. Las rutinas LAPACK se pueden usar como funciones C si se observan algunas restricciones.
También están disponibles varios enlaces de idiomas alternativos :
- Armadillo para C ++
- IT ++ para C ++
- LAPACK ++ para C ++
- Lacaml para OCaml
- CLapack para C
- SciPy para Python
- Gonum for Go
Implementaciones
Al igual que con BLAS, LAPACK se bifurca o reescribe con frecuencia para proporcionar un mejor rendimiento en sistemas específicos. Algunas de las implementaciones son:
- Acelerar
- El marco de Apple para macOS e iOS , que incluye versiones optimizadas de BLAS y LAPACK . [4] [5]
- Netlib LAPACK
- El LAPACK oficial.
- 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.
Dado que LAPACK usa BLAS para el trabajo pesado, el simple hecho de vincularse a una implementación BLAS mejor ajustada generalmente mejora el rendimiento lo suficiente. Como resultado, LAPACK no se vuelve a implementar con tanta frecuencia como BLAS.
Proyectos similares
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. Puede usarse con cualquier BLAS, aunque BLIS es la implementación preferida. [6]
- 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 . [7]
Ver también
- Lista de bibliotecas numéricas
- Biblioteca del núcleo matemático (MKL)
- Biblioteca numérica NAG
- SLATEC , una biblioteca FORTRAN 77 de rutinas matemáticas y estadísticas
- QUADPACK , una biblioteca de FORTRAN 77 para integración numérica
Referencias
- ^ "LAPACK 3.9.1" .
- ^ "Notas de la versión LAPACK 3.2" . 16 de noviembre de 2008.
- ^ "PLAPACK: Paquete de álgebra lineal paralela" . www.cs.utexas.edu . Universidad de Texas en Austin . 12 de junio de 2007 . Consultado el 20 de abril de 2017 .
- ^ "Guías y código de muestra" . developer.apple.com . Consultado el 7 de julio de 2017 .
- ^ "Guías y código de muestra" . developer.apple.com . Consultado el 7 de julio de 2017 .
- ^ "amd / libflame: biblioteca basada en objetos de alto rendimiento para cálculos DLA" . GitHub . AMD. 25 de agosto de 2020.
- ^ "ICL" . icl.eecs.utk.edu . Consultado el 7 de julio de 2017 .
Otras lecturas
- Anderson, E .; Bai, Z .; Bischof, C .; Blackford, S .; Demmel, J .; Dongarra, J .; Du Croz, J .; Greenbaum, A .; Hammarling, S .; McKenney, A .; Sorensen, D. (1999). Guía del usuario de LAPACK (tercera edición). Filadelfia, PA: Sociedad de Matemáticas Industriales y Aplicadas. ISBN 0-89871-447-8.
enlaces externos
- Página web oficial