scalapack netlib library lapacke c lapack blas atlas

library - netlib lapack



Cuál es la relación entre BLAS, LAPACK y ATLAS (5)

BLAS es una colección de operaciones aritméticas de matriz y vector de bajo nivel ("multiplicar un vector por un escalar", "multiplicar dos matrices y agregar a una tercera matriz", etc.).

LAPACK es una colección de operaciones de álgebra lineal de alto nivel. Cosas como las factorizaciones matriciales (LU, LLt, QR, SVD, Schur, etc.) que se utilizan para hacer cosas como "encontrar los valores propios de una matriz", o "encontrar los valores singulares de una matriz", o "resolver un sistema lineal" ". LAPACK está construido sobre BLAS; muchos usuarios de LAPACK solo usan las interfaces LAPACK y nunca necesitan estar enterados del BLAS. Por lo general, LAPACK se compila de forma separada del BLAS y puede usar cualquier implementación de BLAS altamente optimizada que tenga disponible.

ATLAS es una implementación portable razonablemente buena de las interfaces BLAS, que también implementa algunas de las operaciones LAPACK más comúnmente usadas.

Lo que "deberías usar" depende un tanto de los detalles de lo que intentas hacer y de la plataforma que estás usando. Sin embargo, no te equivocarás demasiado con "usar ATLAS + LAPACK".

¡No entiendo cómo se relacionan BLAS, LAPACK y ATLAS y cómo debo usarlos juntos! He estado revisando todos sus manuales y tengo una idea general de BLAS y LAPACK y cómo usarlos con los pocos ejemplos que encuentro, pero no puedo encontrar ejemplos reales usando ATLAS para ver cómo se relaciona con estos dos.

Estoy tratando de hacer un poco de trabajo de bajo nivel en matrices y mi idioma principal es C. Primero quería usar GSL, pero dice que si quieres el mejor rendimiento debes usar BLAS y ATLAS. ¿Hay alguna buena página web que brinde algunos buenos ejemplos de cómo usar estos (en C) todos juntos? En otras palabras, estoy buscando un tutorial sobre el uso de estos tres (¡o cualquier subconjunto de ellos!). En resumen, estoy confundido!


Mi búsqueda en Google de la relación entre BLAS, ATLAS, LAPACK me trajo a esta página. Si bien la pregunta ya es antigua y la respuesta de Stephen Canon fue muy útil para la comprensión inicial, me gustaría referir a otros con la misma pregunta a la entrada de Wikipedia en BLAS . La página y los enlaces dentro fueron muy útiles para mí.



Por lo que sé, y después de trabajar en el repositorio de ATLAS, parece que incluye una reimplementación de BLAS en C. Hay algo más que eso, pero espero que responda la pregunta.


Hace un tiempo, cuando empecé a hacer álgebra lineal en C , me sorprendió ver que hay tan pocos tutoriales para BLAS , LAPACK y otras API fundamentales, a pesar de que de alguna manera son la piedra angular de muchas otras bibliotecas . Por esa razón comencé a recopilar todos los ejemplos / tutoriales que pude encontrar en Internet para BLAS , CBLAS , LAPACK , CLAPACK , LAPACKE , ATLAS , OpenBLAS ... en este repositorio de Github .

Bueno, debo advertirte que, como ingeniero mecánico, tengo poca experiencia en la gestión de dicho repositorio o github. Primero parecerá un completo desastre para ustedes. Sin embargo, si logra superar la estructura desordenada, encontrará todo tipo de ejemplos e instrucciones que pueden ser de ayuda. He intentado más para asegurarme de que compilan y los que no compilan lo he mencionado. He modificado muchos de ellos para que sean compilables con los GNU compilers ( gcc , g++ y gfortran ). He creado MakeFile s, que puede leer para saber cómo puede llamar a rutinas Fortran/FORTRAN individuales en un programa C o C++ . También puse algunas instrucciones de instalación para Mac y Linux (lo siento chicos de windows!). También hice algunos archivos bash .sh para la compilación automática de algunas de estas bibliotecas.

Pero yendo a su otra pregunta: BLAS y LAPACK son más bien API s no SDK específicos. Son solo una lista de especificaciones o extensiones de idioma en lugar de una implementación o biblioteca. Dicho esto, hay implementaciones originales de Netlib en FORTRAN 77 , que la mayoría de las personas se refieren (¡confusamente!) Cuando hablan de BLAS y LAPACK . Por lo tanto, si observa muchas cosas extrañas al usar estas API , es porque en realidad estaba llamando rutinas FORTRAN en C y no en las bibliotecas y funciones de C ATLAS y OpenBLAS son algunas de las mejores implementaciones de BLAS y LACPACK hasta donde yo sé. Se ajustan a la API original, aunque, que yo sepa, están implementados en C/C++ desde cero (¡no estoy seguro!). Hay implementaciones de GPGPU de la API demandan OpenCL : CLBlast , clBLAS , clMAGMA y ViennaCL por mencionar algunas. También hay implementaciones específicas de proveedores optimizadas para hardware o plataforma específica, lo que desaconsejo encarecidamente a cualquiera que las use.

Mi recomendación para cualquiera que quiera aprender usando BLAS y LAPACK en C es primero aprender la programación mixta de FORTRAN-C . El primer capítulo del repositorio mencionado está dedicado a este asunto y allí he recopilado muchos ejemplos diferentes.