Articulo de referencia

Subprogramas básicos de álgebra lineal

"},"discontinued":{"wt":""},"latest release version":{"wt":"3.11.0"},"latest release date":{"wt":"{{Start date and age|2022|11|11|df=yes}}"},"latest preview version":{"wt":""},"...

BLAS ( Basic Linear Algebra Subprograms ) es una especificación que define un conjunto de rutinas de bajo nivel para realizar operaciones comunes de álgebra lineal, como la suma de vectores , la multiplicación escalar , el producto escalar , las combinaciones lineales y la multiplicación de matrices . Son las rutinas de bajo nivel estándar de facto para las bibliotecas de álgebra lineal; estas rutinas cuentan con enlaces tanto para C ("interfaz CBLAS") como para Fortran ("interfaz BLAS"). Si bien la especificación BLAS es general, las implementaciones BLAS suelen estar optimizadas para la velocidad en una máquina específica, por lo que su uso puede aportar mejoras sustanciales en el rendimiento. Las implementaciones BLAS aprovechan hardware especializado de punto flotante, como registros vectoriales o instrucciones SIMD .

Se originó como una biblioteca Fortran en 1979 [ 1 ] y su interfaz fue estandarizada por el Foro Técnico BLAS (BLAST), cuyo último informe BLAS se puede encontrar en el sitio web de netlib . [ 2 ] Esta biblioteca Fortran se conoce como la implementación de referencia (a veces denominada erróneamente biblioteca BLAS) y no está optimizada para la velocidad, pero es de dominio público . [ 3 ] [ 4 ]

La mayoría de las bibliotecas que ofrecen rutinas de álgebra lineal se ajustan a la interfaz BLAS, lo que permite a los usuarios desarrollar programas que son independientes de la biblioteca BLAS que se utilice.

Se han desarrollado muchas bibliotecas BLAS, dirigidas a diversas plataformas de hardware. Algunos ejemplos son cuBLAS (GPU NVIDIA, GPGPU ), rocBLAS (GPU AMD) y OpenBLAS . Ejemplos de ramas de bibliotecas BLAS basadas en CPU incluyen: OpenBLAS , BLIS (software de instanciación de bibliotecas tipo BLAS) , bibliotecas de rendimiento Arm, [ 5 ] ATLAS y la biblioteca Intel Math Kernel (iMKL). AMD mantiene una bifurcación de BLIS optimizada para la plataforma AMD . [ 6 ] ATLAS es una biblioteca portátil que se optimiza automáticamente para una arquitectura arbitraria. iMKL es una biblioteca de software libre [ 7 ] y propietaria [ 8 ] optimizada para x86 y x86-64 con énfasis en el rendimiento de los procesadores Intel . [ 9 ] OpenBLAS es una biblioteca de código abierto optimizada manualmente para muchas de las arquitecturas populares. Los benchmarks LINPACK dependen en gran medida de la rutina BLAS gemmpara sus mediciones de rendimiento.

Muchas aplicaciones de software numérico utilizan bibliotecas compatibles con BLAS para realizar cálculos de álgebra lineal, incluyendo LAPACK , LINPACK , Armadillo , GNU Octave , Mathematica , [ 10 ] MATLAB , [ 11 ] NumPy , [ 12 ] R , Julia y Lisp-Stat.

La biblioteca de C++std::linalg , introducida en C++26 , está basada en BLAS.

Fondo

Con la llegada de la programación numérica, las sofisticadas bibliotecas de subrutinas se volvieron muy útiles. Estas bibliotecas contenían subrutinas para operaciones matemáticas comunes de alto nivel, como la búsqueda de raíces, la inversión de matrices y la resolución de sistemas de ecuaciones. El lenguaje preferido era FORTRAN . La biblioteca de programación numérica más destacada era el Paquete de Subrutinas Científicas (SSP) de IBM . [ 13 ] Estas bibliotecas de subrutinas permitían a los programadores concentrarse en sus problemas específicos y evitar la reimplementación de algoritmos conocidos. Las rutinas de la biblioteca también eran mejores que las implementaciones promedio; los algoritmos de matrices, por ejemplo, podían usar pivoteo completo para obtener una mayor precisión numérica. Las rutinas de la biblioteca también eran más eficientes. Por ejemplo, una biblioteca podía incluir un programa para resolver una matriz triangular superior. Las bibliotecas incluían versiones de precisión simple y doble de algunos algoritmos.

