stringtranslate.com

Subprogramas básicos de álgebra lineal

Los subprogramas de álgebra lineal básica ( BLAS ) son una especificación que prescribe un conjunto de rutinas de bajo nivel para realizar operaciones comunes de álgebra lineal , como suma de vectores , multiplicación escalar , productos escalares , combinaciones lineales y multiplicación de matrices . Son las rutinas estándar de bajo nivel de facto para 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 están optimizadas para la velocidad en una máquina en particular, por lo que su uso puede aportar importantes beneficios de rendimiento. Las implementaciones de BLAS aprovecharán el hardware especial 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 netlib . [2] Esta biblioteca Fortran se conoce como implementación de referencia (a veces denominada de manera confusa 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 utiliza.

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 . Ejemplos de ramas de biblioteca BLAS basadas en CPU incluyen: OpenBLAS , BLIS (software de creación de instancias de biblioteca similar a BLAS) , Arm Performance Libraries, [5] ATLAS e Intel Math Kernel Library (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 proveedores gratuita [7] y patentada [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 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, se volvieron útiles las sofisticadas bibliotecas de subrutinas. Estas bibliotecas contendrían subrutinas para operaciones matemáticas comunes de alto nivel, como búsqueda de raíces, inversión de matrices y resolución de sistemas de ecuaciones. El idioma 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 volver a implementar algoritmos conocidos. Las rutinas de la biblioteca también serían mejores que las implementaciones promedio; Los algoritmos matriciales, por ejemplo, podrían utilizar pivotamiento completo para obtener una mayor 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 triangular superior. Las bibliotecas incluirían versiones de precisión simple y doble de algunos algoritmos.

Inicialmente, estas subrutinas utilizaban bucles codificados para sus operaciones de bajo nivel. Por ejemplo, si una subrutina necesitara 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 "kernel", no relacionadas con los sistemas operativos ). [14] Entre 1973 y 1977, se identificaron varias de estas operaciones del núcleo. [15] Estas operaciones del núcleo se convirtieron en subrutinas definidas que las bibliotecas matemáticas podían llamar. Las llamadas al kernel 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 kernel podría optimizarse para mayor velocidad. En 1979 se publicó una especificación para estas operaciones del núcleo que utilizan escalares y vectores , las subrutinas de álgebra lineal básica (BLAS) de nivel 1. [16] BLAS se utilizó 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 modificaciones. LINPACK podría usar una versión genérica de BLAS. Para ganar rendimiento, diferentes máquinas pueden 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 podría utilizar las rápidas operaciones vectoriales de la máquina. (Si bien los procesadores vectoriales finalmente cayeron en desgracia, 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 podrían explotarse. En consecuencia, BLAS se amplió de 1984 a 1986 con operaciones de núcleo de nivel 2 que se referían a operaciones de matriz vectorial. La jerarquía de la memoria también fue reconocida 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 localizadas las manipulaciones de matrices permite un mejor uso de la memoria caché. En 1987 y 1988, se identificaron los BLAS de nivel 3 para realizar operaciones matriz-matriz. El BLAS de nivel 3 fomentó los algoritmos de partición en bloques. La biblioteca LAPACK utiliza BLAS de nivel 3. [17]

El BLAS original se refería únicamente a vectores y matrices densamente almacenados. Se han abordado otras extensiones de BLAS, como por ejemplo para matrices dispersas. [18]

Funcionalidad

La funcionalidad BLAS se categoriza 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 las complejidades de los algoritmos; Las operaciones BLAS de nivel 1 suelen tomar tiempo lineal , O ( n ) , las operaciones de nivel 2, tiempo cuadrático y las operaciones de nivel 3, tiempo cúbico. [19] 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 sólo operaciones vectoriales en matrices estriadas : 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 generalizada de matriz - vector (gemv ):

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

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

Nivel 3

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

donde A y B pueden opcionalmente transponerse o conjugarse hermitianamente dentro de la rutina, y las tres matrices pueden superarse. La multiplicación de matrices ordinaria AB se puede realizar 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 de matrices-vectores, gemmes un objetivo principal de optimización para BLAS. implementadores. 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 poder acumular los resultados de bloques anteriores. Tenga en cuenta 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 el caché del sistema. [22] 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 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 sumas de matrices reales en lugar de las convencionales cuatro multiplicaciones de matrices reales y dos sumas de matrices reales", un algoritmo similar al algoritmo de Strassen descrito por primera vez por Peter Ungar. [24]

Implementaciones

Acelerar
El framework de Apple para macOS e iOS , que incluye versiones optimizadas de BLAS y LAPACK . [25] [26]
Bibliotecas de rendimiento de Arm
Bibliotecas de rendimiento Arm, compatibles con procesadores Arm basados ​​en AArch64 de 64 bits , 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]
BLIS
Marco de software de creación de instancias de biblioteca tipo BLAS para una creación rápida de instancias. 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]
cuBLAS
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 de otras bibliotecas BLAS. [32]
clBLAS
Una implementación OpenCL de BLAS de AMD. Parte de las bibliotecas informáticas de AMD. [33]
clBLAST
Una implementación OpenCL optimizada de la mayoría de las API de BLAS. [34]
BLAS propio
Una biblioteca Fortran 77 y C BLAS implementada sobre la biblioteca Eigen con licencia MPL , compatible con arquitecturas x86 , x86-64 , ARM (NEON) y PowerPC .
ESL
Biblioteca de subrutinas científicas y de ingeniería de IBM , que admite la arquitectura PowerPC bajo AIX y Linux . [35]
Ir a BLAS
Implementación de BLAS con licencia BSD de Kazushige Goto , optimizada en particular para Intel Nehalem / Atom , VIA Nanoprocessor , AMD Opteron . [36]
Biblioteca científica GNU
Implementación multiplataforma de muchas rutinas numéricas. Contiene una interfaz CBLAS.
HPMLIB
Biblioteca Math de HP compatible con arquitectura IA-64 , PA-RISC , x86 y Opteron bajo HP-UX y Linux .
Intel MKL
La biblioteca Intel Math Kernel , compatible con x86 de 32 y 64 bits, disponible de forma gratuita en Intel . [7] Incluye optimizaciones para CPU Intel Pentium , Core e Intel Xeon e Intel Xeon Phi ; soporte para Linux , Windows y macOS . [37]
MatemáticasKeisan
Biblioteca matemática de NEC , compatible con la arquitectura NEC SX en SUPER-UX e Itanium en Linux [38]
Netlib BLAS
La implementación de referencia oficial en Netlib , escrita en Fortran 77 . [39]
Netlib CBLAS
Interfaz C de referencia al BLAS. También es posible (y popular) llamar al Fortran BLAS desde C. [40]
AbiertoBLAS
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]
rocBLAS
Implementación que se ejecuta en GPU AMD vía ROCm . [43]
SCSL
La biblioteca de software de computación científica de SGI contiene implementaciones BLAS y LAPACK para las estaciones de trabajo Irix de SGI . [44]
Biblioteca de rendimiento de Sun
BLAS y LAPACK optimizados para arquitecturas SPARC , Core y AMD64 en Solaris 8, 9 y 10, así como Linux. [45]
uBLAS
Una biblioteca de clases de plantilla genérica de C++ 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 funciones avanzadas de C++. [46]

