Common mathematical functions | |||||||||||||||||||||||||||||||
Mathematical special functions(C++17) | |||||||||||||||||||||||||||||||
Mathematical constants(C++20) | |||||||||||||||||||||||||||||||
Basic linear algebra algorithms(C++26) | |||||||||||||||||||||||||||||||
Data-parallel types (SIMD)(C++26) | |||||||||||||||||||||||||||||||
Floating-point environment(C++11) | |||||||||||||||||||||||||||||||
Complex numbers | |||||||||||||||||||||||||||||||
Numeric array (valarray ) | |||||||||||||||||||||||||||||||
Pseudo-random number generation | |||||||||||||||||||||||||||||||
Bit manipulation(C++20) | |||||||||||||||||||||||||||||||
Saturation arithmetic(C++26) | |||||||||||||||||||||||||||||||
Factor operations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Interpolations | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
Generic numeric operations | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
C-style checked integer arithmetic | |||||||||||||||||||||||||||||||
|
Basic linear algebra algorithms are based on the dense Basic Linear Algebra Subroutines (BLAS) which corresponds to a subset of theBLAS Standard. These algorithms that access the elements of arrays view those elements throughstd::mdspan representing vector or matrix.
The BLAS algorithms are categorized into three sets of operations calledlevels, which generally correspond to the degree of the polynomial in the complexities of algorithms:
In-place transformations | ||
Defined in header <linalg> | ||
Defined in namespace std::linalg | ||
(C++26) | std::mdspan accessor policy whose reference represents the product of a scaling factor that is fixed and its nestedstd::mdspan accessor's reference (class template)[edit] | |
(C++26) | std::mdspan accessor policy whose reference represents the complex conjugate of its nestedstd::mdspan accessor's reference (class template)[edit] | |
(C++26) | std::mdspan layout mapping policy that swaps the rightmost two indices, extents, and strides of any unique layout mapping policy (class template)[edit] | |
(C++26) | returns a new read-onlystd::mdspan computed by the elementwise product of the scaling factor and the corresponding elements of the givenstd::mdspan (function template)[edit] | |
(C++26) | returns a new read-onlystd::mdspan whose elements are the complex conjugates of the corresponding elements of the givenstd::mdspan (function template)[edit] | |
(C++26) | returns a newstd::mdspan representing the transpose of the input matrix by the givenstd::mdspan (function template)[edit] | |
(C++26) | returns a conjugate transpose view of an object (function template)[edit] | |
BLAS 1 functions | ||
Defined in header <linalg> | ||
Defined in namespace std::linalg | ||
(C++26) | generates plane rotation (function template)[edit] | |
(C++26) | applies plane rotation to vectors (function template)[edit] | |
(C++26) | swaps all corresponding elements of matrix or vector (function template)[edit] | |
(C++26) | overwrites matrix or vector with the result of computing the elementwise multiplication by a scalar (function template)[edit] | |
(C++26) | copies elements of one matrix or vector into another (function template)[edit] | |
(C++26) | adds vectors or matrices elementwise (function template)[edit] | |
(C++26) | returns nonconjugated dot product of two vectors (function template)[edit] | |
(C++26) | returns conjugated dot product of two vectors (function template)[edit] | |
(C++26) | returns scaled sum of squares of the vector elements (function template)[edit] | |
(C++26) | returns Euclidean norm of a vector (function template)[edit] | |
(C++26) | returns sum of absolute values of the vector elements (function template)[edit] | |
(C++26) | returns index of maximum absolute value of vector elements (function template)[edit] | |
(C++26) | returns Frobenius norm of a matrix (function template)[edit] | |
(C++26) | returns one norm of a matrix (function template)[edit] | |
(C++26) | returns infinity norm of a matrix (function template)[edit] | |
BLAS 2 functions | ||
Defined in header <linalg> | ||
Defined in namespace std::linalg | ||
(C++26) | computes matrix-vector product (function template)[edit] | |
computes symmetric matrix-vector product (function template)[edit] | ||
computes Hermitian matrix-vector product (function template)[edit] | ||
computes triangular matrix-vector product (function template)[edit] | ||
solves a triangular linear system (function template)[edit] | ||
(C++26) | performs nonsymmetric nonconjugated rank-1 update of a matrix (function template)[edit] | |
(C++26) | performs nonsymmetric conjugated rank-1 update of a matrix (function template)[edit] | |
performs rank-1 update of a symmetric matrix (function template)[edit] | ||
performs rank-1 update of a Hermitian matrix (function template)[edit] | ||
performs rank-2 update of a symmetric matrix (function template)[edit] | ||
performs rank-2 update of a Hermitian matrix (function template)[edit] | ||
BLAS 3 functions | ||
Defined in header <linalg> | ||
Defined in namespace std::linalg | ||
(C++26) | computes matrix-matrix product (function template)[edit] | |
(C++26) | computes symmetric matrix-matrix product (function template)[edit] | |
(C++26) | computes Hermitian matrix-matrix product (function template)[edit] | |
computes triangular matrix-matrix product (function template)[edit] | ||
performs rank-k update of a symmetric matrix (function template)[edit] | ||
performs rank-k update of a Hermitian matrix (function template)[edit] | ||
performs rank-2k update of a symmetric matrix (function template)[edit] | ||
performs rank-2k update of a Hermitian matrix (function template)[edit] | ||
solves multiple triangular linear systems (function template)[edit] | ||
Helper items | ||
Defined in header <linalg> | ||
Defined in namespace std::linalg | ||
describe the order of elements in anstd::mdspan withlinalg::layout_blas_packed layout (tag)[edit] | ||
specify whether algorithms and other users of a matrix should access the upper triangle or lower triangle of the matrix (tag)[edit] | ||
specify whether algorithms should access diagonal entries of the matrix (tag)[edit] | ||
(C++26) | std::mdspan layout mapping policy that represents a square matrix that stores only the entries in one triangle, in a packed contiguous format (class template)[edit] |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_linalg | 202311L | (C++26) | Basic linear algebra algorithms (BLAS) |
#include <cassert>#include <cstddef>#include <execution>#include <linalg>#include <mdspan>#include <numeric>#include <vector> int main(){std::vector<double> x_vec(42); std::ranges::iota(x_vec,0.0); std::mdspan x(x_vec.data(), x_vec.size()); // x[i] *= 2.0, executed sequentially std::linalg::scale(2.0, x); // x[i] *= 3.0, executed in parallel std::linalg::scale(std::execution::par_unseq,3.0, x); for(std::size_t i{}; i!= x.size();++i)assert(x[i]==6.0*static_cast<double>(i));}
1. | BLAS homepage |
2. | BLAS Technical Forum |