Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Basic Linear Algebra Subprograms
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
{{Ficha de software|nombre=BLAS|logo=<!-- Image name is enough -->|captura=|autor=|desarrollador=|modelo_desarrollo=|licencia=|lanzamiento=|sitio_web={{URL|https://www.netlib.org/blas/}}|última_versión=3.10.0|ultima_version=|fecha_última_versión={{Start date and age|2021|07|29|df=yes}}|sistema operativo=|lenguaje programación=depende de la implementación|plataforma=[[Multiplataforma]]|tamaño=|idiomas=|español=|idioma=|sistema_operativo=|fecha_ultima_version=<!-- {{Start date and age|YYYY|MM|DD|df=yes}} -->|collapsible=}}'''Basic Linear Algebra Subprograms''' ('''BLAS'''), en español ''Subprogramas Básicos de Álgebra Lineal'', es una especificación que define un conjunto de rutinas de bajo nivel para realizar operaciones comunes de [[álgebra lineal]] tales como la suma de vectores, [[multiplicación escalar]], [[producto escalar]], [[Combinación lineal|combinaciones lineales]] y [[multiplicación de matrices]]. Son las rutinas estándar ''[[de facto]]'' de bajo nivel para bibliotecas de álgebra lineal, con [[Binding|bindings]] para [[C (lenguaje de programación)|C]] (interfaz CBLAS) y [[Fortran]] (interfaz BLAS). Aunque la especificación de BLAS es general, las implementaciones particulares están a menudo optimizadas para conseguir mayor aceleración en una máquina o arquitectura particular, de forma que su uso puede conllevar un incremento sustancial del rendimiento. Las implementaciones de BLAS se pueden aprovechar de la existencia de hardware especial de [[punto flotante]], tales como registros vectoriales o instrucciones SIMD. Tuvo origen como biblioteca de Fortran en 1979<ref name="lawson79">{{Cita publicación|título=Basic Linear Algebra Subprograms for FORTRAN usage|url=https://archive.org/details/sim_acm-transactions-on-mathematical-software_1979-09_5_3/page/308|apellidos=Lawson|nombre=C. L.|apellidos2=Hanson|nombre2=R. J.|fecha=1979|publicación=ACM Trans. Math. Softw.|volumen=5|número=3|páginas=308–323|doi=10.1145/355841.355847|id=Algorithm 539|ref=harv|apellidos3=Kincaid|nombre3=D.|apellidos4=Krogh|nombre4=F. T.}}</ref> y su interfaz fue estandarizada por el Foro Técnico BLAS (BLAST), cuyo último informe sobre BLAS se puede encontrar en el sitio web de [[netlib]].<ref>{{Cita web|url=https://netlib.org/blas/blast-forum|título=BLAS Technical Forum|fechaacceso=2017-07-07|sitioweb=netlib.org}}</ref> Esta biblioteca se conoce como la [[implementación de referencia]] y es de [[dominio público]] (a veces se la conoce de manera confusa como ''la'' biblioteca BLAS), aunque no está optimizada en velocidad. 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 independientes de la biblioteca BLAS que se esté utilizando. Ejemplos de bibliotecas BLAS incluyen: [[Biblioteca de matemáticas básicas de AMD|AMD Core Math Library]] (ACML), Arm Performance Libraries,<ref>{{Cita web|url=https://developer.arm.com/tools-and-software/server-and-hpc/compile/arm-compiler-for-linux/arm-performance-libraries|título=Arm Performance Libraries|fechaacceso=2020-06-02|fecha=2020|editorial=[[Arm]]}}</ref> [[Software de álgebra lineal ajustado automáticamente|ATLAS]], [[Biblioteca del núcleo matemático de Intel|Intel Math Kernel Library]] (MKL) y [[OpenBLAS]]. ACML ya no es compatible con su productor.<ref>{{Cita web|url=http://developer.amd.com/tools-and-sdks/archive/amd-core-math-library-acml/|título=ACML – AMD Core Math Library|fechaacceso=2015-08-26|fecha=2013|editorial=[[AMD]]|urlarchivo=https://web.archive.org/web/20150905190558/http://developer.amd.com/tools-and-sdks/archive/amd-core-math-library-acml/|fechaarchivo=2015-09-05}}</ref> ATLAS es una biblioteca portátil que se optimiza automáticamente para una arquitectura arbitraria. MKL es una biblioteca de proveedor de software gratuito<ref name="MKLfree">{{Cita web|url=http://software.intel.com/articles/free_mkl|título=No Cost Options for Intel Math Kernel Library (MKL), Support yourself, Royalty-Free|fechaacceso=2015-08-31|fecha=2015|editorial=[[Intel]]}}</ref> y propietaria<ref name="MKLintel">{{Cita web|url=http://software.intel.com/intel-mkl|título=Intel Math Kernel Library (Intel MKL)|fechaacceso=2015-08-25|fecha=2015|editorial=[[Intel]]}}</ref> optimizada para x86 y x86-64 con un énfasis en el rendimiento de los procesadores [[Intel]].<ref name="optnotice">{{Cita web|url=http://software.intel.com/articles/optimization-notice|título=Optimization Notice|fechaacceso=2013-04-10|año=2012|editorial=[[Intel]]}}</ref> OpenBLAS es una biblioteca de código abierto que está optimizada manualmente para muchas de las arquitecturas populares. Los ''[[Benchmark (informática)|benchmark]]'' de LINPACK se basan en gran medida en la <code>[[Basic Linear Algebra Subprograms|gemm]]</code> rutina BLAS para sus mediciones de rendimiento. Muchas aplicaciones de software numérico utilizan bibliotecas compatibles con BLAS para realizar cálculos de álgebra lineal, como Armadillo, [[LAPACK]], [[LINPACK]], [[GNU Octave]], [[Mathematica]],<ref>{{Cita publicación|url=http://78.158.56.101/archive/msor/headocs/34mathematica5.pdf|título=So what's new in Mathematica 5.0?|apellidos=Douglas Quinney|fecha=2003|publicación=MSOR Connections|editorial=The Higher Education Academy|volumen=3|número=4|urlarchivo=https://web.archive.org/web/20131029204826/http://78.158.56.101/archive/msor/headocs/34mathematica5.pdf|fechaarchivo=2013-10-29}}</ref> [[MATLAB]],<ref>{{Cita web|url=http://www.mathworks.com/company/newsletters/articles/matlab-incorporates-lapack.html|título=MATLAB Incorporates LAPACK|fechaacceso=2013-10-26|autor=Cleve Moler|fecha=2000|editorial=[[MathWorks]]|fechaarchivo=29 de mayo de 2023|urlarchivo=https://web.archive.org/web/20230529115705/https://www.mathworks.com/company/newsletters/articles/matlab-incorporates-lapack.html|deadurl=yes}}</ref> [[NumPy]],<ref name="cise">{{Cita publicación|título=The NumPy array: a structure for efficient numerical computation|apellidos=Stéfan van der Walt|apellidos2=S. Chris Colbert|fecha=2011|publicación=Computing in Science and Engineering|volumen=13|número=2|páginas=22–30|bibcode=2011arXiv1102.1523V|doi=10.1109/MCSE.2011.37|apellidos3=Gaël Varoquaux|arxiv=1102.1523}}</ref> [[R (lenguaje de programación)|R]] y [[Julia (lenguaje de programación)|Julia]]. == Antecedentes == Con el advenimiento 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 búsqueda de raíces, inversión de matrices y resolución de sistemas de ecuaciones. El idioma elegido fue [[Fortran|FORTRAN]]. La biblioteca de programación numérica más destacada fue el [[Paquete de subrutinas científicas|Scientific Subroutine Package]] (SSP) de [[IBM]].<ref>{{Cita publicación|url=https://archive.org/details/sim_mathematics-and-computers-in-simulation_2000-12-15_54_4-5/page/227|título=Mathematical software: past, present, and future|apellidos=Boisvert|nombre=Ronald F.|publicación=Mathematics and Computers in Simulation|volumen=54|número=4–5|páginas=227–241|bibcode=2000cs........4004B|doi=10.1016/S0378-4754(00)00185-3|año=2000|arxiv=cs/0004004}}</ref> 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, pueden 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 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 necesita 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 [[Núcleo (informática)|los sistemas operativos]]).<ref>Even the SSP (which appeared around 1966) had some basic routines such as RADD (add rows), CADD (add columns), SRMA (scale row and add to another row), and RINT (row interchange). These routines apparently were not used as kernel operations to implement other routines such as matrix inversion. See {{Obra citada|título=System/360 Scientific Subroutine Package, Version III, Programmer's Manual|apellidos=IBM|edición=5th|fecha=1970|editorial=International Business Machines|id=GH20-0205-4}}.</ref> Entre 1973 y 1977, se identificaron varias de estas operaciones del núcleo.{{Harvnp|BLAST Forum|2001|p=1}} Estas operaciones del kernel 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 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. Una especificación para estas operaciones del núcleo usando [[Escalar (matemática)|escalares]] y [[Espacio vectorial|vectores]], las subrutinas de álgebra lineal básica de nivel 1 (BLAS), se publicó en 1979.{{Harvnp|Lawson|Hanson|Kincaid|Krogh|1979}} 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 usar en muchas máquinas diferentes sin modificaciones. LINPACK podría usar una versión genérica de BLAS. Para obtener rendimiento, diferentes máquinas pueden usar versiones personalizadas de BLAS. A medida que las arquitecturas informáticas se volvieron más sofisticadas, aparecieron las [[Procesador vectorial|máquinas vectoriales]]. BLAS para una máquina vectorial podría utilizar las operaciones vectoriales rápidas de la máquina.<ref>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.</ref> Otras funciones de la máquina estuvieron disponibles y también podrían explotarse. En consecuencia, BLAS se aumentó de 1984 a 1986 con operaciones de kernel de nivel 2 que se referían a operaciones de matriz de vectores. La jerarquía de la memoria también se reconoció como algo para explotar. Muchas computadoras tienen una [[Caché (informática)|memoria caché]] que es mucho más rápida que la memoria principal; mantener las manipulaciones de la matriz localizadas permite un mejor uso de la caché. En 1987 y 1988, se identificaron BLAS de nivel 3 para realizar operaciones matriz-matriz. El BLAS de nivel 3 fomentó los algoritmos de bloques particionados. La biblioteca [[LAPACK]] utiliza BLAS de nivel 3.{{Harvnp|BLAST Forum|2001|pp=1–2}} El BLAS original se refería solo a vectores y matrices densamente almacenados. Se han abordado otras extensiones de BLAS, como para matrices dispersas.{{Harvnp|BLAST Forum|2001|p=2}} === ATLAS === El Automatically Tuned Linear Algebra Software (ATLAS), en español: software de álgebra lineal sintonizado automáticamente, busca una implementación BLAS con mayor rendimiento. ATLAS define muchas operaciones BLAS en términos de algunas rutinas centrales y luego intenta adaptar automáticamente las rutinas centrales para tener un buen rendimiento. Se realiza una búsqueda para elegir buenos tamaños de bloque. Los tamaños de los bloques pueden depender del tamaño y la arquitectura de la memoria caché de la computadora. También se realizan pruebas para ver si la copia de matrices y vectores mejora el rendimiento. Por ejemplo, puede ser ventajoso copiar argumentos para que estén alineados en la línea de caché para que las rutinas proporcionadas por el usuario puedan utilizar instrucciones [[SIMD]]. == Funcionalidad == La funcionalidad 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 del polinomio en las complejidades de los algoritmos; Las operaciones de BLAS de nivel 1 generalmente toman tiempo lineal, {{Math|''O''(''n'')}}, operaciones de nivel 2 tiempo cuadrático y operaciones de nivel 3 tiempo cúbico.{{R|level3}} 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),<ref name="lawson79"/> que definía solo ''operaciones vectoriales'' en matrices escalonadas : [[Producto escalar|productos]] escalares, [[Norma vectorial|normas vectoriales]], una adición vectorial generalizada de la forma : <math>\boldsymbol{y} \leftarrow \alpha \boldsymbol{x} + \boldsymbol{y}</math> (llamado "axpy") y muchas otras operaciones. === Nivel 2 === Este nivel contiene ''operaciones matriz-vector que'' incluyen, entre otras cosas, una multiplicación matriz-vector generalizada (<code>gemv</code>): : <math>\boldsymbol{y} \leftarrow \alpha \boldsymbol{A} \boldsymbol{x} + \beta \boldsymbol{y}</math> así como un solucionador de {{Math|'''''x'''''}} en la ecuación lineal : <math>\boldsymbol{T} \boldsymbol{x} = \boldsymbol{y}</math> siendo {{Math|'''''T'''''}} triangular. El diseño del BLAS de nivel 2 se inició en 1984 y los resultados se publicaron en 1988. Las subrutinas de nivel 2 están especialmente destinadas a mejorar el rendimiento de los programas que utilizan BLAS en [[Procesador vectorial|procesadores vectoriales]], donde los BLAS de nivel 1 son subóptimos "porque ocultan la naturaleza matricial-vector de las operaciones del compilador".<ref name="dongarra88">{{Cita publicación|título=An extended set of FORTRAN Basic Linear Algebra Subprograms|apellidos=Dongarra|nombre=Jack J.|apellidos2=Du Croz|nombre2=Jeremy|fecha=1988|publicación=ACM Trans. Math. Softw.|volumen=14|páginas=1–17|doi=10.1145/42288.42291|apellidos3=Hammarling|nombre3=Sven|apellidos4=Hanson|nombre4=Richard J.}}</ref> === Nivel 3 === Este nivel, publicado formalmente en 1990,<ref name="level3">{{Cita publicación|título=A set of level 3 basic linear algebra subprograms|url=https://archive.org/details/sim_acm-transactions-on-mathematical-software_1990-03_16_1/page/1|apellidos=Dongarra|nombre=Jack J.|apellidos2=Du Croz|nombre2=Jeremy|fecha=1990|publicación=[[ACM Transactions on Mathematical Software]]|volumen=16|número=1|páginas=1–17|issn=0098-3500|doi=10.1145/77626.79170|apellidos3=Hammarling|nombre3=Sven|apellidos4=Duff|nombre4=Iain S.}}</ref> contiene ''operaciones matriz-matriz'', incluida una " [[Multiplicación de matrices|multiplicación]] general de [[Multiplicación de matrices|matrices]] " (<code>gemm</code>), de la forma : <math>\boldsymbol{C} \leftarrow \alpha \boldsymbol{A} \boldsymbol{B} + \beta \boldsymbol{C}</math> donde {{Math|'''''A'''''}} y {{Math|'''''B'''''}} se pueden [[Matriz transpuesta|transponer]] opcionalmente o [[Operador adjunto|conjugar hermitian]] dentro de la rutina y las tres matrices pueden ser escalonadas. La multiplicación de matrices ordinaria {{Math|'''''A B'''''}} se puede realizar estableciendo {{Math|''α''}} en uno y {{Math|'''''C'''''}} en una matriz de todos ceros del tamaño apropiado. También se incluyen en el Nivel 3 rutinas para resolver : <math>\boldsymbol{B} \leftarrow \alpha \boldsymbol{T}^{-1} \boldsymbol{B}</math> donde {{Math|'''''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 del BLAS de nivel 3, y debido a que existen algoritmos más rápidos más allá de la repetición obvia de la multiplicación de matrices y vectores, <code>gemm</code> es un objetivo principal de optimización para Implementadores BLAS. Por ejemplo, al descomponer uno o ambos de {{Math|'''''A'''''}}, {{Math|'''''B'''''}} en matrices de bloques, <code>gemm</code> se puede implementar de forma recursiva. Esta es una de las motivaciones para incluir el parámetro {{Math|''β''}}, para que se puedan acumular los resultados de los bloques anteriores. Tenga en cuenta que esta descomposición requiere el caso especial {{Math|''β'' {{=}} 1}} que optimizan muchas implementaciones, eliminando así una multiplicación por cada valor de {{Math|'''''C'''''}} Esta descomposición permite una mejor [[Cercanía de referencias|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é de CPU|caché]] del sistema.<ref>{{Obra citada|título=Matrix Computations|apellidos=Golub|nombre=Gene H.|enlaceautor=Gene H. Golub|edición=3rd|fecha=1996|editorial=Johns Hopkins|apellidos2=Van Loan|nombre2=Charles F.|enlaceautor2=Charles F. Van Loan|ISBN=978-0-8018-5414-9}}</ref> 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é de CPU|caché L2]], combinado con una cuidadosa [[Análisis de amortización|amortización]] de la copia a la memoria contigua para reducir las fallas de [[Translation Lookaside Buffer|TLB]], es superior a ATLAS. Una implementación altamente ajustada basada en estas ideas es parte de GotoBLAS, OpenBLAS y BLIS. Una variación común de {{code|gemm}} es {{code|gemm3m}}, que calcula un producto complejo usando "tres multiplicaciones de matrices reales y cinco adiciones de matrices reales en lugar de las cuatro multiplicaciones de matrices reales convencionales y dos adiciones de matrices reales", un algoritmo similar al [[algoritmo de Strassen]] descrito por primera vez por Peter. Ungar.<ref>{{Cita publicación|título=Implementing High-performance Complex Matrix Multiplication via the 3m and 4m Methods|apellidos=Van Zee|nombre=Field G.|apellidos2=Smith|nombre2=Tyler M.|fecha=2017-07-24|publicación=ACM Transactions on Mathematical Software|volumen=44|número=1|páginas=1–36|doi=10.1145/3086466}}</ref> == Implementaciones == ; Accelerate : Marco de [[Apple]] para [[macOS]] e [[iOS]], que incluye versiones optimizadas de [[Basic Linear Algebra Subprograms|BLAS]] y [[LAPACK]].<ref>{{Cita web|url=https://developer.apple.com/library/mac/#releasenotes/Performance/RN-vecLib/|título=Guides and Sample Code|fechaacceso=2017-07-07|sitioweb=developer.apple.com}}</ref><ref>{{Cita web|url=https://developer.apple.com/library/ios/#documentation/Accelerate/Reference/AccelerateFWRef/|título=Guides and Sample Code|fechaacceso=2017-07-07|sitioweb=developer.apple.com}}</ref> ; ACML : La biblioteca AMD Core Math, compatible con las CPU AMD [[AMD Athlon|Athlon]] y [[AMD Opteron|Opteron]] en [[Linux]] y [[Microsoft Windows|Windows]].<ref>{{Cita web|url=http://developer.amd.com/acml.aspx|título=Archived copy|fechaacceso=2005-10-26|urlarchivo=https://web.archive.org/web/20051130022536/http://developer.amd.com/acml.aspx|fechaarchivo=2005-11-30}}</ref> ; C++ AMP BLAS : La biblioteca C++ AMP BLAS es una implementación de [[Software de código abierto|código abierto]] de BLAS para la extensión de lenguaje AMP de Microsoft para Visual C++.<ref>{{Cita web|url=http://ampblas.codeplex.com/|título=C++ AMP BLAS Library|fechaacceso=2017-07-07|sitioweb=CodePlex|idioma=en|fechaarchivo=8 de julio de 2017|urlarchivo=https://web.archive.org/web/20170708151515/http://ampblas.codeplex.com/|deadurl=yes}}</ref> ; ATLAS : Software de álgebra lineal optimizado automáticamente, una implementación de [[Software de código abierto|código abierto]] de las [[Interfaz de programación de aplicaciones|API]] de BLAS para [[C (lenguaje de programación)|C]] y [[Fortran|Fortran 77]].<ref>{{Cita web|url=https://math-atlas.sourceforge.net/|título=Automatically Tuned Linear Algebra Software (ATLAS)|fechaacceso=2017-07-07|sitioweb=math-atlas.sourceforge.net}}</ref> ; BLIS : Marco de software de creación de instancias de bibliotecas similar a BLAS para una rápida creación de instancias. Basado en GotoBLAS.<ref>{{Obra citada|título=blis: BLAS-like Library Instantiation Software Framework|url=https://github.com/flame/blis|fechaacceso=2017-07-07|fecha=2017-06-30|editorial=flame}}</ref> ; cuBLAS : BLAS optimizado para tarjetas GPU basadas en NVIDIA, que requieren pocas llamadas adicionales a la biblioteca.<ref>{{Cita noticia|url=https://developer.nvidia.com/cublas|título=cuBLAS|fecha=2013-07-29|fechaacceso=2017-07-07|idioma=en}}</ref> ; NVBLAS : BLAS optimizado para tarjetas GPU basadas en NVIDIA, que proporciona solo funciones de nivel 3, pero como reemplazo directo directo para otras bibliotecas BLAS.<ref>{{Cita noticia|url=https://docs.nvidia.com/cuda/nvblas/index.htmls|título=NVBLAS|fecha=2018-05-15|fechaacceso=2018-05-15|idioma=en}}</ref> ; clBLAS : Una implementación [[OpenCL]] de BLAS por AMD. Parte de las bibliotecas informáticas de AMD.<ref name="github.com">{{Obra citada|título=clBLAS: a software library containing BLAS functions written in OpenCL|url=https://github.com/clMathLibraries/clBLAS|fechaacceso=2017-07-07|fecha=2017-07-03|editorial=clMathLibraries}}</ref> ; clBLAST : Una implementación [[OpenCL]] ajustada de BLAS.<ref name="https://github.com/CNugteren/CLBlast">{{Obra citada|título=CLBlast: Tuned OpenCL BLAS|apellidos=Nugteren|nombre=Cedric|url=https://github.com/CNugteren/CLBlast|fechaacceso=2017-07-07|fecha=2017-07-05}}</ref> ; Eigen BLAS : Una biblioteca [[Fortran|Fortran 77]] y [[C (lenguaje de programación)|C]] BLAS implementada sobre la biblioteca Eigen con licencia [[Mozilla Public License|MPL]], que admite [[X86|arquitecturas x86]], [[X86-64|x86 64]], [[Arquitectura ARM|ARM (NEON)]] y [[PowerPC]]. ; ESSL : Biblioteca de subrutinas científicas y de ingeniería de [[IBM]], que admite la arquitectura [[PowerPC]] en [[AIX]] y [[Linux]].<ref name="https://www.ibm.com/support/knowledgecenter/en/SSFHY8/essl_welcome.html">{{Obra citada|título=IBM Knowledge Centre: Engineering and Scientific Subroutine Library|url=https://www.ibm.com/support/knowledgecenter/en/SSFHY8/essl_welcome.html}}</ref> ; GotoBLAS : Implementación de BLAS con licencia BSD de Kazushige Goto, ajustada en particular para [[Intel]] [[Intel Nehalem|Nehalem]] / [[Intel Atom|Atom]], [[VIA Technologies|VIA]] [[VIA Nano|Nanoprocessor]], [[Advanced Micro Devices|AMD]] [[AMD Opteron|Opteron]]. ; [[GNU Scientific Library|Biblioteca científica GNU]] : Implementación multiplataforma de muchas rutinas numéricas. Contiene una interfaz CBLAS. ; HP MLIB : Biblioteca matemática de [[Hewlett-Packard|HP]] compatible con [[Arquitectura Intel Itanium|arquitectura IA-64]], [[PA-RISC]], [[x86]] y [[AMD Opteron|Opteron]] en [[HP-UX|HPUX]] y [[Linux]]. ; Intel MKL : [[Intel]] Math Kernel Library, compatible con x86 de 32 y 64 bits, disponible de forma gratuita en [[Intel]].<ref name="MKLfree"/> Incluye optimizaciones para CPU Intel [[Intel Pentium|Pentium]], Core e Intel [[Intel Xeon|Xeon]] e Intel [[Intel MIC|Xeon Phi]] ; soporte para [[Linux]], [[Microsoft Windows|Windows]] y [[macOS]].<ref>{{Cita web|url=http://software.intel.com/en-us/intel-mkl/|título=Intel Math Kernel Library (Intel MKL) {{!}} Intel Software|fechaacceso=2017-07-07|sitioweb=software.intel.com|idioma=en}}</ref> ; MathKeisan : [[NEC Corporation|NEC]] bibliotecas matemáticas, apoyando arquitectura [[NEC SX]] bajo SUPER-UX e [[Intel Itanium|Itanium]] bajo [[Linux]].<ref>{{Cita web|url=http://www.mathkeisan.com/|título=MathKeisan|fechaacceso=2017-07-07|autor=Mathkeisan|nombre=NEC|sitioweb=www.mathkeisan.com|idioma=en}}</ref> ; Netlib BLAS : La implementación de referencia oficial en Netlib, escrita en [[Fortran|Fortran 77]].<ref>{{Cita web|url=https://www.netlib.org/blas/|título=BLAS (Basic Linear Algebra Subprograms)|fechaacceso=2017-07-07|sitioweb=www.netlib.org}}</ref> ; Netlib CBLAS : Interfaz [[C (lenguaje de programación)|C de]] referencia al BLAS. También es posible (y popular) llamar al Fortran BLAS de C.<ref>{{Cita web|url=http://www.netlib.org/blas|título=BLAS (Basic Linear Algebra Subprograms)|fechaacceso=2017-07-07|sitioweb=www.netlib.org}}</ref> ; OpenBLAS : BLAS optimizado basado en GotoBLAS, compatible con procesadores [[x86]], [[x86-64]], [[MIPS (procesador)|MIPS]] y [[Arquitectura ARM|ARM]].<ref>{{Cita web|url=https://www.openblas.net/|título=OpenBLAS : An optimized BLAS library|fechaacceso=2017-07-07|sitioweb=www.openblas.net}}</ref> ; PDLIB / SX : [[NEC Corporation|NEC]] Mathematical Library 's de Dominio Público para el [[NEC SX|NEC SX-4]] del sistema.<ref>{{Cita web|url=http://www.nec.co.jp/hpc/mediator/sxm_e/software/61.html|título=Archived copy|fechaacceso=2007-05-20|urlarchivo=https://web.archive.org/web/20070222154031/http://www.nec.co.jp/hpc/mediator/sxm_e/software/61.html|fechaarchivo=2007-02-22}}</ref> ; SCSL : La biblioteca de software de computación científica de [[Silicon Graphics|SGI]] contiene implementaciones BLAS y LAPACK para las estaciones de trabajo [[IRIX|Irix]] de SGI.<ref>{{Cita web|url=http://www.sgi.com/products/software/scsl.html|título=Archived copy|fechaacceso=2007-05-20|urlarchivo=https://web.archive.org/web/20070513173030/http://www.sgi.com/products/software/scsl.html|fechaarchivo=2007-05-13}}</ref> ; Sun Performance Library : BLAS y LAPACK optimizados para [[Sun SPARC|arquitecturas SPARC]], Core y [[X86-64|AMD64]] en Solaris 8, 9 y 10, así como en Linux.<ref>{{Cita web|url=http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html|título=Oracle Developer Studio|fechaacceso=2017-07-07|sitioweb=www.oracle.com}}</ref> ; uBLAS : Una biblioteca genérica de clases de plantillas de [[C++|C++ que]] proporciona la funcionalidad BLAS. Parte de la [[Bibliotecas Boost|biblioteca de Boost]]. Proporciona enlaces a muchas bibliotecas aceleradas por hardware en una notación unificadora. Además, uBLAS se centra en la corrección de los algoritmos que utilizan funciones avanzadas de C++.<ref>{{Cita web|url=https://www.boost.org/doc/libs/1_60_0/libs/numeric/ublas/doc/index.html|título=Boost Basic Linear Algebra - 1.60.0|fechaacceso=2017-07-07|sitioweb=www.boost.org}}</ref> === Bibliotecas que utilizan BLAS === ; Armadillo : Biblioteca de álgebra lineal C++ que apunta a 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.<ref>{{Cita web|url=https://arma.sourceforge.net/|título=Armadillo: C++ linear algebra library|fechaacceso=2017-07-07|sitioweb=arma.sourceforge.net}}</ref> ; [[LAPACK]] : Biblioteca de álgebra lineal de nivel superior construida sobre BLAS. Como 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 (lenguaje de programación)|D.]] Proporciona subprogramas genéricos de álgebra lineal (GLAS). Puede construirse sobre una implementación CBLAS.<ref>{{Cita web|url=https://github.com/libmir|título=Dlang Numerical and System Libraries|fechaacceso=|autor=|nombre=|fecha=|sitioweb=}}</ref> == Bibliotecas similares (no compatibles con BLAS) == ; Elemental : Elemental es un software de código abierto para optimización y álgebra lineal densa y dispersa en memoria distribuida.<ref>{{Cita web|url=http://libelemental.org/|título=Elemental: distributed-memory dense and sparse-direct linear algebra and optimization — Elemental|fechaacceso=2017-07-07|sitioweb=libelemental.org}}</ref> ; HASEM : Biblioteca de plantillas de C++, que puede resolver ecuaciones lineales y calcular valores propios. Tiene licencia BSD.<ref>{{Cita web|url=https://sourceforge.net/projects/hasem/|título=HASEM|fechaacceso=2017-07-07|sitioweb=SourceForge|idioma=en}}</ref> ; LAMA : La biblioteca para aplicaciones matemáticas aceleradas (LAMA) es una biblioteca de plantillas C++ para escribir solucionadores numéricos dirigidos a varios tipos de hardware (por ejemplo, [[Unidad de procesamiento gráfico|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 : [[Matrix Template Library]] versión 4 es una biblioteca de plantillas [[C++]] genérica que proporciona una funcionalidad BLAS densa y escasa. MTL4 establece una interfaz intuitiva (similar a [[MATLAB]]) y una amplia aplicabilidad gracias a la [[programación genérica]]. == BLAS para matrices dispersas == Se han sugerido varias extensiones de BLAS para manejar [[Matriz dispersa|matrices dispersas]] a lo largo de la historia de la biblioteca; un pequeño conjunto de rutinas de kernel de matriz dispersa se estandarizó finalmente en 2002.<ref>{{Cita publicación|título=An Overview of the Sparse Basic Linear Algebra Subprograms: The New Standard from the BLAS Technical Forum|url=https://archive.org/details/sim_acm-transactions-on-mathematical-software_2002-06_28_2/page/239|apellidos=Duff|nombre=Iain S.|apellidos2=Heroux|nombre2=Michael A.|publicación=ACM Transactions on Mathematical Software|volumen=28|número=2|páginas=239–267|doi=10.1145/567806.567810|apellidos3=Pozo|nombre3=Roldan|año=2002}}</ref> == Véase también == *[[Álgebra lineal numérica]], el tipo de problema que resuelve BLAS * [[LAPACK]] == Referencias == {{Listaref|refs=}} == Otras lecturas == * {{Obra citada|título=Basic Linear Algebra Subprograms Technical (BLAST) Forum Standard|apellidos=BLAST Forum|url=|fecha=2001-08-21|editorial=University of Tennessee|lugar=Knoxville, TN|DOI=}} * {{Obra citada|título=Remark on algorithm 539: Basic Linear Algebra Subprograms for Fortran usage|apellidos=Dodson|nombre=D. S.|pub-periódica=ACM Trans. Math. Softw.|número=4|volumen=8|páginas=403–404|apellidos2=Grimes|nombre2=R. G.|DOI=10.1145/356012.356020|year=1982}} * {{Obra citada|título=Corrigendum: Remark on "Algorithm 539: Basic Linear Algebra Subroutines for FORTRAN usage"|apellidos=Dodson|nombre=D. S.|pub-periódica=ACM Trans. Math. Softw.|volumen=9|página=140|DOI=10.1145/356022.356032|year=1983}} * JJ Dongarra, J. Du Croz, S. Hammarling y RJ Hanson, Algoritmo 656: Un conjunto extendido de Subprogramas de Álgebra Lineal Básica FORTRAN, ACM Trans. Matemáticas. Softw., 14 (1988), págs. 18 – 32. * JJ Dongarra, J. Du Croz, IS Duff y S. Hammarling, Un conjunto de subprogramas de álgebra lineal básica de nivel 3, ACM Trans. Matemáticas. Softw., 16 (1990), págs. 1 – 17. * JJ Dongarra, J. Du Croz, IS Duff y S. Hammarling, Algoritmo 679: Un conjunto de subprogramas de álgebra lineal básica de nivel 3, ACM Trans. Matemáticas. 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. Matemáticas. Softw., 28-2 (2002), págs. – * J. Dongarra, Estándar del Foro Técnico de Subprogramas de Álgebra Lineal Básica, Revista Internacional de Aplicaciones de Alto Rendimiento y Supercomputación, 16 (1) (2002), págs. 1 – 111, y Revista internacional de aplicaciones de alto rendimiento y supercomputación, 16 (2) (2002), págs. – == Enlaces externos == * [https://www.netlib.org/blas/ Página] de [https://www.netlib.org/blas/ inicio de BLAS] en Netlib.org * [https://www.netlib.org/blas/faq.html Preguntas frecuentes de BLAS] * [https://www.netlib.org/lapack/lug/node145.html Guía de referencia rápida de BLAS de la Guía] del usuario de LAPACK * [https://web.archive.org/web/20061009230911/http://history.siam.org/oralhistories/lawson.htm Lawson Oral History] Uno de los autores originales del BLAS analiza su creación en una entrevista de historia oral. Charles L. Lawson Entrevista de historia oral por Thomas Haigh, 6 y 7 de noviembre de 2004, San Clemente, California. Sociedad de Matemáticas Industriales y Aplicadas, Filadelfia, PA. * [https://web.archive.org/web/20061009230904/http://history.siam.org/oralhistories/dongarra.htm Dongarra Oral History] 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 particulares. Jack Dongarra, entrevista de historia oral por Thomas Haigh, 26 de abril de 2005, Universidad de Tennessee, Knoxville TN. Sociedad de Matemáticas Industriales y Aplicadas, Filadelfia, PA * [https://stackoverflow.com/questions/1303182/how-does-blas-get-such-extreme-performance ¿Cómo logra BLAS un rendimiento tan extremo?] Diez multiplicaciones matriciales ingenuas de 1000 × 1000 (10 <sup>10</sup> puntos flotantes multiplicados-suma) toman 15.77 segundos en 2.6 Procesador de GHz; La implementación de BLAS tarda 1,32 segundos. * Una descripción general de los subprogramas de álgebra lineal básica dispersa: el nuevo estándar del Foro técnico de BLAS{{Doi-inline|10.1145/567806.567810}} {{Control de autoridades}} [[Categoría:Software de análisis numérico]] [[Categoría:Álgebra lineal numérica]] [[Categoría:Wikipedia:Páginas con traducciones sin revisar]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Basic Linear Algebra Subprograms
»
Añadir idiomas
Añadir tema