Inicialmente, estas subrutinas usaban bucles codificados para sus operaciones de bajo nivel. Por ejemplo, si una subrutina necesitaba realizar una multiplicación de matrices, entonces la subrutina tendría tres bucles anidados. Los programas de álgebra lineal tienen muchas operaciones comunes de bajo nivel (las llamadas operaciones de "núcleo", no relacionadas con los sistemas operativos ). [ 14 ] Entre 1973 y 1977, se identificaron varias de estas operaciones de núcleo. [ 15 ] [ 16 ] Estas operaciones de núcleo se convirtieron en subrutinas definidas que las bibliotecas matemáticas podían llamar. Las llamadas al núcleo tenían ventajas sobre los bucles codificados: la rutina de la biblioteca sería más legible, había menos posibilidades de errores y la implementación del núcleo podría optimizarse para la velocidad. Una especificación para estas operaciones de núcleo usando escalares y vectores , las Subrutinas Básicas de Álgebra Lineal de nivel 1 (BLAS), se publicó en 1979. [ 17 ] BLAS se usó para implementar la biblioteca de subrutinas de álgebra lineal LINPACK .

La abstracción BLAS permite la personalización para un alto rendimiento. Por ejemplo, LINPACK es una biblioteca de propósito general que puede usarse en muchas máquinas diferentes sin modificaciones. LINPACK podría usar una versión genérica de BLAS. Para mejorar el rendimiento, diferentes máquinas podrían usar versiones personalizadas de BLAS. Con el desarrollo de arquitecturas informáticas más sofisticadas, surgieron las máquinas vectoriales . BLAS para una máquina vectorial podía aprovechar las rápidas operaciones vectoriales de la máquina. (Si bien los procesadores vectoriales acabaron cayendo en desuso, las instrucciones vectoriales en las CPU modernas son esenciales para un rendimiento óptimo en las rutinas BLAS).

Otras características de la máquina estuvieron disponibles y también pudieron ser explotadas. En consecuencia, BLAS se amplió entre 1984 y 1986 con operaciones de núcleo de nivel 2 relacionadas con operaciones de matriz-vector. La jerarquía de memoria también se reconoció como algo que se podía explotar. Muchas computadoras tienen memoria caché mucho más rápida que la memoria principal; mantener las manipulaciones de matrices localizadas permite un mejor uso de la caché. En 1987 y 1988, se identificó el BLAS de nivel 3 para realizar operaciones de matriz-matriz. El BLAS de nivel 3 fomentó los algoritmos de partición de bloques. La biblioteca LAPACK utiliza BLAS de nivel 3. [ 18 ]

El BLAS original solo se refería a vectores y matrices almacenados densamente. Se han abordado extensiones adicionales de BLAS, como por ejemplo para matrices dispersas. [ 19 ]

Funcionalidad

La funcionalidad de BLAS se clasifica en tres conjuntos de rutinas denominadas "niveles", que corresponden tanto al orden cronológico de definición y publicación como al grado del polinomio en la complejidad de los algoritmos; las operaciones de BLAS de nivel 1 suelen tomar tiempo lineal , O ( n ) , las de nivel 2 tiempo cuadrático y las de nivel 3 tiempo cúbico. [ 20 ] Las implementaciones modernas de BLAS suelen proporcionar los tres niveles.

Nivel 1

Este nivel consta de todas las rutinas descritas en la presentación original de BLAS (1979), [ 1 ] que definía únicamente operaciones vectoriales en arreglos con pasos : productos escalares , normas vectoriales , una suma vectorial generalizada de la forma

yαincógnita+y{\displaystyle {\boldsymbol {y}}\leftarrow \alpha {\boldsymbol {x}}+{\boldsymbol {y}}}

(llamadas " axpy", "ax más y") y varias otras operaciones.

Nivel 2

Este nivel contiene operaciones de matriz-vector que incluyen, entre otras cosas, una multiplicación generalizada de matriz - vector ( gemv):

yαAincógnita+βy{\displaystyle {\boldsymbol {y}}\leftarrow \alpha {\boldsymbol {A}}{\boldsymbol {x}}+\beta {\boldsymbol {y}}}

así como un solucionador para x en la ecuación lineal

Tincógnita=y{\displaystyle {\boldsymbol {T}}{\boldsymbol {x}}={\boldsymbol {y}}}

donde T es triangular. El diseño de las BLAS de nivel 2 comenzó en 1984, y los resultados se publicaron en 1988. [ 21 ] Las subrutinas de nivel 2 están especialmente diseñadas para mejorar el rendimiento de los programas que utilizan BLAS en procesadores vectoriales , donde las BLAS de nivel 1 son subóptimas "porque ocultan la naturaleza matricial-vectorial de las operaciones al compilador". [ 21 ]

Nivel 3

Este nivel, publicado formalmente en 1990, [ 20 ] contiene operaciones de matriz-matriz , incluyendo una " multiplicación general de matrices " ( gemm), de la forma

doαAB+βdo,{\displaystyle {\boldsymbol {C}}\leftarrow \alpha {\boldsymbol {A}}{\boldsymbol {B}}+\beta {\boldsymbol {C}},}

donde A y B pueden transponerse o conjugarse hermitianamente dentro de la rutina, y las tres matrices pueden tener un paso. La multiplicación de matrices ordinaria AB se puede realizar estableciendo α en uno y C en una matriz de ceros del tamaño apropiado.

También se incluyen en el Nivel 3 rutinas para computación.

BαT1B,{\displaystyle {\boldsymbol {B}}\leftarrow \alpha {\boldsymbol {T}}^{-1}{\boldsymbol {B}},}

donde T es una matriz triangular , entre otras funcionalidades.

Debido a la ubicuidad de las multiplicaciones de matrices en muchas aplicaciones científicas, incluyendo para la implementación del resto de BLAS de Nivel 3, [ 22 ] y porque existen algoritmos más rápidos más allá de la repetición obvia de la multiplicación matriz-vector, gemmes un objetivo principal de optimización para los implementadores de BLAS. Por ejemplo, al descomponer una o ambas de A , B en matrices de bloques , gemmse puede implementar recursivamente . Esta es una de las motivaciones para incluir el parámetro β , de modo que los resultados de bloques anteriores se puedan acumular. Nótese que esta descomposición requiere el caso especial β = 1 que muchas implementaciones optimizan, eliminando así una multiplicación para cada valor de C. Esta descomposición permite una mejor localidad de referencia tanto en el espacio como en el tiempo de los datos utilizados en el producto. Esto, a su vez, aprovecha la caché del sistema. [ 23 ] Para sistemas con más de un nivel de caché, el bloqueo se puede aplicar una segunda vez al orden en que se utilizan los bloques en el cálculo. Ambos niveles de optimización se utilizan en implementaciones como ATLAS . Más recientemente, las implementaciones de Kazushige Goto han demostrado que bloquear solo para la caché L2 , combinado con una amortización cuidadosa de la copia a memoria contigua para reducir los fallos de TLB , es superior a ATLAS . [ 24 ] Una implementación altamente optimizada basada en estas ideas forma parte de GotoBLAS , OpenBLAS y BLIS .

Una variación común de gemmes la gemm3mque calcula un producto complejo utilizando "tres multiplicaciones de matrices reales y cinco sumas de matrices reales en lugar de las cuatro multiplicaciones de matrices reales y dos sumas de matrices reales convencionales", un algoritmo similar al algoritmo de Strassen descrito por primera vez por Peter Ungar. [ 25 ]

Implementaciones

Acelerar
Marco de trabajo de Apple para macOS e iOS , que incluye versiones optimizadas de BLAS y LAPACK . [ 26 ] [ 27 ]
Bibliotecas de rendimiento de Arm
Bibliotecas de rendimiento de Arm , compatibles con procesadores basados ​​en AArch64 de 64 bits de Arm , disponibles en Arm . [ 5 ]
ATLAS
Software de álgebra lineal sintonizado automáticamente , una implementación de código abierto de las API de BLAS para C y Fortran 77 . [ 28 ]
BLIS
BLIS es un marco de software para la instanciación rápida de bibliotecas tipo BLAS. Está optimizado para la mayoría de las CPU modernas. BLIS es una refactorización completa de GotoBLAS que reduce la cantidad de código que debe escribirse para una plataforma determinada. [ 29 ] [ 30 ]
C++ AMP BLAS
La biblioteca C++ AMP BLAS es una implementación de código abierto de BLAS para la extensión de lenguaje AMP de Microsoft para Visual C++. [ 31 ]
cuBLAS
BLAS optimizado para tarjetas GPU basadas en Nvidia, que requiere pocas llamadas adicionales a la biblioteca. [ 32 ]
NVBLAS
BLAS optimizado para tarjetas GPU basadas en Nvidia, que proporciona solo funciones de nivel 3, pero como reemplazo directo de otras bibliotecas BLAS. [ 33 ]
clBLAS
Una implementación de BLAS en OpenCL por AMD. Parte de las bibliotecas de computación de AMD. [ 34 ]
clBLAST
Una implementación OpenCL optimizada de la mayor parte de la API de BLAS. [ 35 ]
Eigen BLAS
Una biblioteca BLAS en Fortran 77 y C implementada sobre la biblioteca Eigen con licencia MPL , compatible con las arquitecturas x86 , x86-64 , ARM (NEON) y PowerPC .
ESSL
Biblioteca de subrutinas científicas y de ingeniería de IBM , compatible con la arquitectura PowerPC en AIX y Linux . [ 36 ]
GotoBLAS
Implementación de BLAS con licencia BSD de Kazushige Goto , optimizada en particular para Intel Nehalem / Atom , VIA Nanoprocessor y AMD Opteron . [ 37 ]
Biblioteca Científica GNU
Implementación multiplataforma de numerosas rutinas numéricas. Incluye una interfaz CBLAS.
HP MLIB
La biblioteca matemática de HP admite las arquitecturas IA-64 , PA-RISC , x86 y Opteron bajo HP-UX y Linux .
Intel MKL
La biblioteca Intel Math Kernel Library , compatible con arquitecturas x86 de 32 y 64 bits, está disponible gratuitamente en Intel . [ 7 ] Incluye optimizaciones para procesadores Intel Pentium , Core e Intel Xeon , así como para procesadores Intel Xeon Phi ; y es compatible con Linux , Windows y macOS . [ 38 ]
Matemáticas Keisan
Biblioteca matemática de NEC , compatible con la arquitectura NEC SX bajo SUPER-UX e Itanium bajo Linux [ 39 ]
Netlib BLAS
La implementación de referencia oficial en Netlib , escrita en Fortran 77. [ 40 ]
Netlib CBLAS
Interfaz C de referencia para BLAS. También es posible (y común) llamar a Fortran BLAS desde C. [ 41 ]
OpenBLAS
BLAS optimizado basado en GotoBLAS, compatible con procesadores x86 , x86-64 , MIPS , ARM y RISC-V . [ 42 ]
PDLIB/SX
Biblioteca matemática de dominio público de NEC para el sistema NEC SX-4 . [ 43 ]
rocBLAS
Implementación que se ejecuta en GPU AMD a través de ROCm . [ 44 ]
SCSL
La biblioteca de software de computación científica de SGI contiene implementaciones de BLAS y LAPACK para las estaciones de trabajo Irix de SGI . [ 45 ]
Biblioteca de rendimiento de Sun
BLAS y LAPACK optimizados para arquitecturas SPARC , Core y AMD64 en Solaris 8, 9 y 10, así como en Linux. [ 46 ]
uBLAS
Una biblioteca genérica de clases plantilla de C++ que proporciona la funcionalidad BLAS. Forma parte de la biblioteca Boost . Proporciona enlaces a muchas bibliotecas aceleradas por hardware en una notación unificada. Además, uBLAS se centra en la corrección de los algoritmos utilizando características avanzadas de C++. [ 47 ]

Bibliotecas que utilizan BLAS

Armadillo
Armadillo es una biblioteca de álgebra lineal en C++ que busca un buen equilibrio entre velocidad y facilidad de uso. Emplea clases plantilla y tiene enlaces opcionales a BLAS/ATLAS y LAPACK. Está patrocinada por NICTA (en Australia) y tiene una licencia libre. [ 48 ]
LAPACK
LAPACK es una biblioteca de álgebra lineal de alto nivel basada en BLAS. Al igual que BLAS, existe una implementación de referencia, pero también existen muchas alternativas como libFlame y MKL.
Mir
Una biblioteca numérica genérica acelerada por LLVM para ciencia y aprendizaje automático escrita en D. Proporciona subprogramas genéricos de álgebra lineal (GLAS). Puede construirse sobre una implementación de CBLAS. [ 49 ]

Bibliotecas similares (no compatibles con BLAS)