Bibliotecas que utilizan BLAS

Armadillo
Armadillo es una biblioteca de álgebra lineal de 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á patrocinado por NICTA (en Australia) y tiene una licencia gratuita. [47]
LAPACK
LAPACK es una biblioteca de álgebra lineal de nivel superior construida sobre BLAS. Al igual que BLAS, existe una implementación de referencia, pero 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 CBLAS. [48]

Bibliotecas similares (no compatibles con BLAS)

Elemental
Elemental es un software de código abierto para optimización y álgebra lineal directa densa y dispersa con memoria distribuida . [49]
HASEM
es una biblioteca de plantillas de C++, capaz de resolver ecuaciones lineales y calcular valores propios. Tiene licencia bajo Licencia BSD. [50]
LAMA
La Biblioteca para aplicaciones matemáticas aceleradas (LAMA) es una biblioteca de plantillas de C++ para escribir solucionadores numéricos dirigidos 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 Matrix Template Library es una biblioteca de plantillas genérica de C++ que proporciona una funcionalidad BLAS escasa y densa. MTL4 establece una interfaz intuitiva (similar a MATLAB ) y 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 ; en 2002 finalmente se estandarizó un pequeño conjunto de rutinas de kernel de matriz dispersa .

BLAS por lotes

Las funciones tradicionales de BLAS también se han portado a arquitecturas que admiten grandes cantidades de paralelismo, como las GPU . En este caso, las funciones BLAS tradicionales suelen proporcionar un buen rendimiento para matrices grandes. Sin embargo, cuando se calculan, por ejemplo, productos matriz-matriz de muchas matrices pequeñas utilizando 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 como ejemplo la rutina GEMM anterior, 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 escalonado donde todas las matrices siguen concatenadas 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.

