The manual translation of an expression into code is a task that requires thorough knowledge of both numerical linear algebra and the target computer architecture.
The complexity quickly multiplies when the code is to be portable to different architectures or when the sizes of the operands are unknown at the time of translation.
Over the past several decades, the numerical linear algebra community has invested remarkable effort into identifying and optimising a relatively small set of basic kernels that can be used as building blocks when crafting code to evaluate more complex linear algebra expressions.
The BLAS (Basic Linear Algebra Subprograms) [1]}, [2]}, [3]} and LAPACK (Linear Algebra PACKage) [4]} libraries are two prominent results of this effort.
The numerous alternative implementations of the BLAS and LAPACK collectively provide high performance on a multitude of different computer architectures, ranging from single-core to shared-memory multicore systems, and to accelerators such as GPUs.
