BLAS (Basic Linear Algebra Subprograms) is a specification that prescribes a set of low-level routines for performing common linear algebra operations such as vectoraddition, scalar multiplication, dot products, linear combinations, and matrix multiplication. They are the de facto standard low-level routines for linear algebra libraries; the routines have bindings for both C and Fortran. Although the BLAS specification is general, BLAS implementations are often optimized for speed on a particular machine, so using them can bring substantial performance benefits. BLAS implementations will take advantage of special floating point hardware such as vector registers or SIMD instructions.
It originated as a Fortran library in 1979
[1] and its interface was standardized by the BLAS Technical (BLAST) Forum, whose latest BLAS report can be found on the
Netlib website. This Fortran library is known as the
reference implementation (sometimes confusingly referred to as
the BLAS library) and is not optimized for speed.
Most libraries that offer linear algebra routines conform to the BLAS interface, allowing library users to develop programs that are agnostic of the BLAS library being used. Examples of such libraries include:
AMD Core Math Library (ACML),
ATLAS,
Intel Math Kernel Library (MKL), and
OpenBLAS. ACML is no longer supported.
[2] MKL is a freeware
[3] and proprietary
[4] vendor library optimized for x86 and x86-64 with a performance emphasis on
Intel processors.
[5] OpenBLAS is an open-source library that is hand-optimized for many of the popular architectures. ATLAS is a portable library that automatically optimizes itself for an arbitrary architecture. The
LINPACK benchmarks rely heavily on the BLAS routine
gemm
for its performance measurements.
https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms