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]
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:
p
es un código de una letra que indica el tipo de constantes numéricas utilizadas. S
, D
representan aritmética real de punto flotante respectivamente con 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 nueva, 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 esperada por el algoritmo. Los códigos para los diferentes tipos de matrices se informan a continuación; los datos reales se almacenan en un formato diferente según el tipo específico; DI
por ejemplo, cuando se proporciona el código , la subrutina espera un vector de longitud n
que contenga los elementos en la diagonal, mientras que cuando GE
se proporciona el código, la subrutina espera una matriz n × n que 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.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"
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:
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:
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.
Estos proyectos proporcionan una funcionalidad similar a LAPACK, pero con una interfaz principal diferente a la de LAPACK: