batmat 0.0.14
Batched linear algebra routines
Loading...
Searching...
No Matches
gemm-diag.hpp File Reference
#include <batmat/kib.hpp>
#include <batmat/linalg/copy.hpp>
#include <batmat/linalg/flops.hpp>
#include <batmat/linalg/micro-kernels/gemm-diag.hpp>
#include <batmat/linalg/shift.hpp>
#include <batmat/linalg/simdify.hpp>
#include <batmat/linalg/triangular.hpp>
#include <batmat/linalg/uview.hpp>
#include <batmat/loop.hpp>
#include <batmat/matrix/storage.hpp>
#include <guanaqo/trace.hpp>
#include <optional>

Go to the source code of this file.

Multiplication of batches of matrices with diagonal scaling

template<simdifiable VA, simdifiable VB, simdifiable VD, simdifiable Vd, detail::gemm_diag::track_zeros_opt... Opts>
void batmat::linalg::gemm_diag (VA &&A, VB &&B, VD &&D, Vd &&d, Opts... opts)
 D = A diag(d) B.
template<simdifiable VA, simdifiable VB, simdifiable VC, simdifiable VD, simdifiable Vd, detail::gemm_diag::track_zeros_opt... Opts>
void batmat::linalg::gemm_diag_add (VA &&A, VB &&B, VC &&C, VD &&D, Vd &&d, Opts... opts)
 D = C + A diag(d) B.
template<simdifiable VA, simdifiable VB, simdifiable VD, simdifiable Vd, detail::gemm_diag::track_zeros_opt... Opts>
void batmat::linalg::gemm_diag_add (VA &&A, VB &&B, VD &&D, Vd &&d, Opts... opts)
 D += A diag(d) B.
template<MatrixStructure SC, simdifiable VA, simdifiable VC, simdifiable VD, simdifiable Vd, detail::gemm_diag::track_zeros_opt... Opts>
void batmat::linalg::syrk_diag_add (VA &&A, Structured< VC, SC > C, Structured< VD, SC > D, Vd &&d, Opts... opts)
 D = C + A diag(d) Aᵀ with C, D symmetric.
template<MatrixStructure SC, simdifiable VA, simdifiable VD, simdifiable Vd, detail::gemm_diag::track_zeros_opt... Opts>
void batmat::linalg::syrk_diag_add (VA &&A, Structured< VD, SC > D, Vd &&d, Opts... opts)
 D += A diag(d) Aᵀ with D symmetric.

Classes

struct  batmat::linalg::track_zeros_t< Z >

Namespaces

namespace  batmat
namespace  batmat::linalg
namespace  batmat::linalg::detail
namespace  batmat::linalg::detail::gemm_diag

Concepts

concept  batmat::linalg::detail::gemm_diag::track_zeros_opt

Functions

template<class T, class Abi, micro_kernels::gemm_diag::KernelConfig Conf = {}, StorageOrder OA, StorageOrder OB, StorageOrder OC, StorageOrder OD>
void batmat::linalg::detail::gemm_diag::gemm_diag (view< const T, Abi, OA > A, view< const T, Abi, OB > B, std::optional< view< const T, Abi, OC > > C, view< T, Abi, OD > D, view< const T, Abi > d)
template<class... Opts>
constexpr micro_kernels::gemm_diag::KernelConfig batmat::linalg::detail::gemm_diag::apply_options (micro_kernels::gemm_diag::KernelConfig conf, Opts...)

Variables

template<bool Z = true>
constexpr track_zeros_t< Z > batmat::linalg::track_zeros
template<class...>
constexpr std::optional< bool > batmat::linalg::detail::gemm_diag::get_track_zeros = std::nullopt
template<class T, class... Ts>
constexpr std::optional< bool > batmat::linalg::detail::gemm_diag::get_track_zeros< T, Ts... > = get_track_zeros<Ts...>
template<bool Z, class... Ts>
constexpr std::optional< bool > batmat::linalg::detail::gemm_diag::get_track_zeros< track_zeros_t< Z >, Ts... > = Z
template<class>
constexpr bool batmat::linalg::detail::gemm_diag::is_track_zeros_opt = false
template<bool Z>
constexpr bool batmat::linalg::detail::gemm_diag::is_track_zeros_opt< track_zeros_t< Z > > = true