Ver también

Referencias

  1. ^ ab * Lawson, CL; Hanson, RJ; Kincaid, D.; Krogh, Pie (1979). "Subprogramas básicos de álgebra lineal para uso de FORTRAN". Transmisión ACM. Matemáticas. Software . 5 (3): 308–323. doi :10.1145/355841.355847. hdl : 2060/19780018835 . S2CID  6585321. Algoritmo 539.
  2. ^ "Foro Técnico 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 las implementaciones del dominio público BLAS (Subprogramas de álgebra lineal básica) y LAPACK (PAQUETE de álgebra lineal), que han sido desarrollados por grupos de personas como el Prof. Jack Dongarra, Universidad de Tennessee, EE.UU. y todo publicado 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 informática científica" (PDF) . netlib.org . Consultado el 13 de febrero de 2016 . El repositorio de software Netlib se creó 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". Brazo . 2020 . Consultado el 16 de diciembre de 2020 .
  6. ^ "Biblioteca BLAS".
  7. ^ ab "Opciones sin costo para Intel Math Kernel Library (MKL), manténgase usted 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) . Conexiones MSOR . 3 (4). La Academia de Educación Superior. Archivado desde el original (PDF) el 29 de octubre de 2013.
  11. ^ Cleve Moler (2000). "MATLAB incorpora LAPACK". Trabajos de matemáticas . Consultado el 26 de octubre de 2013 .
  12. ^ Stefan van der Walt; S. Chris Colbert y Gaël Varoquaux (2011). "La matriz NumPy: una estructura para el cálculo numérico eficiente". Computación en Ciencias e Ingeniería . 13 (2): 22–30. arXiv : 1102.1523 . Código Bib : 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 Computación en Simulación . 54 (4–5): 227–241. arXiv : cs/0004004 . Código Bib : 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 fila y agregar a otra fila) y RINT (intercambio de filas). Aparentemente, estas rutinas no se utilizaron como operaciones del núcleo para implementar otras rutinas como la inversión de matrices. Consulte IBM (1970), Paquete de subrutina científica System/360, Versión III, Manual del programador (5ª ed.), International Business Machines, GH20-0205-4.
  15. ^ Foro BLAST 2001, pag. 1.
  16. ^ Lawson y col. 1979.
  17. ^ Foro BLAST 2001, págs. 1-2.
  18. ^ Foro BLAST 2001, pag. 2.
  19. ^ ab Dongarra, Jack J.; Du Croz, Jeremy; Hammarling, Sven; Duff, Iain S. (1990). "Un conjunto de subprogramas de álgebra lineal básica de nivel 3". Transacciones ACM sobre software matemático . 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 ampliado de subprogramas de álgebra lineal básica de FORTRAN". Transmisión ACM. Matemáticas. Software . 14 : 1–17. CiteSeerX 10.1.1.17.5421 . doi :10.1145/42288.42291. S2CID  3579623. 
  21. ^ Ir a, Kazushige ; van de Geijn, Robert A. (2008). "Implementación de alto rendimiento del BLAS nivel 3" (PDF) . Transacciones ACM sobre software matemático . 35 (1): 1–14. doi :10.1145/1377603.1377607. S2CID  14722514.
  22. ^ Golub, gen H .; Van Loan, Charles F. (1996), Computaciones matriciales (3.ª ed.), Johns Hopkins, ISBN 978-0-8018-5414-9
  23. ^ Ir a, Kazushige ; van de Geijn, Robert A. (2008). "Anatomía de la multiplicación de matrices de alto rendimiento". Transacciones ACM sobre software matemático . 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, campo 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 de 3 my 4 m". Transacciones ACM sobre software matemático . 44 (1): 1–36. doi :10.1145/3086466. S2CID  25580883.
  25. ^ "Guías y código de muestra". desarrollador.apple.com . Consultado el 7 de julio de 2017 .
  26. ^ "Guías y código de muestra". desarrollador.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 biblioteca similar a BLAS, flame, 30 de junio de 2017 , consultado el 7 de julio de 2017
  29. ^ Repositorio BLIS GitHub, 15 de octubre de 2021
  30. ^ "Biblioteca C ++ AMP BLAS". CódigoPlex . Archivado desde el original el 8 de julio de 2017 . Consultado el 7 de julio de 2017 .
  31. ^ "cuBLAS". Desarrollador NVIDIA . 29 de julio de 2013 . Consultado el 7 de julio de 2017 .
  32. ^ "NVBLAS". Desarrollador NVIDIA . 2018-05-15 . Consultado el 15 de mayo de 2018 .[ enlace muerto permanente ]
  33. ^ clBLAS: una biblioteca de software que contiene funciones BLAS escritas en OpenCL, clMathLibraries, 2017-07-03 , consultado el 7 de julio de 2017
  34. ^ Nugteren, Cedric (5 de julio de 2017), CLBlast: OpenCL BLAS sintonizado , consultado el 7 de julio de 2017
  35. ^ IBM Knowledge Center: biblioteca de subrutinas científicas y de ingeniería
  36. ^ Milfeld, Kent. "Ir a BLAS2". 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) | Software Intel". software.intel.com . Consultado el 7 de julio de 2017 .
  38. ^ Mathkeisan, NEC. "MatemáticasKeisan". 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. ^ "SGI - Biblioteca científica SCSL: página de inicio". Archivado desde el original el 13 de mayo de 2007 . Consultado el 20 de mayo de 2007 .
  45. ^ "Estudio de desarrollador de Oracle". www.oracle.com . Consultado el 7 de julio de 2017 .
  46. ^ "Impulsar el álgebra lineal básica - 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 de sistemas y numéricas de Dlang". GitHub .
  49. ^ "Elemental: optimización y álgebra lineal directa densa y escasa con memoria distribuida - Elemental". liberemental.org . Consultado el 7 de julio de 2017 .
  50. ^ "HASEM". FuenteForge . 2015-08-17 . Consultado el 7 de julio de 2017 .
  51. ^ Duff, Iain S.; Heroux, Michael A.; Pozo, Roldán (2002). "Una descripción general de los subprogramas dispersos de álgebra lineal básica: el nuevo estándar del foro técnico BLAS". Transacciones ACM sobre software matemático . 28 (2): 239–267. doi :10.1145/567806.567810. S2CID  9411006.
  52. ^ Dongarra, Jack; Hammarling, Sven; Higham, Nicolás 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 Ciencias de la Computación . 108 : 495–504. doi : 10.1016/j.procs.2017.05.138 . hdl : 2117/106913 .
  53. ^ Hierba, Konstantin; Welter, Pol (2022). "Integración en tiempo paralelo mediante rutinas BLAS (Subprogramas de álgebra lineal básica) por lotes". Comunicaciones de Física Informática . 270 : 108181. arXiv : 2108.07126 . doi :10.1016/j.cpc.2021.108181. S2CID  237091802.

Otras lecturas

Nuevo BLAS

enlaces externos