LAPACK (" L inear 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 , descomposición de 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 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 clave para la portabilidad"
LAPACK fue diseñado como el 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 los años 1970 y 1980, fue diseñado para ejecutarse en las computadoras vectoriales modernas 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 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 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 licencia de 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 nombres que hace que los identificadores sean muy compactos. Esto era necesario ya que los primeros estándares 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. [2] : "Esquema de nombres"
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 punto flotante real con precisión simple y doble respectivamente, 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 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 DI
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) utilizando aritmética real de doble precisión se llama DGESV
. [2] : "Ecuaciones lineales"
En la actualidad, muchos entornos de programación admiten el uso de bibliotecas con enlaces C (LAPACKE, una interfaz C estandarizada, [6] forma parte de LAPACK desde la versión 3.4.0 [7] ), lo que permite utilizar rutinas 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 construyen sobre LAPACK, como R , [8] MATLAB , [9] y SciPy . [10]
También están disponibles varios enlaces de idiomas alternativos :
Al igual que con BLAS, LAPACK a veces se bifurca o se reescribe para ofrecer un mejor rendimiento en sistemas específicos. Algunas de las implementaciones son:
Dado que LAPACK suele llamar 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: