stringtranslate.com

Subprogramas básicos de álgebra lineal

Los subprogramas básicos de álgebra lineal ( BLAS ) son una especificación que prescribe un conjunto de rutinas de bajo nivel para realizar operaciones comunes de álgebra lineal , como la suma de vectores , la multiplicación escalar , los productos escalares , 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; las rutinas tienen enlaces tanto para C ("interfaz CBLAS") como para Fortran ("interfaz BLAS"). Aunque la especificación BLAS es general, las implementaciones de BLAS a menudo se optimizan para la velocidad en una máquina en particular, por lo que su uso puede traer beneficios de rendimiento sustanciales. Las implementaciones de BLAS aprovecharán el hardware de punto flotante especial, como los registros vectoriales o las 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 netlib . [2] Esta biblioteca Fortran se conoce como la implementación de referencia (a veces denominada de manera confusa como la 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 de la biblioteca desarrollar programas que son indiferentes a la biblioteca BLAS que se esté utilizando.

Se han desarrollado muchas bibliotecas BLAS, dirigidas a varias plataformas de hardware diferentes. Los ejemplos incluyen cuBLAS (NVIDIA GPU, GPGPU ), rocBLAS (AMD GPU) y OpenBLAS . Los ejemplos de ramas de la biblioteca BLAS basadas en CPU incluyen: OpenBLAS , BLIS (BLAS-like Library Instantiation Software) , Arm Performance Libraries, [5] ATLAS e Intel Math Kernel Library (iMKL). AMD mantiene una bifurcación de BLIS que está 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 proveedores freeware [7] y propietaria [8] optimizada para x86 y x86-64 con énfasis en el rendimiento en los procesadores Intel . [9] OpenBLAS es una biblioteca de código abierto que está optimizada manualmente para muchas de las arquitecturas populares. Los puntos de referencia 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, incluidas LAPACK , LINPACK , Armadillo , GNU Octave , Mathematica , [10] MATLAB , [11] NumPy , [12] R , Julia y Lisp-Stat.

Fondo

Con la llegada de la programación numérica, las bibliotecas de subrutinas sofisticadas se volvieron útiles. Estas bibliotecas contendrí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 elegido fue FORTRAN . La biblioteca de programación numérica más destacada fue el Scientific Subroutine Package (SSP) de IBM . [13] Estas bibliotecas de subrutinas permitieron a los programadores concentrarse en sus problemas específicos y evitar la reimplementación de algoritmos conocidos. Las rutinas de la biblioteca también serían mejores que las implementaciones promedio; los algoritmos matriciales, por ejemplo, podrían usar pivoteo completo para obtener una mejor precisión numérica. Las rutinas de la biblioteca también tendrían rutinas más eficientes. Por ejemplo, una biblioteca puede incluir un programa para resolver una matriz que es triangular superior. Las bibliotecas incluirían versiones de precisión simple y doble precisión de algunos algoritmos.

Inicialmente, estas subrutinas usaban bucles codificados de forma rígida 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 de bajo nivel comunes (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] Estas operaciones de núcleo se convirtieron en subrutinas definidas que las bibliotecas matemáticas podían llamar. Las llamadas de núcleo tenían ventajas sobre los bucles codificados de forma rígida: la rutina de la biblioteca sería más legible, habría menos posibilidades de errores y la implementación del núcleo podría optimizarse para la velocidad. En 1979 se publicó una especificación para estas operaciones de núcleo que usaban escalares y vectores , las Subrutinas de Álgebra Lineal Básica de nivel 1 (BLAS). [16] 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 se puede utilizar en muchas máquinas diferentes sin modificación. LINPACK podría utilizar una versión genérica de BLAS. Para ganar rendimiento, diferentes máquinas podrían utilizar versiones personalizadas de BLAS. A medida que las arquitecturas informáticas se volvieron más sofisticadas, aparecieron las máquinas vectoriales . BLAS para una máquina vectorial podía utilizar las operaciones vectoriales rápidas de la máquina. (Si bien los procesadores vectoriales finalmente cayeron 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 se hicieron disponibles y también podían ser explotadas. En consecuencia, BLAS se amplió de 1984 a 1986 con operaciones de kernel de nivel 2 que se relacionaban con operaciones vector-matrix. La jerarquía de memoria también se reconoció como algo que se podía explotar. Muchas computadoras tienen una memoria caché que es 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 nivel 3 de BLAS para realizar operaciones matriz-matriz. El nivel 3 de BLAS fomentó algoritmos particionados en bloques. La biblioteca LAPACK usa BLAS de nivel 3. [17]

El BLAS original sólo se ocupaba de vectores y matrices almacenados de forma densa. Se han abordado otras ampliaciones de BLAS, como por ejemplo para matrices dispersas. [18]

Funcionalidad

La funcionalidad de BLAS se clasifica en tres conjuntos de rutinas llamadas "niveles", que corresponden tanto al orden cronológico de definición y publicación, como al grado de polinomio en las complejidades de los algoritmos; las operaciones de BLAS de nivel 1 normalmente toman un tiempo lineal , O ( n ) , las operaciones de nivel 2 un tiempo cuadrático y las operaciones de nivel 3 un tiempo cúbico. [19] Las implementaciones modernas de BLAS normalmente proporcionan 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 sólo operaciones vectoriales sobre matrices con pasos : productos escalares , normas vectoriales , una suma vectorial generalizada de la forma

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

Nivel 2

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

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

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

Nivel 3

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

donde A y B pueden transponerse o conjugarse hermíticamente dentro de la rutina, y las tres matrices pueden ser multiplicadas por saltos. La multiplicación de matrices ordinaria AB puede realizarse estableciendo α en uno y C en una matriz de todos ceros del tamaño apropiado.

También se incluyen en el Nivel 3 rutinas para calcular

donde T es una matriz triangular , entre otras funcionalidades.

Debido a la ubicuidad de las multiplicaciones de matrices en muchas aplicaciones científicas, incluida la implementación del resto de BLAS de nivel 3, [21] y debido a que 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 uno o ambos de A , B en matrices de bloques , gemmse puede implementar de forma recursiva . Esta es una de las motivaciones para incluir el parámetro β , [ dudosodiscutir ] para que se puedan acumular los resultados de los bloques anteriores. Tenga en cuenta que esta descomposición requiere el caso especial β = 1 para el 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 memoria caché del sistema. [22] Para sistemas con más de un nivel de memoria caché, el bloqueo se puede aplicar una segunda vez al orden en el 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 el bloqueo solo para la caché L2 , combinado con una cuidadosa amortización de la copia a la memoria contigua para reducir los errores de TLB , es superior a ATLAS . [23] Una implementación altamente ajustada basada en estas ideas es parte de GotoBLAS , OpenBLAS y BLIS .

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

Implementaciones

Acelerar
El marco de Apple para macOS e iOS , que incluye versiones optimizadas de BLAS y LAPACK . [25] [26]
Bibliotecas de rendimiento de brazo
Bibliotecas de rendimiento de Arm, compatibles con procesadores Arm de 64 bits basados ​​en AArch64 , disponibles en Arm . [5]
ATLAS
Software de álgebra lineal ajustado automáticamente , una implementación de código abierto de las API de BLAS para C y Fortran 77. [ 27]
felicidad
Marco de software de creación de instancias de bibliotecas similar a BLAS para una creación de instancias rápida. 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 se debe escribir para una plataforma determinada. [28] [29]
C++ AMP BLAS
La biblioteca C++ AMP BLAS es una implementación de código abierto de BLAS para la extensión del lenguaje AMP de Microsoft para Visual C++. [30]
cubos
BLAS optimizado para tarjetas GPU basadas en NVIDIA, que requiere pocas llamadas de biblioteca adicionales. [31]
NVBLAS
BLAS optimizado para tarjetas GPU basadas en NVIDIA, que proporciona solo funciones de nivel 3, pero como reemplazo directo para otras bibliotecas BLAS. [32]
clBLAS
Una implementación OpenCL de BLAS por parte de AMD. Parte de las bibliotecas de cómputo de AMD. [33]
CLBLAST (Explosión de cl)
Una implementación OpenCL optimizada de la mayoría de las API BLAS. [34]
Propio BLAS
Una biblioteca BLAS de Fortran 77 y C implementada sobre la biblioteca Eigen con licencia MPL , compatible con arquitecturas x86 , x86-64 , ARM (NEON) y PowerPC .
ESSL
Biblioteca de subrutinas científicas y de ingeniería de IBM , que soporta la arquitectura PowerPC bajo AIX y Linux . [35]
Ir a BLAS
Implementación de BLAS con licencia BSD de Kazushige Goto , optimizada particularmente para Intel Nehalem / Atom , VIA Nanoprocessor y AMD Opteron . [36]
Biblioteca científica GNU
Implementación multiplataforma de numerosas rutinas numéricas. Contiene una interfaz CBLAS.
HP MLIB
Biblioteca matemática de HP compatible con la arquitectura IA-64 , PA-RISC , x86 y Opteron en HP-UX y Linux .
Intel MKL
La biblioteca Intel Math Kernel Library , compatible con x86 de 32 y 64 bits, está disponible de forma gratuita en Intel . [7] Incluye optimizaciones para CPU Intel Pentium , Core e Intel Xeon e Intel Xeon Phi ; compatibilidad con Linux , Windows y macOS . [37]
Matemáticas Keisan
Biblioteca matemática de NEC , compatible con la arquitectura NEC SX bajo SUPER-UX e Itanium bajo Linux [38]
Netlib BLAS
La implementación de referencia oficial en Netlib , escrita en Fortran 77. [ 39]
Biblioteca NetLib CBLAS
Interfaz de referencia C para BLAS. También es posible (y popular) llamar a BLAS Fortran desde C. [40]
OpenBLAS
BLAS optimizado basado en GotoBLAS, compatible con procesadores x86 , x86-64 , MIPS y ARM . [41]
PDLIB/SX
Biblioteca matemática de dominio público de NEC para el sistema NEC SX-4 . [42]
roBLAS
Implementación que se ejecuta en GPU AMD a través de ROCm . [43]
Sociedad Civil de Liechtenstein
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 . [44]
Biblioteca de rendimiento solar
BLAS y LAPACK optimizados para arquitecturas SPARC , Core y AMD64 en Solaris 8, 9 y 10, así como Linux. [45]
UBLAS
Biblioteca de clases de plantilla C++ genérica que proporciona funcionalidad BLAS. 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++. [46]

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 de plantilla y tiene enlaces opcionales a BLAS/ATLAS y LAPACK. Está patrocinada por NICTA (en Australia) y tiene una licencia libre. [47]
Paquete LAPAQUE
LAPACK es una biblioteca de álgebra lineal de nivel superior creada sobre BLAS. Al igual que BLAS, existe una implementación de referencia, pero existen muchas alternativas como libFlame y MKL.
Mir
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. [48]

Bibliotecas similares (no compatibles con BLAS)

Elemental
Elemental es un software de código abierto para álgebra lineal directa dispersa y densa con memoria distribuida y optimización. [49]
Hasem
es una biblioteca de plantillas de C++ que permite resolver ecuaciones lineales y calcular valores propios. Tiene licencia BSD. [50]
LAMA
La Biblioteca para Aplicaciones Matemáticas Aceleradas (LAMA) es una biblioteca de plantillas C++ para escribir solucionadores numéricos destinados a varios 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 la biblioteca de plantillas Matrix es una biblioteca de plantillas C++ genérica que proporciona funcionalidad BLAS densa y dispersa. MTL4 establece una interfaz intuitiva (similar a MATLAB ) y una amplia aplicabilidad gracias a la programación genérica .

BLAS escaso

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

BLAS por lotes

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

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

El índice entre corchetes indica que la operación se realiza para todas las matrices de una pila. A menudo, esta operación se implementa para un diseño de memoria por lotes con pasos largos, donde todas las matrices se concatenan en las matrices , y .

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 Magnus que manejan largos períodos de integración con muchos pasos de tiempo. [53] Aquí, la exponenciación matricial , la parte computacionalmente costosa de la integración, se puede implementar en paralelo para todos los pasos de tiempo mediante el uso de funciones BLAS por lotes.

Véase también

Referencias

  1. ^ ab * Lawson, CL; Hanson, RJ; Kincaid, D.; Krogh, FT (1979). "Subprogramas básicos de álgebra lineal para 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 de octubre de 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 profesor Jack Dongarra, de la Universidad de Tennessee, EE. UU. y todos publicados en la WWW (URL: https://www.netlib.org/)." [ enlace muerto permanente ]
  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 fue creado en 1984 para facilitar la distribución rápida de rutinas de software de dominio público para su uso en computación científica.
  5. ^ ab "Bibliotecas de rendimiento de Arm". Arm . 2020 . Consultado el 16 de diciembre de 2020 .
  6. ^ "Biblioteca BLAS".
  7. ^ ab "Opciones sin costo para Intel Math Kernel Library (MKL), manténgase a sí mismo, sin regalías". Intel . 2015 . Consultado el 31 de agosto de 2015 .
  8. ^ "Biblioteca Intel Math Kernel (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). "Entonces, ¿qué hay de nuevo en Mathematica 5.0?" (PDF) . MSOR Connections . 3 (4). The Higher Education Academy. Archivado desde el 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). "La matriz NumPy: una estructura para el cálculo numérico 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 (agregar filas), CADD (agregar columnas), SRMA (escalar una fila y agregarla a otra fila) y RINT (intercambio de filas). Estas rutinas aparentemente no se usaban como operaciones del núcleo para implementar otras rutinas como la inversión de matrices. Véase IBM (1970), System/360 Scientific Subroutine Package, Version III, Programmer's Manual (5th ed.), International Business Machines, GH20-0205-4.
  15. ^ Foro BLAST 2001, pág. 1.
  16. ^ Lawson y otros 1979.
  17. ^ Foro BLAST 2001, págs. 1–2.
  18. ^ Foro BLAST 2001, pág. 2.
  19. ^ ab 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.
  20. ^ ab Dongarra, Jack J.; Du Croz, Jeremy; Hammarling, Sven; Hanson, Richard J. (1988). "Un conjunto extendido de subprogramas básicos de álgebra lineal de FORTRAN". ACM Trans. Math. Softw . 14 : 1–17. CiteSeerX 10.1.1.17.5421 . doi :10.1145/42288.42291. S2CID  3579623. 
  21. ^ Goto, Kazushige ; van de Geijn, Robert A. (2008). "Implementación de alto rendimiento del BLAS de nivel 3" (PDF) . ACM Transactions on Mathematical Software . 35 (1): 1–14. doi :10.1145/1377603.1377607. S2CID  14722514.
  22. ^ Golub, Gene H. ; Van Loan, Charles F. (1996), Cálculos matriciales (3.ª ed.), Johns Hopkins, ISBN 978-0-8018-5414-9
  23. ^ 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) [1]
  24. ^ 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.
  25. ^ "Guías y código de muestra". developer.apple.com . Consultado el 7 de julio de 2017 .
  26. ^ "Guías y código de muestra". developer.apple.com . Consultado el 7 de julio de 2017 .
  27. ^ "Software de álgebra lineal ajustado automáticamente (ATLAS)". math-atlas.sourceforge.net . Consultado el 7 de julio de 2017 .
  28. ^ blis: Marco de software de creación de instancias de bibliotecas similar a BLAS, flame, 2017-06-30 , consultado el 2017-07-07
  29. ^ Repositorio de GitHub de BLIS, 15 de octubre de 2021
  30. ^ "Biblioteca C++ AMP BLAS". CodePlex . Archivado desde el original el 8 de julio de 2017 . Consultado el 7 de julio de 2017 .
  31. ^ "cuBLAS". NVIDIA Developer . 2013-07-29 . Consultado el 2017-07-07 .
  32. ^ "NVBLAS". NVIDIA Developer . 2018-05-15 . Consultado el 2018-05-15 .[ enlace muerto permanente ]
  33. ^ clBLAS: una biblioteca de software que contiene funciones BLAS escritas en OpenCL, clMathLibraries, 2017-07-03 , consultado el 2017-07-07
  34. ^ Nugteren, Cedric (5 de julio de 2017), CLBlast: OpenCL BLAS sintonizado , consultado el 7 de julio de 2017
  35. ^ IBM Knowledge Centre: Biblioteca de subrutinas científicas y de ingeniería
  36. ^ Milfeld, Kent. "GotoBLAS2". Centro de Computación Avanzada de Texas . Archivado desde el original el 23 de marzo de 2020. Consultado el 17 de marzo de 2024 .
  37. ^ "Biblioteca Intel Math Kernel (Intel MKL) | Intel Software". software.intel.com . Consultado el 7 de julio de 2017 .
  38. ^ Mathkeisan, NEC. "MathKeisan". www.mathkeisan.com . Consultado el 7 de julio de 2017 .
  39. ^ "BLAS (Subprogramas de Álgebra Lineal Básica)" www.netlib.org . Consultado el 7 de julio de 2017 .
  40. ^ "BLAS (Subprogramas de Álgebra Lineal Básica)" www.netlib.org . Consultado el 7 de julio de 2017 .
  41. ^ "OpenBLAS: una biblioteca BLAS optimizada". www.openblas.net . Consultado el 7 de julio de 2017 .
  42. ^ "PDLIB/SX: Solución empresarial | NEC". Archivado desde el original el 22 de febrero de 2007. Consultado el 20 de mayo de 2007 .
  43. ^ "rocBLAS". rocmdocs.amd.com . Consultado el 21 de mayo de 2021 .
  44. ^ "Biblioteca científica SGI - SCSL: página de inicio". Archivado desde el original el 13 de mayo de 2007. Consultado el 20 de mayo de 2007 .
  45. ^ "Oracle Developer Studio". www.oracle.com . Consultado el 7 de julio de 2017 .
  46. ^ "Boost Basic Linear Algebra - 1.60.0". www.boost.org . Consultado el 7 de julio de 2017 .
  47. ^ "Armadillo: biblioteca de álgebra lineal de C++". arma.sourceforge.net . Consultado el 7 de julio de 2017 .
  48. ^ "Bibliotecas numéricas y de sistemas Dlang". GitHub .
  49. ^ "Elemental: álgebra lineal directa dispersa y densa con memoria distribuida y optimización — Elemental". libelemental.org . Consultado el 7 de julio de 2017 .
  50. ^ "HASEM". SourceForge . 2015-08-17 . Consultado el 2017-07-07 .
  51. ^ Duff, Iain S.; Heroux, Michael A.; Pozo, Roldan (2002). "Una descripción general de los subprogramas básicos de álgebra lineal dispersa: el nuevo estándar del foro técnico de BLAS". ACM Transactions on Mathematical Software . 28 (2): 239–267. doi :10.1145/567806.567810. S2CID  9411006.
  52. ^ 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 .
  53. ^ Herb, Konstantin; Welter, Pol (2022). "Integración en tiempo paralelo utilizando rutinas Batched BLAS (Basic Linear Algebra Subprograms)". Computer Physics Communications . 270 : 108181. arXiv : 2108.07126 . doi :10.1016/j.cpc.2021.108181. S2CID  237091802.

Lectura adicional

Nuevo BLAS

Enlaces externos