Elemental
Elemental es un software de código abierto para álgebra lineal y optimización directa densa y dispersa en memoria distribuida . [ 50 ]
HASEM
Es una biblioteca de plantillas de C++, capaz de resolver ecuaciones lineales y calcular valores propios. Está licenciada bajo la Licencia BSD. [ 51 ]
LAMA
La biblioteca para aplicaciones matemáticas aceleradas ( LAMA ) es una biblioteca de plantillas de C++ para escribir solucionadores numéricos dirigidos a diversos tipos de hardware (por ejemplo, GPU a través de CUDA u OpenCL ) en sistemas de memoria distribuida , ocultando la programación específica del hardware al desarrollador del programa.
MTL4
La versión 4 de Matrix Template Library es una biblioteca de plantillas genérica de C++ que proporciona funcionalidad BLAS dispersa y densa. MTL4 establece una interfaz intuitiva (similar a MATLAB ) y una amplia aplicabilidad gracias a la programación genérica .

BLAS disperso

Se han sugerido varias extensiones a BLAS para el manejo de matrices dispersas a lo largo de la historia de la biblioteca; un pequeño conjunto de rutinas de núcleo de matriz dispersa finalmente se estandarizó en 2002. [ 52 ]

BLAS por lotes

Las funciones BLAS tradicionales también se han adaptado a arquitecturas que admiten un alto grado de paralelismo, como las GPU . En estos casos, las funciones BLAS tradicionales suelen ofrecer un buen rendimiento para matrices grandes. Sin embargo, al calcular, por ejemplo, productos de matrices de muchas matrices pequeñas mediante la rutina GEMM, estas arquitecturas muestran pérdidas de rendimiento significativas. Para solucionar este problema, en 2017 se especificó una versión por lotes de la función BLAS. [ 53 ]

Tomando como ejemplo la rutina GEMM anterior, la versión por lotes realiza el siguiente cálculo simultáneamente para muchas matrices:

do[k]αA[k]B[k]+βdo[k]k{\displaystyle {\boldsymbol {C}}[k]\leftarrow \alpha {\boldsymbol {A}}[k]{\boldsymbol {B}}[k]+\beta {\boldsymbol {C}}[k]\quad \forall k}

El índicek{\displaystyle k}Entre corchetes se indica que la operación se realiza para todas las matrices.k{\displaystyle k}en una pila. A menudo, esta operación se implementa para una disposición de memoria por lotes con pasos donde todas las matrices siguen concatenadas en los arreglos.A{\displaystyle A},B{\displaystyle B}ydo{\displaystyle C}.

Las funciones BLAS por lotes pueden ser una herramienta versátil y permiten, por ejemplo, una implementación rápida de integradores exponenciales e integradores de Magnus que manejan largos períodos de integración con muchos pasos de tiempo. [ 54 ] Aquí, la exponenciación de la matriz , la parte computacionalmente costosa de la integración, puede implementarse en paralelo para todos los pasos de tiempo utilizando funciones BLAS por lotes.

Véase también

