¿Cuál es la relación de BLAS, LAPACK y otras bibliotecas de álgebra lineal?

26

He estado buscando bibliotecas de álgebra lineal de C ++ para un proyecto en el que he estado trabajando. Algo que aún no entiendo es la conexión de BLAS y LAPACK a otras bibliotecas de álgebra lineal.

Al revisar este artículo sobre bibliotecas de álgebra lineal , encontré interesante que:

  • algunas bibliotecas son independientes de BLAS y LAPACK
  • algunos requieren BLAS y LAPACK
  • algunos tienen interfaces opcionales para BLAS y LAPACK
  • y, según tengo entendido, puede usar BLAS y LAPACK para resolver problemas de álgebra lineal directamente

Me imagino que algunas bibliotecas son simplemente interfaces C ++ para las bibliotecas BLAS y LAPACK escritas en C y Fortran y otras han implementado sus propias rutinas sustitutivas, pero

  1. ¿Cuáles son las implicaciones de las interfaces opcionales para BLAS y LAPACK? ¿Qué estás perdiendo al optar por no participar y qué están haciendo las bibliotecas en su lugar?

  2. ¿Alguna de las bibliotecas proporciona algo más que una interfaz? Por ejemplo, UMFPACK está escrito en C y tiene interfaces opcionales para BLAS y LAPACK. ¿Qué puede hacer UMFPACK (u otras bibliotecas) que BLAS y LAPACK no puedan hacer por sí mismas?

Neal Kruis
fuente

Respuestas:

15

Hasta donde sé, Lapack es la única implementación disponible públicamente de una serie de algoritmos (eigensolver denso no simétrico, eigensolver simétrico de tiempo pseudo-cuadrático, SVD de Jacobi rápido). La mayoría de las bibliotecas que no dependen de BLAS + Lapack tienden a admitir operaciones muy primitivas como la multiplicación de matrices, la factorización LU y la descomposición QR. Lapack contiene algunos de los algoritmos más sofisticados para cálculos de matriz densos que no creo que se implementen en ningún otro lugar.

Entonces, para responder sus preguntas (al menos parcialmente),

  1. Al optar por BLAS / Lapack, generalmente no le falta funcionalidad (a menos que la interfaz opcional haya sido diseñada para que no haya una implementación alternativa, lo cual es raro). Si desea realizar operaciones muy sofisticadas, esas otras bibliotecas probablemente no lo implementen de todos modos. Dado que BLAS puede ajustarse mucho a su arquitectura, es posible que se esté perdiendo grandes aceleraciones (una diferencia de velocidad de orden de magnitud no es desconocida).

  2. Usted menciona UMFPACK, que es para la factorización de matriz dispersa. BLAS / Lapack solo se preocupa por las matrices densas. UMFPACK en algún nivel necesita trabajar en problemas densos de tamaño mediano, lo que puede hacer usando implementaciones personalizadas o llamando a BLAS / Lapack. Aquí la diferencia es solo en velocidad.

Si la velocidad es motivo de gran preocupación, intente usar una biblioteca que admita enlaces BLAS / Lapack opcionales, y úselas al final cuando quiera las cosas más rápido.

Victor Liu
fuente
3
  1. Las buenas implementaciones de las rutinas BLAS y LAPACK (lo más importante, las rutinas BLAS) pueden ser mucho más rápidas que las implementaciones ingenuas y directas de las mismas funciones. Sin embargo, las implementaciones eficientes generalmente incluyen optimizaciones que son muy específicas para la computadora en particular en la que se está ejecutando. Incluso los diferentes modelos de procesadores del mismo fabricante (por ejemplo, procesadores Intel x86-64) a menudo requieren un código muy diferente para obtener un buen rendimiento. Al suministrar bibliotecas BLAS / LAPACK optimizadas a un paquete de software, normalmente puede acelerar el código en comparación con el uso de rutinas no optimizadas. Sin embargo, dado que muchos usuarios ocasionales pueden no tener la experiencia para instalar rutinas optimizadas, es común también proporcionar una opción para usar rutinas de álgebra lineal genérica no optimizada.

  2. UMFPACK es una biblioteca de rutinas para álgebra lineal en matrices dispersas (matrices con una alta proporción de 0 entradas). Puede usar BLAS / LAPACK para manejar matrices densas (o bloques densos dentro de las matrices) que encuentra.

Brian Borchers
fuente
1

Versión corta: son bibliotecas escritas principalmente en Fortran que se utilizan para operaciones numéricas en muchos lenguajes, incluso algunos programas C debido a su gran velocidad y optimizaciones; También son algunas de las únicas implementaciones de código abierto de muchos algoritmos :)

No tiene que usar bibliotecas a menos que tengan dependencias; Iirc, la mayoría de ellos son bastante independientes, y siempre puedes escribir tus propias funciones matemáticas, como las mejor vectorizadas para tu arquitectura

Eiyrioü von Kauyf
fuente
1
La mayoría de las rutinas BLAS y LAPACK optimizadas hace tiempo que dejaron de escribirse Fortran. Las rutinas BLAS y LAPACK más rápidas generalmente no son las que se descargan de netlib. Los vendedores de la mayoría de los procesadores venden o distribuyen versiones optimizadas de BLAS y LAPACK diseñadas específicamente para sus chips.
Bill Barth
Lo siento, me refiero a los distribuidos en la red, los generales; los chips específicos, por supuesto, no son tan portátiles: es decir, algunos de los trucos vectoriales de Intel no funcionan tan bien en los chips AMD, por lo que tienen un descargo de responsabilidad sobre la biblioteca. Y estoy bastante seguro de que esos se renombran con otro nombre, ¿no?
Eiyrioü von Kauyf
@BillBarth BLAS definitivamente, pero ¿estás seguro de que las rutinas LAPACK también se reescriben? Afaik siempre que BLAS 3 tenga un alto rendimiento (o multiproceso), entonces todo está bien.
stali
1
Pienso en BLAS y LAPACK como los nombres de las funciones y la interfaz. Hay muchas implementaciones diferentes (ACML, ESSL, MKL, ATLAS, etc.).
Bill Barth
1
esas son solo interfaces ... como ATLAS no son la biblioteca real.
Eiyrioü von Kauyf