Armadillo: a template-based C++ library for linear algebra
Armadillo: a template-based C++ library for linear algebra
Conrad Sanderson,Ryan R. Curtin
2016 · DOI: 10.21105/JOSS.00026
Journal of Open Source Software · 651 Citations
TLDR
Armadillo is an open source linear algebra library for the C++ language, aiming towards a good balance between speed and ease of use.
Abstract
The C++ language is often used for implementing functionality that is performance
and/or resource sensitive. While the standard C++ library provides many useful algorithms (such as sorting), in its current form it does not provide direct handling oflinear algebra (matrix maths).Armadillo is an open source linear algebra library for the C++ language, aiming towardsa good balance between speed and ease of use. Its high-level Application ProgrammingInterface (API) is deliberately similar to the widely Matlab and Octave languages (Eatonet al. 2015), so that mathematical operations can be expressed in a familiar and naturalmanner. The library is useful for algorithm development directly in C++, or relativelyquick conversion of research code into production environments.Armadillo provides efficient objects for vectors, matrices and cubes (third order tensors),as well as over 200 associated functions for manipulating data stored in the objects. Integer, floating point and complex numbers are supported, as well as dense and sparsestorage formats. Various matrix factorisations are provided through integration with LAPACK (Demmel 1997), or one of its high performance drop-in replacements such as IntelMKL (Intel 2016) or OpenBLAS (Xianyi, Qian, and Saar 2016). It is also possible to useArmadillo in conjunction with NVBLAS to obtain GPU-accelerated matrix multiplication(NVIDIA 2015).Armadillo is used as a base for other open source projects, such as MLPACK, a C++library for machine learning and pattern recognition (Curtin et al. 2013), and RcppArmadillo, a bridge between the R language and C++ in order to speed up computations(Eddelbuettel and Sanderson 2014).Armadillo internally employs an expression evaluator based on template metaprogramming techniques (Abrahams and Gurtovoy 2004), to automatically combineseveral operations in order to increase speed and efficiency. An overview of the internalarchitecture is given in (Sanderson 2010).