Referencias

  1. 1 2 3
    • Lawson, CL; Hanson, RJ; Kincaid, D.; Krogh, FT (1979). "Subprogramas básicos de álgebra lineal para su uso en FORTRAN". ACM Trans. Math. Softw . 5 (3): 308– 323. doi : 10.1145/355841.355847 . hdl : 2060/19780018835 . S2CID 6585321. Algoritmo 539. 
  2. "Foro Técnico de BLAS" . netlib.org . Consultado el 7 de julio de 2017 .
  3. blaseman Archivado el 12/10/2016 en Wayback Machine "Los productos son implementaciones de los programas de dominio público BLAS (Basic Linear Algebra Subprograms) y LAPACK (Linear Algebra PACKage), que han sido desarrollados por grupos de personas como el Prof. Jack Dongarra, de la Universidad de Tennessee, EE. UU., y publicados en la WWW (URL: https://www.netlib.org/ )."
  4. Jack Dongarra; Gene Golub; Eric Grosse; Cleve Moler; Keith Moore. "Netlib y NA-Net: construyendo una comunidad de computación científica" (PDF) . netlib.org . Consultado el 13 de febrero de 2016. El repositorio de software Netlib se creó en 1984 para facilitar la rápida distribución de rutinas de software de dominio público para su uso en computación científica.
  5. 1 2 "Bibliotecas de rendimiento de Arm" . Arm . 2020. Consultado el 16 de diciembre de 2020 .
  6. "Biblioteca BLAS" .
  7. 1 2 "Opciones sin costo para la biblioteca Intel Math Kernel (MKL), soporte usted mismo, libre de regalías" . Intel . 2015. Recuperado el 31 de agosto de 2015 .
  8. "Intel Math Kernel Library (Intel MKL)" . Intel . 2015. Consultado el 25 de agosto de 2015 .
  9. "Aviso de optimización" . Intel . 2012. Consultado el 10 de abril de 2013 .
  10. Douglas Quinney (2003). "¿Qué hay de nuevo en Mathematica 5.0?" (PDF) . MSOR Connections . 3 (4). The Higher Education Academy. Archivado del original (PDF) el 29 de octubre de 2013.
  11. Cleve Moler (2000). "MATLAB incorpora LAPACK" . MathWorks . Consultado el 26 de octubre de 2013 .
  12. Stéfan van der Walt; S. Chris Colbert y Gaël Varoquaux (2011). "El array NumPy: una estructura para la computación numérica eficiente". Computing in Science and Engineering . 13 (2): 22– 30. arXiv : 1102.1523 . Bibcode : 2011CSE....13b..22V . doi : 10.1109/MCSE.2011.37 . S2CID 16907816 . 
  13. Boisvert, Ronald F. (2000). "Software matemático: pasado, presente y futuro". Matemáticas y computadoras en simulación . 54 ( 4–5 ): 227–241 . arXiv : cs/0004004 . Bibcode : 2000cs........4004B . doi : 10.1016/S0378-4754(00)00185-3 . S2CID 15157725 . 
  14. Incluso el SSP (que apareció alrededor de 1966) tenía algunas rutinas básicas como RADD (sumar filas), CADD (sumar columnas), SRMA (escalar una fila y agregarla a otra) y RINT (intercambiar filas). Aparentemente, estas rutinas no se usaban como operaciones de núcleo para implementar otras rutinas, como la inversión de matrices. Véase IBM (1970), System/360 Scientific Subroutine Package, Versión III, Programmer's Manual (5.ª ed.), International Business Machines, GH20-0205-4 .
  15. Foro BLAST 2001 , pág. 1.
  16. Hanson, RJ; Krogh, FT; Lawson, CL (1973-10-01). "Mejora de la eficiencia del software portátil para álgebra lineal" . Boletín informativo ACM SIGNUM . 8 (4): 16. doi : 10.1145/1052646.1052653 . Consultado el 6 de febrero de 2026 .
  17. Lawson et al. 1979 .
  18. Foro BLAST 2001 , págs. 1–2.
  19. Foro BLAST 2001 , pág. 2.
  20. 1 2 Dongarra, Jack J.; Du Croz, Jeremy; Hammarling, Sven; Duff, Iain S. (1990). "Un conjunto de subprogramas básicos de álgebra lineal de nivel 3" . ACM Transactions on Mathematical Software . 16 (1): 1– 17. doi : 10.1145/77626.79170 . ISSN 0098-3500 . S2CID 52873593 .  
  21. 1 2 Dongarra, Jack J.; Du Croz, Jeremy; Hammarling, Sven; Hanson, Richard J. (1988). "Un conjunto extendido de subprogramas de álgebra lineal básica de FORTRAN". ACM Trans. Math. Softw . 14 : 1–17 . CiteSeerX 10.1.1.17.5421 . doi : 10.1145/42288.42291 . S2CID 3579623 .  
  22. Goto, Kazushige ; van de Geijn, Robert A. (2008). "Implementación de alto rendimiento de BLAS de nivel 3" (PDF) . ACM Transactions on Mathematical Software . 35 (1): 1–14 . doi : 10.1145/1377603.1377607 . S2CID 14722514. Archivado del original (PDF) el 6 de julio de 2017. 
  23. Golub, Gene H. ; Van Loan, Charles F. (1996), Matrix Computations (3.ª ed.), Johns Hopkins, ISBN  978-0-8018-5414-9
  24. Goto, Kazushige ; van de Geijn, Robert A. (2008). "Anatomía de la multiplicación de matrices de alto rendimiento". ACM Transactions on Mathematical Software . 34 (3): 12:1–12:25. CiteSeerX 10.1.1.111.3873 . doi : 10.1145/1356052.1356053 . ISSN 0098-3500 . S2CID 9359223 .   (25 páginas)
  25. Van Zee, Field G.; Smith, Tyler M. (24 de julio de 2017). "Implementación de la multiplicación de matrices complejas de alto rendimiento mediante los métodos 3m y 4m". ACM Transactions on Mathematical Software . 44 (1): 1– 36. doi : 10.1145/3086466 . S2CID 25580883 . 
  26. "Guías y código de ejemplo" . developer.apple.com . Consultado el 7 de julio de 2017 .
  27. "Guías y código de ejemplo" . developer.apple.com . Consultado el 7 de julio de 2017 .
  28. "Software de álgebra lineal sintonizado automáticamente (ATLAS)" . math-atlas.sourceforge.net . Consultado el 7 de julio de 2017 .
  29. blis: Marco de software para la instanciación de bibliotecas tipo BLAS , flame, 30/06/2017 , consultado el 07/07/2017
  30. Repositorio de BLIS en GitHub , 15/10/2021
  31. "Biblioteca C++ AMP BLAS" . CodePlex . Archivado del original el 8 de julio de 2017. Consultado el 7 de julio de 2017 .
  32. "cuBLAS" . NVIDIA Developer . 29/07/2013 . Consultado el 07/07/2017 .
  33. "NVBLAS" . NVIDIA Developer . 15 de mayo de 2018. Consultado el 15 de mayo de 2018 .
  34. clBLAS: una biblioteca de software que contiene funciones BLAS escritas en OpenCL , clMathLibraries, 3 de julio de 2017 , consultado el 7 de julio de 2017.
  35. ^ Nugteren, Cedric (05 de julio de 2017), CLBlast: OpenCL BLAS sintonizado , consultado el 7 de julio de 2017
  36. Centro de conocimiento de IBM: Biblioteca de subrutinas de ingeniería y científicas
  37. Milfeld, Kent. "GotoBLAS2" . Centro de Computación Avanzada de Texas . Archivado del original el 23 de marzo de 2020. Consultado el 17 de marzo de 2024 .
  38. "Intel Math Kernel Library (Intel MKL) | Intel Software" . software.intel.com . Consultado el 7 de julio de 2017 .
  39. Mathkeisan, NEC. "MathKeisan" . www.mathkeisan.com . Consultado el 7 de julio de 2017 .
  40. "BLAS (Subprogramas básicos de álgebra lineal)" . www.netlib.org . Consultado el 7 de julio de 2017 .
  41. "BLAS (Subprogramas básicos de álgebra lineal)" . www.netlib.org . Consultado el 7 de julio de 2017 .
  42. "OpenBLAS: Una biblioteca BLAS optimizada" . www.openblas.net . Consultado el 7 de julio de 2017 .
  43. "PDLIB/SX: Solución empresarial | NEC" . Archivado del original el 22 de febrero de 2007. Consultado el 20 de mayo de 2007 .
  44. "rocBLAS" . rocmdocs.amd.com . Archivado del original el 22/05/2021 . Consultado el 21/05/2021 .
  45. "SGI - Biblioteca Científica SCSL: Página principal" . Archivado del original el 13 de mayo de 2007. Consultado el 20 de mayo de 2007 .
  46. "Oracle Developer Studio" . www.oracle.com . Consultado el 7 de julio de 2017 .
  47. "Boost Basic Linear Algebra - 1.60.0" . www.boost.org . Consultado el 7 de julio de 2017 .
  48. "Armadillo: biblioteca de álgebra lineal en C++" . arma.sourceforge.net . Consultado el 7 de julio de 2017 .
  49. "Bibliotecas numéricas y de sistema de Dlang" . GitHub .
  50. "Elemental: álgebra lineal y optimización directa densa y dispersa con memoria distribuida — Elemental" . libelemental.org . Archivado del original el 1 de agosto de 2013. Consultado el 7 de julio de 2017 .
  51. "HASEM" . SourceForge . 17 de agosto de 2015. Consultado el 7 de julio de 2017 .
  52. Duff, Iain S.; Heroux, Michael A.; Pozo, Roldan (2002). "Una visión general de los subprogramas de álgebra lineal básica dispersa: el nuevo estándar del Foro Técnico BLAS". ACM Transactions on Mathematical Software . 28 (2): 239– 267. doi : 10.1145/567806.567810 . S2CID 9411006 . 
  53. Dongarra, Jack; Hammarling, Sven; Higham, Nicholas J.; Relton, Samuel D.; Valero-Lara, Pedro; Zounon, Mawussi (2017). "El diseño y el rendimiento de BLAS por lotes en sistemas informáticos modernos de alto rendimiento" . Procedia Computer Science . 108 : 495–504 . doi : 10.1016/j.procs.2017.05.138 . hdl : 2117/106913 .
  54. Herb, Konstantin; Welter, Pol (2022). "Integración temporal paralela mediante rutinas Batched BLAS (Basic Linear Algebra Subprograms)". Computer Physics Communications . 270 108181. arXiv : 2108.07126 . Bibcode : 2022CoPhC.27008181H . doi : 10.1016/j.cpc.2021.108181 . S2CID 237091802 . 

