¡No entiendo cómo BLAS, LAPACK y ATLAS están relacionados y cómo debería usarlos juntos! He estado revisando todos sus manuales y tengo una idea general de BLAS y LAPACK y cómo usarlos con los muy pocos ejemplos que encuentro, pero no puedo encontrar ningún ejemplo real usando ATLAS para ver cómo se relaciona con estos dos.
Estoy tratando de hacer un trabajo de bajo nivel en matrices y mi idioma principal es C. Primero quería usar GSL, pero dice que si desea el mejor rendimiento, debe usar BLAS y ATLAS. ¿Hay alguna buena página web que dé algunos buenos ejemplos de cómo usarlos (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!
Respuestas:
BLAS es una colección de operaciones aritméticas matriciales y vectoriales 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 nivel superior. 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 el BLAS; muchos usuarios de LAPACK solo usan las interfaces de LAPACK y nunca necesitan conocer el BLAS. LAPACK generalmente se compila por separado del BLAS, y puede usar cualquier implementación de BLAS altamente optimizada que tenga disponible.
ATLAS es una implementación portátil razonablemente buena de las interfaces BLAS, que también implementa algunas de las operaciones LAPACK más utilizadas.
Lo que "debe usar" depende en cierta medida de los detalles de lo que está tratando de hacer y qué plataforma está utilizando. Sin embargo, no se equivocará demasiado con “use ATLAS + LAPACK”.
fuente
Mientras que hace, cuando empecé a hacer un poco de álgebra lineal en
C
, que me llegó como una sorpresa ver que hay tan pocos tutoriales paraBLAS
,LAPACK
y otros fundamentalesAPI
s, a pesar de que de alguna manera son las piedras angulares de muchas otras bibliotecas. Por eso empecé a coleccionar todos los ejemplos / tutoriales que pude encontrar en todo el Internet paraBLAS
,CBLAS
,LAPACK
,CLAPACK
,LAPACKE
,ATLAS
,OpenBLAS
... en este repo Github .Bueno, debo advertirte que, como ingeniero mecánico, tengo poca experiencia en la gestión de un repositorio de git o GitHub. Primero les parecerá un completo desastre a ustedes. Sin embargo, si logra superar la estructura desordenada, encontrará todo tipo de ejemplos e instrucciones que podrían ser de ayuda. He probado la mayoría de ellos, para asegurarme de que compilan. Y los que no compilan he mencionado. He modificado muchos de ellos para que sean compilables con
GNU compilers
(gcc
,g++
ygfortran
). He hechoMakeFile
s que se puede leer para aprender cómo se puede llamar individualesFortran/FORTRAN
rutinas en unaC
oC++
programa. También he puesto algunas instrucciones de instalación para mac y linux (¡lo siento, chicos de Windows!). También he hecho algunosbash
.sh
archivos para la compilación automática de algunas de estas bibliotecas.Pero yendo a su otra pregunta:
BLAS
yLAPACK
más bienAPI
no son específicosSDK
. Son solo una lista de especificaciones o extensiones de lenguaje en lugar de implementaciones o bibliotecas. Dicho esto, existen implementaciones originales de Netlib enFORTRAN 77
que la mayoría de la gente se refiere a (confusamente!) Cuando se habla deBLAS
yLAPACK
. Entonces, si ve muchas cosas extrañas al usar estosAPI
s es porque en realidad estaba llamando aFORTRAN
rutinas enC
lugar deC
bibliotecas y funciones.ATLAS
yOpenBLAS
son algunas de las mejores implementaciones deBLAS
yLACPACK
que yo sepa. Se ajustan al originalAPI
, aunque, a mi entender, se implementan enC/C++
desde cero (¡no estoy seguro!). Hay implementaciones de GPGPU de losAPI
s que usanOpenCL
: CLBlast , clBLAS , clMAGMA , ArrayFire y ViennaCL para mencionar algunas. También hay implementaciones específicas de proveedores optimizadas para hardware o plataforma específicos, lo que desaconsejo encarecidamente que cualquiera las use.Mi recomendación para cualquiera que quiera aprender usando
BLAS
yLAPACK
enC
aprenderFORTRAN-C
primero es la programación mixta. El primer capítulo del repositorio mencionado está dedicado a este asunto y allí he recopilado muchos ejemplos diferentes.PD: He estado trabajando en la rama de desarrollo del repositorio de vez en cuando. ¡Parece un poco menos desordenado!
fuente
ATLAS ya está bastante desactualizado. Fue desarrollado en un momento en que se pensaba que la optimización de BLAS para varias plataformas estaba más allá de la capacidad de los humanos, y como resultado, la autogeneración y el autoajuste eran el camino a seguir.
A principios de la década de 2000, llegó Kazushige Goto, quien mostró cómo las implementaciones altamente eficientes se pueden codificar a mano. Puede disfrutar de un artículo interesante en el New York Times: https://www.nytimes.com/2005/11/28/technology/writing-the-fastest-code-by-hand-for-fun-a-human- computer-keeps.html .
Kazushige, por un lado, tenía una mejor comprensión de la teoría detrás de las implementaciones de alto rendimiento de la multiplicación matriz-matriz, y por otro lado, las diseñó mejor. Su enfoque, que en las CPU actuales suele ser el de mayor rendimiento, no está en el espacio de búsqueda que el autotunes ATLAS. Por lo tanto, ATLAS es inherentemente inferior. La implementación de Kazushige del BLAS se conoció como el GotoBLAS. Se bifurcó como OpenBLAS cuando se unió a la industria.
Las ideas detrás de GotoBLAS se refactorizaron en una nueva implementación, el marco del software de instanciación de bibliotecas (BLIS) similar a BLAS ( https://github.com/flame/blis ), que implementa los mismos algoritmos, pero estructura el código de modo que menos necesita ser implementado a medida para una nueva arquitectura. BLIS está codificado en C.
Lo que muestra esta discusión es que hay muchas implementaciones de BLAS. Los BLAS son un estándar de facto para la interfaz. ATLAS fue una vez el estado del arte. No es largo.
fuente
Hasta donde sé, y después de trabajar a través del repositorio ATLAS, parece que incluye una reimplementación de BLAS en C. Hay algo más que eso, pero espero que responda la pregunta.
fuente