stringtranslate.com

LAPACK

LAPACK (" Paquete de álgebra lineal") 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 . [2] LAPACK se escribió originalmente en FORTRAN 77 , pero se trasladó a Fortran 90 en la versión 3.2 (2008). [3] Las rutinas manejan matrices tanto reales como complejas con precisión simple y doble . LAPACK se basa en una implementación BLAS subyacente para proporcionar componentes computacionales eficientes y portátiles para sus rutinas. [2] : "El BLAS como clave para la portabilidad" 

LAPACK fue diseñado como el sucesor de las ecuaciones lineales y las rutinas de 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 entonces modernas computadoras vectoriales con memoria compartida. LAPACK, por el contrario, fue diseñado para explotar eficazmente los cachés en las arquitecturas modernas basadas en caché y el paralelismo a nivel de instrucciones de los procesadores superescalares modernos , [2] : "Factores que afectan el rendimiento"  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 . [2] : "El BLAS como clave para la portabilidad"  LAPACK también se ha ampliado para ejecutarse en sistemas de memoria distribuida en paquetes posteriores como ScaLAPACK y PLAPACK. [4]

Netlib LAPACK tiene una licencia estilo BSD de tres cláusulas , una licencia de software libre permisiva con pocas restricciones. [5]

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, por lo que los nombres tuvieron que acortarse para ajustarse a este límite. [2] : "Esquema de nombres" 

El nombre de una subrutina LAPACK tiene el formato pmmaaa, donde:

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" 

Usar con otros lenguajes de programación y bibliotecas

Muchos entornos de programación actuales admiten el uso de bibliotecas con enlace C , lo que permite que las rutinas LAPACK se utilicen directamente siempre que se respeten algunas restricciones. Además, muchas otras bibliotecas de software y herramientas para computación científica y numérica se construyen sobre LAPACK, como R , [6] MATLAB , [7] y SciPy . [8]

También están disponibles varios enlaces de idiomas alternativos:

Implementaciones

Al igual que BLAS, LAPACK a veces se bifurca o reescribe 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. [9] [10]
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.
AbiertoBLAS
Reimplementación de código abierto de BLAS y LAPACK.
Gonum LAPACK
Una implementación nativa parcial de Go .

Dado que LAPACK normalmente llama a rutinas BLAS subyacentes para realizar la mayor parte de sus cálculos, simplemente vincularse a una implementación BLAS mejor ajustada puede ser suficiente para mejorar significativamente el rendimiento. Como resultado, LAPACK no se reimplementa con tanta frecuencia como BLAS.

Proyectos similares

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

libflame
Una densa biblioteca de álgebra lineal. Tiene un contenedor compatible con LAPACK. Se puede utilizar con cualquier BLAS, aunque BLIS es la implementación preferida. [11]
propio
Una biblioteca de encabezados para álgebra lineal. Tiene una implementación BLAS y LAPACK parcial para compatibilidad.
MAGMA
El proyecto Matrix Algebra on GPU and Multicore Architectures (MAGMA) desarrolla una densa biblioteca de álgebra lineal 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 escalables de múltiples núcleos (PLASMA) es un reemplazo moderno de LAPACK para arquitecturas de múltiples núcleos. PLASMA es un marco de software para el desarrollo de operaciones asincrónicas y presenta programación desordenada 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 . [12]

Ver también

Referencias

  1. ^ "Versión 3.12.0". 24 de noviembre de 2023 . Consultado el 19 de diciembre de 2023 .
  2. ^ abcdefAnderson , 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. Consultado el 28 de mayo de 2022 .
  3. ^ "Notas de la versión de LAPACK 3.2". 16 de noviembre de 2008.
  4. ^ "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 .
  5. ^ "LICENCIA.txt". Netlib . Consultado el 28 de mayo de 2022 .
  6. ^ "R: Biblioteca LAPACK". stat.ethz.ch.Consultado el 19 de marzo de 2022 .
  7. ^ "LAPACK en MATLAB". Centro de ayuda de Mathworks . Consultado el 28 de mayo de 2022 .
  8. ^ "Funciones LAPACK de bajo nivel". Manual de SciPy v1.8.1 . Consultado el 28 de mayo de 2022 .
  9. ^ "Guías y código de muestra". desarrollador.apple.com . Consultado el 7 de julio de 2017 .
  10. ^ "Guías y código de muestra". desarrollador.apple.com . Consultado el 7 de julio de 2017 .
  11. ^ "amd/libflame: biblioteca basada en objetos de alto rendimiento para cálculos DLA". GitHub . AMD. 25 de agosto de 2020.
  12. ^ "ICL". icl.eecs.utk.edu . Consultado el 7 de julio de 2017 .