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:272
Represent a sparse matrix in RSB format by means of librsb.
Definition: rsb.hpp:532
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.
#define RSB_TRANSPOSITION_N
N: Non transposed flag, valid for rsb_trans_t typed variables.
Definition: rsb_types.h:138