LAPACK ("Linear Algebra Package") 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 en valores singulares . También incluye rutinas para implementar las factorizaciones matriciales asociadas , como LU , QR , Cholesky y la descomposición de Schur . [ 2 ] Las rutinas manejan matrices reales y complejas tanto en precisión simple como doble . LAPACK se basa en una implementación subyacente de BLAS para proporcionar bloques de construcción computacionales eficientes y portátiles para sus rutinas. [ 2 ] : "BLAS como la clave de la portabilidad"
LAPACK fue escrito originalmente en FORTRAN 77 , pero se migró a Fortran 90 en la versión 3.2 (2008). [ 3 ] Se distribuye oficialmente a través del repositorio Netlib . El mantenimiento se realiza actualmente en un repositorio de GitHub . [ 4 ]
LAPACK fue diseñado como sucesor de las rutinas de ecuaciones lineales y mínimos cuadrados lineales 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 computadoras vectoriales modernas de la época con memoria compartida. LAPACK, en cambio, fue diseñado para explotar eficazmente las cachés en las arquitecturas modernas basadas en caché y el paralelismo a nivel de instrucción de los procesadores superescalares modernos , [ 2 ] : "Factores que afectan el rendimiento" y, por lo tanto, puede ejecutarse órdenes de magnitud más rápido que LINPACK en dichas máquinas, dada una implementación BLAS bien ajustada . [ 2 ] : "BLAS como clave para la portabilidad" LAPACK también se ha extendido para ejecutarse en sistemas de memoria distribuida en paquetes posteriores como ScaLAPACK y PLAPACK. [ 5 ]
Netlib LAPACK está licenciado bajo una licencia de estilo BSD de tres cláusulas , una licencia de software libre permisiva con pocas restricciones. [ 6 ]
Esquema de nomenclatura
Las subrutinas en LAPACK tienen una convención de nomenclatura que hace que los identificadores sean muy compactos. Esto fue necesario ya que los primeros estándares de Fortran solo admitían identificadores de hasta seis caracteres, por lo que los nombres tuvieron que acortarse para ajustarse a este límite. [ 2 ] : "Esquema de nomenclatura"
El nombre de una subrutina LAPACK tiene el formato pmmaaa, donde:
pes un código de una letra que indica el tipo de constantes numéricas utilizadas.S,Drepresentan aritmética de punto flotante real en precisión simple y doble, respectivamente, mientras queCyZrepresentan aritmética compleja con precisión simple y doble, respectivamente. La versión más reciente, LAPACK95, utiliza subrutinas genéricas para evitar la necesidad de especificar explícitamente el tipo de datos.mmes 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 muestran a continuación; los datos reales se almacenan en un formato diferente según el tipo específico; por ejemplo, cuandoDIse proporciona el código, la subrutina espera un vector de longitudnque contenga los elementos de la diagonal, mientras que cuandoGEse proporciona el código, la subrutina espera una matriz n × n que contenga las entradas de la matriz.aaaes un código de una a tres letras que describe el algoritmo real implementado en la subrutina, por ejemplo,SVdenota una subrutina para resolver el sistema lineal , mientras queRdenota una actualización de rango 1.
Por 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. [ 2 ] : "Ecuaciones lineales"
Utilizar con otros lenguajes de programación y bibliotecas.
Muchos entornos de programación actuales admiten el uso de bibliotecas con enlace C (LAPACKE, una interfaz C estandarizada, [ 7 ] forma parte de LAPACK desde la versión 3.4.0 [ 8 ] ), lo que permite usar rutinas de LAPACK directamente siempre que se respeten algunas restricciones. Además, muchas otras bibliotecas y herramientas de software para computación científica y numérica se basan en LAPACK, como R , [ 9 ] MATLAB , [ 10 ] y SciPy . [ 11 ]
También están disponibles varias opciones de encuadernación en otros idiomas :
Implementaciones
Al igual que con BLAS, LAPACK a veces se bifurca o se reescribe para proporcionar un mejor rendimiento en sistemas específicos. Algunas de las implementaciones son:
- Acelerar
- Marco de trabajo de Apple para macOS e iOS , que incluye versiones optimizadas de BLAS y LAPACK. [ 12 ] [ 13 ]
- 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.
- Gonum LAPACK
- Una implementación parcial nativa de Go .
Dado que LAPACK suele recurrir a las rutinas subyacentes de BLAS para realizar la mayor parte de sus cálculos, basta con enlazar con una implementación de BLAS mejor optimizada para mejorar significativamente el rendimiento. Por consiguiente, LAPACK no se reimplementa con tanta frecuencia como BLAS.
Proyectos similares
Estos proyectos ofrecen una funcionalidad similar a la de LAPACK, pero con una interfaz principal diferente a la de LAPACK:
- Libflame
- Una biblioteca densa de álgebra lineal. Tiene un envoltorio compatible con LAPACK. Puede usarse con cualquier BLAS, aunque BLIS es la implementación preferida. [ 14 ]
- Eigen
- Una biblioteca de cabeceras para álgebra lineal. Incluye una implementación en BLAS y una implementación parcial en LAPACK para mayor 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, incluidos sistemas multinúcleo acelerados con GPGPU .
- PLASMA
- El proyecto PLASMA (Parallel Linear Algebra for Scalable Multi-core Architectures ) es un reemplazo moderno de LAPACK para arquitecturas multinúcleo. PLASMA es un marco de software para el desarrollo de operaciones asíncronas y funciones de planificación fuera de orden con un planificador en tiempo de ejecución llamado QUARK que puede usarse para cualquier código que exprese sus dependencias con un grafo acíclico dirigido . [ 15 ]
Véase también
- Lista de bibliotecas numéricas
- Lista de bibliotecas matemáticas de código abierto
- Biblioteca de Núcleos Matemáticos (MKL)
- Biblioteca numérica NAG
- SLATEC , una biblioteca FORTRAN 77 de rutinas matemáticas y estadísticas.
- QUADPACK , una biblioteca FORTRAN 77 para integración numérica.
Referencias
- ↑ "Versión 3.12.1" . 8 de enero de 2025. Consultado el 26 de enero de 2025 .
- 1 2 3 4 5 6 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-8Consultado el 28 de mayo de 2022 .
- ↑ "Notas de la versión LAPACK 3.2" . 16 de noviembre de 2008.
- ↑ https://github.com/Reference-LAPACK/lapack .
- ↑ "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 .
- ↑ "LICENSE.txt" . Netlib . Consultado el 28 de mayo de 2022 .
- ↑ "La interfaz C de LAPACKE para LAPACK" . LAPACK — Paquete de álgebra lineal . Consultado el 22 de septiembre de 2024 .
- ↑ "LAPACK 3.4.0" . LAPACK — Paquete de álgebra lineal . Consultado el 22 de septiembre de 2024 .
- ↑ "R: Biblioteca LAPACK" . stat.ethz.ch. Consultado el 19 de marzo de 2022 .
- ↑ "LAPACK en MATLAB" . Centro de ayuda de Mathworks . Consultado el 28 de mayo de 2022 .
- ↑ "Funciones de bajo nivel de LAPACK" . Manual de SciPy v1.8.1 . Consultado el 28 de mayo de 2022 .
- ↑ "Guías y código de ejemplo" . developer.apple.com . Consultado el 7 de julio de 2017 .
- ↑ "Guías y código de ejemplo" . developer.apple.com . Consultado el 7 de julio de 2017 .
- ↑ "amd/libflame: Biblioteca de alto rendimiento basada en objetos para cálculos DLA" . GitHub . AMD. 25 de agosto de 2020.
- ↑ "ICL" . icl.eecs.utk.edu . Consultado el 7 de julio de 2017 .
- Bibliotecas Fortran
- Software libre programado en Fortran
- Álgebra lineal numérica
- Software numérico
- Software que utiliza la licencia BSD.