Lecturas adicionales

  • BLAST Forum (21/08/2001), Estándar del Foro Técnico de Subprogramas Básicos de Álgebra Lineal (BLAST) , Knoxville, TN: Universidad de Tennessee
  • Dodson, DS; Grimes, RG (1982), "Comentario sobre el algoritmo 539: Subprogramas básicos de álgebra lineal para su uso en Fortran", ACM Trans. Math. Softw. , 8 (4): 403– 404, doi : 10.1145/356012.356020 , S2CID 43081631 
  • Dodson, DS (1983), "Corrección: Observación sobre "Algoritmo 539: Subrutinas básicas de álgebra lineal para uso en FORTRAN"", ACM Trans. Math. Softw. , 9 : 140, doi : 10.1145/356022.356032 , S2CID 22163977 
  • JJ Dongarra, J. Du Croz, S. Hammarling y RJ Hanson, Algoritmo 656: Un conjunto extendido de subprogramas de álgebra lineal básica de FORTRAN, ACM Trans. Math. Softw., 14 (1988), págs.  18 32.
  • JJ Dongarra, J. Du Croz, IS Duff y S. Hammarling, Un conjunto de subprogramas básicos de álgebra lineal de nivel 3, ACM Trans. Math. Softw., 16 (1990), págs.  1 17.
  • JJ Dongarra, J. Du Croz, IS Duff y S. Hammarling, Algoritmo 679: Un conjunto de subprogramas básicos de álgebra lineal de nivel 3, ACM Trans. Math. Softw., 16 (1990), págs.  18 28.
