41 SparseMat(
const uword in_row,
const uword in_col,
const uword in_elem = 0)
60 T&
at(
const uword in_row,
const uword in_col)
override {
65 [[nodiscard]]
const T*
memptr()
const override {
throw std::invalid_argument(
"not supported"); }
67 T*
memptr()
override {
throw std::invalid_argument(
"not supported"); }
70 if(
nullptr == in_mat)
return;
71 if(!in_mat->triplet_mat.is_empty())
return this->
scale_accu(scalar, in_mat->triplet_mat);
73 for(
auto I = 0llu; I < in_mat->n_rows; ++I)
74 for(
auto J = 0llu; J < in_mat->n_cols; ++J)
93#ifdef SUANPAN_DISTRIBUTED
96 comm_world.allgather(coo_elem, dist_elem.data());
99 mpl::irequest_pool requests;
101 auto accu_elem = coo_elem;
102 for(
auto comm_n = 0; comm_n <
comm_size; ++comm_n)
104 requests.push(comm_world.ibcast(comm_n, this->triplet_mat.row_mem(), mpl::contiguous_layout<uword>{coo_elem}));
105 requests.push(comm_world.ibcast(comm_n, this->triplet_mat.col_mem(), mpl::contiguous_layout<uword>{coo_elem}));
106 requests.push(comm_world.ibcast(comm_n, this->triplet_mat.val_mem(), mpl::contiguous_layout<T>{coo_elem}));
109 requests.push(comm_world.ibcast(comm_n, this->triplet_mat.row_mem() + accu_elem, mpl::contiguous_layout<uword>{dist_elem[comm_n]}));
110 requests.push(comm_world.ibcast(comm_n, this->triplet_mat.col_mem() + accu_elem, mpl::contiguous_layout<uword>{dist_elem[comm_n]}));
111 requests.push(comm_world.ibcast(comm_n, this->triplet_mat.val_mem() + accu_elem, mpl::contiguous_layout<T>{dist_elem[comm_n]}));
112 accu_elem += dist_elem[comm_n];
A SparseMat class that holds matrices.
Definition SparseMat.hpp:34
void zeros() override
Definition SparseMat.hpp:46
T * memptr() override
Definition SparseMat.hpp:67
T operator()(const uword in_row, const uword in_col) const override
Access element (read-only), returns zero if out-of-bound.
Definition SparseMat.hpp:58
void allreduce() override
Definition SparseMat.hpp:92
Mat< T > operator*(const Mat< T > &in_mat) const override
Definition SparseMat.hpp:85
const T * memptr() const override
Definition SparseMat.hpp:65
SparseMat(const uword in_row, const uword in_col, const uword in_elem=0)
Definition SparseMat.hpp:41
T max() const override
Definition SparseMat.hpp:56
void csc_condense() override
Definition SparseMat.hpp:120
void nullify(const uword idx) override
Definition SparseMat.hpp:51
void scale_accu(const T scalar, const triplet_form< T, uword > &in_mat) override
Definition SparseMat.hpp:78
T & at(const uword in_row, const uword in_col) override
Access element with bound check.
Definition SparseMat.hpp:60
void csr_condense() override
Definition SparseMat.hpp:122
void scale_accu(const T scalar, const shared_ptr< MetaMat< T > > &in_mat) override
Definition SparseMat.hpp:69
int direct_solve(Mat< T > &X, Mat< T > &&B) override
Definition SparseMat.hpp:38
bool is_empty() const override
Definition SparseMat.hpp:44
void operator*=(const T scalar) override
Definition SparseMat.hpp:87
bool approx_equal(T x, T y, int ulp=2)
Definition utility.h:67
constexpr auto comm_rank
Definition suanPan.h:251
constexpr auto comm_size
Definition suanPan.h:252