C++ example based on <rsb.hpp> illustrating use of RsbMatrix.file_save(), and std::span-based versions of RsbMatrix.tune_spmm(), RsbMatrix.spmv().
- Author
- Michele Martone
Using a librsb program via RsbLib does not differ conceptually much librsb.
Errors caught by librsb shall not go unnoticed and trigger an exception instead.
Memory management of matrices and the library state itself follow the usual C++ RAII rules: the mtx object is freed first via RsbMatrix's destructor; then librsb is finalized via RsbLib()'s destructor .
#include <vector>
#include <array>
#if defined(RSBP_WANT_CPP20) && defined(RSB_NUMERICAL_TYPE_DOUBLE)
const std::vector<rsb_coo_idx_t> IA {0,1,2,3,4,5,1};
const std::vector<double> VA {1,1,1,1,1,1,2}, X(ncA,1);
std::array<double,nrA> Y;
const double alpha {2}, beta {1};
mtx.file_save(nullptr);
mtx.tune_spmm(
nullptr,&tn,0,0.0,
RSB_TRANSPOSITION_N,alpha,nrhs,
RSB_FLAG_WANT_COLUMN_MAJOR_ORDER,X,ncA,beta,Y,nrA);
}
#else
#endif
auto main() -> int
Definition assemble.cpp:38
Class initializing/finalizing librsb state.
Definition rsb.hpp:277
signed int rsb_nnz_idx_t
Definition rsb.h:362
signed int rsb_coo_idx_t
Definition rsb.h:349
#define RSB_FLAG_WANT_COLUMN_MAJOR_ORDER
Definition rsb.h:496
signed int rsb_int_t
Definition rsb.h:392
Classes RsbLib and RsbMatrix provide native C++ access to librsb.
RsbMatrix(rsb_coo_idx_t nrA, rsb_coo_idx_t ncA, const RsbSym sym=IsGen)
Definition rsb.hpp:603
#define RSB_TRANSPOSITION_N
N: Non transposed flag, valid for rsb_trans_t typed variables.
Definition rsb_types.h:138