Nuevo BLAS
  • LS Blackford, J. Demmel, J. Dongarra, I. Duff, S. Hammarling, G. Henry, M. Heroux, L. Kaufman, A. Lumsdaine, A. Petitet, R. Pozo, K. Remington, RC Whaley, Un conjunto actualizado de subprogramas básicos de álgebra lineal (BLAS), ACM Trans. Math. Softw., 28-2 (2002), págs.  135 151.
  • J. Dongarra, Basic Linear Algebra Subprograms Technical Forum Standard, International Journal of High Performance Applications and Supercomputing, 16(1) (2002), pp.  1 111, y International Journal of High Performance Applications and Supercomputing, 16(2) (2002), pp.  115 199.
  • Página principal de BLAS en Netlib.org
  • Preguntas frecuentes de BLAS
  • Guía de referencia rápida de BLAS de la Guía del usuario de LAPACK
  • Historia oral de Lawson: Uno de los autores originales del BLAS habla sobre su creación en una entrevista de historia oral. Charles L. Lawson. Entrevista de historia oral realizada por Thomas Haigh, 6 y 7 de noviembre de 2004, San Clemente, California. Sociedad de Matemáticas Industriales y Aplicadas, Filadelfia, Pensilvania.
  • Historia oral de Dongarra En una entrevista de historia oral, Jack Dongarra explora la relación inicial de BLAS con LINPACK, la creación de versiones de BLAS de nivel superior para nuevas arquitecturas y su trabajo posterior en el sistema ATLAS para optimizar automáticamente BLAS para máquinas específicas. Jack Dongarra, entrevista de historia oral realizada por Thomas Haigh, 26 de abril de 2005, Universidad de Tennessee, Knoxville, TN. Sociedad de Matemáticas Industriales y Aplicadas, Filadelfia, PA
  • ¿Cómo logra BLAS un rendimiento tan extremo? Diez multiplicaciones de matrices simples de 1000 × 1000 ( 10¹⁰ multiplicaciones y sumas de punto flotante) tardan 15,77  segundos en  un procesador de 2,6 GHz; la implementación de BLAS tarda 1,32  segundos.
  • Descripción general de los subprogramas de álgebra lineal básica dispersa: el nuevo estándar del Foro Técnico de BLAS