| rsblib/rsb.hpp(3) | Library Functions Manual | rsblib/rsb.hpp(3) |
NAME¶
librsb - rsblib/rsb.hpp - Classes RsbLib and RsbMatrix provide native C++ access to librsb.
DESCRIPTION¶
SYNOPSIS¶
Data Structures¶
class RsbLib
Class initializing/finalizing librsb state.
Macros¶
#define RSBP_DEPRECATED
Internal attribute specifier for deprecated member functions. #define
RSBP_NODISCARD
Internal attribute. #define RSBP_WANT_REV 0
If this is defined to 1 before including <rsb.hpp>,
rsb_err_t is the default return type. Otherwise the default is void.
#define RSBP_RVT template <typename Err_t=void>
No return type. #define RSBP_MSLVRV 10201
Minimal supported librsb version (value of RSB_LIBRSB_VER, defined via
rsb.h).
Enumerations¶
enum RsbSym { IsGen = RSB_FLAG_NOFLAGS, IsHer
= RSB_FLAG_HERMITIAN, IsSym = RSB_FLAG_SYMMETRIC, IsTri =
RSB_FLAG_TRIANGULAR }
enum RsbOp { Sum }
Functions¶
RsbMatrix (rsb_coo_idx_t nrA, rsb_coo_idx_t
ncA, const RsbSym sym=IsGen)
RsbMatrix (rsb_coo_idx_t nrA, const rsb_coo_idx_t *RP,
const rsb_coo_idx_t *JA, const NT *VA, const RsbSym
sym=IsGen)
RsbMatrix (const rsb_coo_idx_t *IA, const rsb_coo_idx_t
*JA, const NT *VA, rsb_nnz_idx_t nnzA, const rsb_flags_t
flagsA=RSB_FLAG_NOFLAGS)
RsbMatrix (const rsb_char_t *filename, const RsbSym
sym=IsGen)
RsbMatrix (const RsbMatrix &A_Rsb, bool do_trans=false,
rsb_flags_t flagsA=RSB_FLAG_NOFLAGS)
RsbMatrix (RsbMatrix &&other)
~RsbMatrix (void)
RSBP_RVT RSBP_DEPRECATED Err_t _add (rsb_coo_idx_t
i, rsb_coo_idx_t j, NT val)
RSBP_RVT Err_t close (void)
RSBP_RVT RSBP_DEPRECATED Err_t _close (void)
RSBP_RVT RSBP_DEPRECATED Err_t spmv (rsb_trans_t
transA, const NT *alphap, const NT *Xp, rsb_coo_idx_t incX, const NT
*betap, NT *Yp, rsb_coo_idx_t incY) const
RSBP_RVT Err_t spmv (rsb_trans_t transA, const NT alpha,
const NT *Xp, rsb_coo_idx_t incX, const NT beta, NT *Yp,
rsb_coo_idx_t incY) const
RSBP_RVT Err_t spmv (rsb_trans_t transA, const NT alpha,
const NT *Xp, const NT beta, NT *Yp) const
RSBP_RVT Err_t spmv (NT *y, const NT *x, bool do_trans=false)
const
RSBP_RVT RSBP_DEPRECATED Err_t spmm (rsb_trans_t
transA, const NT *alphap, rsb_coo_idx_t nrhs, rsb_flags_t
order, const NT *Bp, rsb_nnz_idx_t ldB, const NT *betap, NT *Cp,
rsb_nnz_idx_t ldC) const
RSBP_RVT Err_t spmm (rsb_trans_t transA, const NT alpha,
rsb_coo_idx_t nrhs, rsb_flags_t order, const NT *Bp,
rsb_nnz_idx_t ldB, const NT beta, NT *Cp, rsb_nnz_idx_t ldC)
const
RSBP_RVT Err_t spmm (rsb_trans_t transA, const NT alpha,
rsb_coo_idx_t nrhs, rsb_flags_t order, const NT *Bp, const NT
beta, NT *Cp) const
RSBP_RVT RSBP_DEPRECATED Err_t spsm (rsb_trans_t
transT, const NT *alphap, rsb_coo_idx_t nrhs, rsb_flags_t
order, const NT *betap, const NT *Bp, rsb_nnz_idx_t ldB, NT *Cp,
rsb_nnz_idx_t ldC) const
RSBP_RVT Err_t spsm (rsb_trans_t transT, const NT alpha,
rsb_coo_idx_t nrhs, rsb_flags_t order, const NT beta, const NT
*Bp, rsb_nnz_idx_t ldB, NT *Cp, rsb_nnz_idx_t ldC) const
RSBP_RVT Err_t spsm (rsb_trans_t transT, const NT alpha,
rsb_coo_idx_t nrhs, const NT *Bp, NT *Cp) const
RSBP_RVT Err_t spsm (NT *y, const NT *x, rsb_coo_idx_t
nrhs, bool do_trans=false) const
RSBP_RVT Err_t spsm (NT *y, rsb_coo_idx_t nrhs, bool
do_trans=false) const
RSBP_RVT RSBP_DEPRECATED Err_t spsv (rsb_trans_t
transT, const NT *alphap, const NT *Xp, rsb_coo_idx_t incX, NT *Yp,
rsb_coo_idx_t incY) const
RSBP_RVT Err_t spsv (rsb_trans_t transT, const NT alpha,
const NT *Xp, NT *Yp) const
RSBP_RVT Err_t spsv (NT *y, const NT *x, bool do_trans=false)
const
RSBP_RVT Err_t spsv (NT *y, bool do_trans=false) const
size_t get_info_size_t (enum rsb_mif_t mif) const
rsb_flags_t get_info_rsb_flags_t (enum rsb_mif_t mif)
const
rsb_blk_idx_t get_info_blk_t (enum rsb_mif_t mif) const
rsb_nnz_idx_t get_info_nnz_t (enum rsb_mif_t mif) const
rsb_flags_t get_flags_t (enum rsb_mif_t mif) const
rsb_type_t get_type_t (enum rsb_mif_t mif) const
rsb_coo_idx_t get_info_coo_t (enum rsb_mif_t mif) const
size_t _get_index_storage_bytes (void) const
size_t _get_storage_bytes (void) const
rsb_nnz_idx_t nnz (void) const
rsb_blk_idx_t blocks (void) const
rsb_coo_idx_t rows (void) const
rsb_coo_idx_t cols (void) const
RSBP_RVT Err_t get_vals (NT *VA, const rsb_coo_idx_t *IA,
const rsb_coo_idx_t *JA, rsb_nnz_idx_t nnz,
rsb_flags_t flags) const
NT get_val (const rsb_coo_idx_t i, const rsb_coo_idx_t j,
rsb_flags_t flags=RSB_FLAG_NOFLAGS) const
RSBP_RVT Err_t set_val (const NT val, const rsb_coo_idx_t
i, const rsb_coo_idx_t j, rsb_flags_t
flags=RSB_FLAG_NOFLAGS)
RSBP_RVT Err_t set_vals (const NT *VA, const
rsb_coo_idx_t *IA, const rsb_coo_idx_t *JA,
rsb_nnz_idx_t nnz, rsb_flags_t flags)
RSBP_RVT Err_t get_vec (NT *Dp, enum rsb_extff_t flags)
const
RSBP_RVT RSBP_DEPRECATED Err_t get_coo
(rsb_trans_t transA, NT *VA, rsb_coo_idx_t *IA,
rsb_coo_idx_t *JA, rsb_flags_t flags) const
RSBP_RVT RSBP_DEPRECATED Err_t get_csr
(rsb_trans_t transA, NT *VA, rsb_coo_idx_t *RP,
rsb_coo_idx_t *JA, rsb_flags_t flags) const
RSBP_RVT RSBP_DEPRECATED Err_t get_rows_sparse
(rsb_trans_t transA, const NT *alphap, NT *VA, rsb_coo_idx_t
*IA, rsb_coo_idx_t *JA, rsb_coo_idx_t frA,
rsb_coo_idx_t lrA, rsb_nnz_idx_t *rnzp, rsb_flags_t
flags) const
RSBP_RVT Err_t upd_vals (enum rsb_elopf_t elop_flags,
const NT &omega)
RSBP_RVT Err_t upd_vals (enum rsb_elopf_t elop_flags,
const NT *omegap)
RSBP_RVT Err_t get_nrm (NT *Np, enum rsb_extff_t flags)
const
rsb_type_t rsbtype (void) const
rsb_flags_t rsbflags (void) const
rsb_string_t get_info_str (const char *key) const
RSBP_RVT Err_t get_info (enum rsb_mif_t miflags, void
*minfop) const
rsb_string_t _info (void) const
RSBP_RVT RSBP_DEPRECATED Err_t tune_spsm_threads
(rsb_real_t *sfp=RSBP_NULL, rsb_int_t *tnp=RSBP_NULL,
rsb_int_t maxr=0, rsb_time_t maxt=0, rsb_trans_t
transA=RSB_TRANSPOSITION_N, const NT *alphap=RSBP_NULL,
rsb_coo_idx_t nrhs=1, rsb_flags_t
order=RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT *Bp=RSBP_NULL,
rsb_nnz_idx_t ldB=0, const NT *betap=RSBP_NULL, NT *Cp=RSBP_NULL,
rsb_nnz_idx_t ldC=0) const
RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm_threads
(rsb_real_t *sfp=RSBP_NULL, rsb_int_t *tnp=RSBP_NULL,
rsb_int_t maxr=0, rsb_time_t maxt=0, rsb_trans_t
transA=RSB_TRANSPOSITION_N, const NT *alphap=RSBP_NULL,
rsb_coo_idx_t nrhs=1, rsb_flags_t
order=RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT *Bp=RSBP_NULL,
rsb_nnz_idx_t ldB=0, const NT *betap=RSBP_NULL, NT *Cp=RSBP_NULL,
rsb_nnz_idx_t ldC=0) const
RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm
(rsb_real_t *sfp, rsb_int_t *tnp, rsb_int_t maxr,
rsb_time_t maxt, rsb_trans_t transA, const NT *alphap,
rsb_coo_idx_t nrhs, rsb_flags_t order, const NT *Bp,
rsb_nnz_idx_t ldB, const NT *betap, NT *Cp, rsb_nnz_idx_t ldC)
RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm
(rsb_real_t *sfp, rsb_int_t *tnp, rsb_int_t maxr,
rsb_time_t maxt, rsb_trans_t transA, const NT alpha,
rsb_coo_idx_t nrhs, rsb_flags_t order, const NT *Bp,
rsb_nnz_idx_t ldB, const NT beta, NT *Cp, rsb_nnz_idx_t ldC)
RSBP_RVT Err_t tune_spmm (rsb_real_t &sf,
rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs,
rsb_flags_t order, const NT *Bp, const NT beta, NT *Cp)
RSBP_RVT RSBP_DEPRECATED Err_t tune_spsm
(rsb_real_t *sfp, rsb_int_t *tnp, rsb_int_t maxr,
rsb_time_t maxt, rsb_trans_t transA, const NT *alphap,
rsb_coo_idx_t nrhs, rsb_flags_t order, const NT *Bp,
rsb_nnz_idx_t ldB, const NT *betap, NT *Cp, rsb_nnz_idx_t ldC)
RSBP_RVT Err_t file_save (const rsb_char_t
*filename=RSBP_NULL) const
RsbMatrix & operator= (const RsbMatrix &A_Rsb)
bool _is_complex (void) const
bool operator== (const RsbMatrix &B_Rsb) const
bool operator!= (const RsbMatrix &B_Rsb) const
NT normOne (void) const
NT normInf (void) const
RSBP_RVT Err_t rndr (const rsb_char_t
*filename=RSBP_NULL, rsb_coo_idx_t pmWidth=512, rsb_coo_idx_t
pmHeight=512, rsb_marf_t rflags=RSB_MARF_EPS) const
RsbMatrix (rsb_trans_t transA, NT alpha, const RsbMatrix
&mtxA, rsb_trans_t transB, NT beta, const RsbMatrix &mtxB,
RsbOp op)
RsbMatrix (const RsbMatrix &mtxA, const RsbMatrix &mtxB,
RsbOp op)
Variables¶
rsb_mtx_t * mtxAp_ {RSBP_NULL}
Represent a sparse matrix in RSB format by means of librsb.
Detailed Description¶
Classes RsbLib and RsbMatrix provide native C++ access to librsb.
Most of the librsb functionality is available via C++ classes
RsbLib and RsbMatrix.
These classes are defined in header file <rsb.hpp>, which
wraps functionality of librsb's C interface
<rsb.h>.
The RsbMatrix class can manipulate sparse matrices of several numerical types
(same ones as librsb: matrix_supported_numerical_types_section).
Before using RsbMatrix, the library must be initialized by having a
RsbLib object.
To avoid problems when including this header, don't define preprocessor macros
prefixed with RSB_ or RSBP_.
For a quick start, check out examples/example.cpp or other examples in its directory.
/* Copyright (C) 2020-2022 Michele Martone This file is part of librsb. librsb is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. librsb is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with librsb; see the file COPYING. If not, see <https://www.gnu.org/licenses/>. */ /*!
\ingroup rsb::examples
@author Michele Martone
@brief C++ example based on <rsb.hpp> using RsbMatrix.spmm().
Using a a sblib does not differ conceptually much
Errors caught by ced and trigger an exception instead.
Memory management of matrices and the library state itself follow the usual C++ RAII rules:
the \c mtx object is freed first via RsbMatrix's destructor;
then s finalized via RsbLib()'s destructor .
\include example.cpp
*/ #include <rsb.hpp> using namespace rsb; #ifdef RSB_NUMERICAL_TYPE_DOUBLE #if RSBP_WANT_CPP20 #include <vector> #include <array> /* If your compiler is C++20 compatible, the std::span-based interface is available like: */ auto main() -> int {
RsbLib rsblib;
const rsb_nnz_idx_t nnzA { 7 };
const rsb_coo_idx_t nrA { 6 }, ncA { 6 }, nrhs { 2 };
const rsb_coo_idx_t IA [nnzA] {0,1,2,3,4,5,1};
std::array<rsb_coo_idx_t,7> JA {0,1,2,3,4,5,0};
std::vector<double> VA {1,1,1,1,1,1,2}, X(nrhs*ncA,1);
std::vector<double> Y(nrhs*nrA,0);
const double alpha {2}, beta {1};
rsb_int_t tn {0};
rsb_real_t sf {0}; // speedup factor (tune_spmm output)
const rsb_flags_t order {RSB_FLAG_WANT_COLUMN_MAJOR_ORDER};
// IA,JA,VA are respectively from a C array, std::vector, std::array;
// here using the C++20's std::span interface:
RsbMatrix<double> mtx(IA,JA,VA);
mtx.file_save(); // rsb_file_mtx_save
mtx.tune_spmm(sf,RSB_TRANSPOSITION_N,alpha,nrhs,order,X,beta,Y); // rsb_tune_spmm
mtx.spmm(RSB_TRANSPOSITION_N,alpha,nrhs,order,X,beta,Y); // rsb_spmv } #else #include <vector> /* The pointer-based interface is available as well: */ auto main() -> int {
RsbLib rsblib;
const rsb_nnz_idx_t nnzA { 7 };
const rsb_coo_idx_t nrA { 6 }, ncA { 6 }, nrhs { 1 };
const std::vector<rsb_coo_idx_t> IA {0,1,2,3,4,5,1}, JA {0,1,2,3,4,5,0};
const std::vector<double> VA {1,1,1,1,1,1,2}, X(ncA,1);
std::vector<double> Y(nrA,0);
const double alpha {2}, beta {1};
rsb_int_t tn {0};
rsb_real_t sf {0}; // speedup factor (tune_spmm output)
RsbMatrix<double> mtx(IA.data(),JA.data(),VA.data(),nnzA);
mtx.file_save(nullptr); // rsb_file_mtx_save
mtx.tune_spmm(&sf,&tn,0,0.0,RSB_TRANSPOSITION_N,alpha,nrhs,RSB_FLAG_WANT_COLUMN_MAJOR_ORDER,X.data(),ncA,beta,Y.data(),nrA); // rsb_tune_spmm
mtx.spmv(RSB_TRANSPOSITION_N, alpha, X.data(), beta, Y.data()); // rsb_spmv } #endif #else auto main() { } #endif
Author
Macro Definition Documentation¶
#define RSBP_DEPRECATED¶
Internal attribute specifier for deprecated member functions. Header-only (rsb.hpp) wrapper classes for librsb (http://librsb.sf.net).
#define RSBP_MSLVRV 10201¶
Minimal supported librsb version (value of RSB_LIBRSB_VER, defined via rsb.h).
#define RSBP_NODISCARD¶
Internal attribute.
#define RSBP_RVT template <typename Err_t=void>¶
No return type.
#define RSBP_WANT_REV 0¶
If this is defined to 1 before including <rsb.hpp>, rsb_err_t is the default return type. Otherwise the default is void.
Enumeration Type Documentation¶
enum RsbOp¶
Enumerator
enum RsbSym¶
Matrix structure: either general, symmetric, hermitian, or triangular (also see rsb_flags_t).
Enumerator
Function Documentation¶
RSBP_RVT RSBP_DEPRECATED Err_t _add (rsb_coo_idx_t i, rsb_coo_idx_t j, NT val)¶
Deprecated
RSBP_RVT RSBP_DEPRECATED Err_t _close (void )¶
Deprecated
size_t _get_index_storage_bytes (void ) const¶
\rl_name_to_be_changed
size_t _get_storage_bytes (void ) const¶
\rl_name_to_be_changed
rsb_string_t _info (void ) const¶
\rl_name_to_be_changed
bool _is_complex (void ) const¶
\rl_name_to_be_changed
rsb_blk_idx_t blocks (void ) const¶
RSBP_RVT Err_t close (void )¶
Terminate assembly of a previously started and populated matrix.
Shall be called once.
sblib_asm_snip
See also
rsb_coo_idx_t cols (void ) const¶
sblib_dims_snip
RSBP_RVT Err_t file_save (const rsb_char_t * filename = RSBP_NULL) const¶
sblib_based_on_pred rsb_file_mtx_save() sblib_based_on_post
Example snip from examples/misc.cpp:
mtx.file_save(); // print to stdout
RSBP_RVT RSBP_DEPRECATED Err_t get_coo (rsb_trans_t transA, NT * VA, rsb_coo_idx_t * IA, rsb_coo_idx_t * JA, rsb_flags_t flags) const¶
sblib_based_on_pred rsb_mtx_get_coo() sblib_based_on_post
\rl_no_transa \rl_deprecate
RSBP_RVT RSBP_DEPRECATED Err_t get_csr (rsb_trans_t transA, NT * VA, rsb_coo_idx_t * RP, rsb_coo_idx_t * JA, rsb_flags_t flags) const¶
sblib_based_on_pred rsb_mtx_get_csr() sblib_based_on_post
\rl_no_transa \rl_deprecate
rsb_flags_t get_flags_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
RSBP_RVT Err_t get_info (enum rsb_mif_t miflags, void * minfop) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
rsb_blk_idx_t get_info_blk_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
rsb_coo_idx_t get_info_coo_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
rsb_nnz_idx_t get_info_nnz_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
rsb_flags_t get_info_rsb_flags_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
size_t get_info_size_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
rsb_string_t get_info_str (const char * key) const¶
sblib_based_on_pred rsb_mtx_get_info_str() sblib_based_on_post
RSBP_RVT Err_t get_nrm (NT * Np, enum rsb_extff_t flags) const¶
sblib_based_on_pred rsb_mtx_get_nrm() sblib_based_on_post
RSBP_RVT RSBP_DEPRECATED Err_t get_rows_sparse (rsb_trans_t transA, const NT * alphap, NT * VA, rsb_coo_idx_t * IA, rsb_coo_idx_t * JA, rsb_coo_idx_t frA, rsb_coo_idx_t lrA, rsb_nnz_idx_t * rnzp, rsb_flags_t flags) const¶
sblib_based_on_pred rsb_mtx_get_rows_sparse() sblib_based_on_post
\rl_deprecate
rsb_type_t get_type_t (enum rsb_mif_t mif) const¶
sblib_based_on_pred rsb_mtx_get_info() sblib_based_on_post
NT get_val (const rsb_coo_idx_t i, const rsb_coo_idx_t j, rsb_flags_t flags = RSB_FLAG_NOFLAGS) const¶
sblib_based_on_pred rsb_mtx_get_vals() sblib_based_on_post
RSBP_RVT Err_t get_vals (NT * VA, const rsb_coo_idx_t * IA, const rsb_coo_idx_t * JA, rsb_nnz_idx_t nnz, rsb_flags_t flags) const¶
sblib_based_on_pred rsb_mtx_get_vals() sblib_based_on_post
RSBP_RVT Err_t get_vec (NT * Dp, enum rsb_extff_t flags) const¶
sblib_based_on_pred rsb_mtx_get_vec() sblib_based_on_post
rsb_nnz_idx_t nnz (void ) const¶
NT normInf (void ) const¶
NT normOne (void ) const¶
bool operator!= (const RsbMatrix & B_Rsb) const¶
sblib__cmp_snip
See also
RsbMatrix & operator= (const RsbMatrix & A_Rsb)¶
A copy constructor. Will clone the input matrix contents.
bool operator== (const RsbMatrix & B_Rsb) const¶
Deep comparison: compare if the two matrices have same dimensions, nonzeroes count, nonzeroes pattern and value. Meant for very sporadic use. Inefficient: it can involve matrices copying.
sblib__cmp_snip
RSBP_RVT Err_t rndr (const rsb_char_t * filename = RSBP_NULL, rsb_coo_idx_t pmWidth = 512, rsb_coo_idx_t pmHeight = 512, rsb_marf_t rflags = RSB_MARF_EPS) const¶
sblib_based_on_pred rsb_mtx_rndr() sblib_based_on_post
sblib_rndr_snip
rsb_coo_idx_t rows (void ) const¶
sblib_dims_snip
rsb_flags_t rsbflags (void ) const¶
RsbMatrix (const rsb_char_t * filename, const RsbSym sym = IsGen)¶
Assemble a sparse matrix given filename input.
sblib_based_on_pred rsb_file_mtx_load() sblib_based_on_post
RsbMatrix (const rsb_coo_idx_t * IA, const rsb_coo_idx_t * JA, const NT * VA, rsb_nnz_idx_t nnzA, const rsb_flags_t flagsA = RSB_FLAG_NOFLAGS)¶
Assemble a sparse matrix given COO input.
sblib__asm_coo_snip
sblib_based_on_pred rsb_mtx_alloc_from_coo_const()
sblib_based_on_post
RsbMatrix (const RsbMatrix & A_Rsb, bool do_trans = false, rsb_flags_t flagsA = RSB_FLAG_NOFLAGS)¶
Copy a sparse matrix given example input.
Can either clone it, or transpose it or change flags (structure) in the
process.
RsbMatrix (const RsbMatrix & mtxA, const RsbMatrix & mtxB, RsbOp op)¶
RsbMatrix (rsb_coo_idx_t nrA, const rsb_coo_idx_t * RP, const rsb_coo_idx_t * JA, const NT * VA, const RsbSym sym = IsGen)¶
Assemble a sparse matrix given CSR input.
sblib_based_on_pred rsb_mtx_alloc_from_csr_const()
sblib_based_on_post
RsbMatrix (rsb_coo_idx_t nrA, rsb_coo_idx_t ncA, const RsbSym sym = IsGen)¶
Begin assembling a sparse matrix of given dimensions and type.
Then you can use set_val() or set_vals() repeatedly to populate
the matrix.
After populating the matrix, use close() to terminate its assembly.
sblib_asm_snip
sblib_based_on_pred rsb_mtx_alloc_from_coo_begin() sblib_based_on_post
RsbMatrix (rsb_trans_t transA, NT alpha, const RsbMatrix & mtxA, rsb_trans_t transB, NT beta, const RsbMatrix & mtxB, RsbOp op)¶
sblib_based_on_pred rsb_sppsp() sblib_based_on_post
RsbMatrix (RsbMatrix && other)¶
Move constructor.
The moved matrix object will be invalid afterwards.
Example snip from examples/misc.cpp:
assert( mtx1.nnz() == nnzA );
RsbMatrix<double> mtx3 { std::move(mtx1) };
assert( mtx3.nnz() == nnzA );
rsb_type_t rsbtype (void ) const¶
sblib_rsbtype_snip
RSBP_RVT Err_t set_val (const NT val, const rsb_coo_idx_t i, const rsb_coo_idx_t j, rsb_flags_t flags = RSB_FLAG_NOFLAGS)¶
sblib_based_on_pred rsb_mtx_set_vals() sblib_based_on_post
sblib_asm_snip
See also
RSBP_RVT Err_t set_vals (const NT * VA, const rsb_coo_idx_t * IA, const rsb_coo_idx_t * JA, rsb_nnz_idx_t nnz, rsb_flags_t flags)¶
Add a single entry during the assembly of a matrix created empty.
Use close() to terminate matrix assembly.
sblib_asm_snip
sblib_based_on_pred rsb_mtx_set_vals() sblib_based_on_post
RSBP_RVT RSBP_DEPRECATED Err_t spmm (rsb_trans_t transA, const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB, const NT * betap, NT * Cp, rsb_nnz_idx_t ldC) const¶
sblib_based_on_pred rsb_spmm() sblib_based_on_post \rl_deprecate
RSBP_RVT Err_t spmm (rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, const NT beta, NT * Cp) const¶
sblib_based_on_prei rsb_spmm() sblib_based_on_post
RSBP_RVT Err_t spmm (rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB, const NT beta, NT * Cp, rsb_nnz_idx_t ldC) const¶
sblib_spmm_snip
sblib_based_on_prei rsb_spmm() sblib_based_on_post
RSBP_RVT Err_t spmv (NT * y, const NT * x, bool do_trans = false) const¶
sblib_based_on_prei rsb_spmv() sblib_based_on_post
sblib_spmv_snip
RSBP_RVT RSBP_DEPRECATED Err_t spmv (rsb_trans_t transA, const NT * alphap, const NT * Xp, rsb_coo_idx_t incX, const NT * betap, NT * Yp, rsb_coo_idx_t incY) const¶
sblib_based_on_pred rsb_spmv() sblib_based_on_post \rl_deprecate
RSBP_RVT Err_t spmv (rsb_trans_t transA, const NT alpha, const NT * Xp, const NT beta, NT * Yp) const¶
sblib_based_on_prei rsb_spmv() sblib_based_on_post
sblib_spmv_snip
RSBP_RVT Err_t spmv (rsb_trans_t transA, const NT alpha, const NT * Xp, rsb_coo_idx_t incX, const NT beta, NT * Yp, rsb_coo_idx_t incY) const¶
sblib_based_on_prei rsb_spmv() sblib_based_on_post
sblib_spmv_snip
RSBP_RVT Err_t spsm (NT * y, const NT * x, rsb_coo_idx_t nrhs, bool do_trans = false) const¶
sblib_based_on_prei rsb_spsm() sblib_based_on_post
RSBP_RVT Err_t spsm (NT * y, rsb_coo_idx_t nrhs, bool do_trans = false) const¶
sblib_based_on_prei rsb_spsm() sblib_based_on_post
RSBP_RVT RSBP_DEPRECATED Err_t spsm (rsb_trans_t transT, const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * betap, const NT * Bp, rsb_nnz_idx_t ldB, NT * Cp, rsb_nnz_idx_t ldC) const¶
sblib_based_on_pred rsb_spsm() sblib_based_on_post \rl_deprecate
RSBP_RVT Err_t spsm (rsb_trans_t transT, const NT alpha, rsb_coo_idx_t nrhs, const NT * Bp, NT * Cp) const¶
sblib_based_on_prei rsb_spsm() sblib_based_on_post
RSBP_RVT Err_t spsm (rsb_trans_t transT, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT beta, const NT * Bp, rsb_nnz_idx_t ldB, NT * Cp, rsb_nnz_idx_t ldC) const¶
sblib_based_on_prei rsb_spsm() sblib_based_on_post
RSBP_RVT Err_t spsv (NT * y, bool do_trans = false) const¶
sblib_based_on_prei rsb_spsv() sblib_based_on_post
RSBP_RVT Err_t spsv (NT * y, const NT * x, bool do_trans = false) const¶
sblib_based_on_prei rsb_spsv() sblib_based_on_post
RSBP_RVT RSBP_DEPRECATED Err_t spsv (rsb_trans_t transT, const NT * alphap, const NT * Xp, rsb_coo_idx_t incX, NT * Yp, rsb_coo_idx_t incY) const¶
sblib_based_on_pred rsb_spsv() sblib_based_on_post \rl_deprecate
RSBP_RVT Err_t spsv (rsb_trans_t transT, const NT alpha, const NT * Xp, NT * Yp) const¶
sblib_based_on_prei rsb_spsv() sblib_based_on_post
RSBP_RVT Err_t tune_spmm (rsb_real_t & sf, rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, const NT beta, NT * Cp)¶
sblib_based_on_prei rsb_tune_spmm() sblib_based_on_post
sblib_autotune_snip
RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm (rsb_real_t * sfp, rsb_int_t * tnp, rsb_int_t maxr, rsb_time_t maxt, rsb_trans_t transA, const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB, const NT * betap, NT * Cp, rsb_nnz_idx_t ldC)¶
sblib_based_on_pred rsb_tune_spmm() sblib_based_on_post
sblib_autotune_snip
\rl_deprecate
RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm (rsb_real_t * sfp, rsb_int_t * tnp, rsb_int_t maxr, rsb_time_t maxt, rsb_trans_t transA, const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB, const NT beta, NT * Cp, rsb_nnz_idx_t ldC)¶
sblib_based_on_prei rsb_tune_spmm() sblib_based_on_post
sblib_autotune_snip
RSBP_RVT RSBP_DEPRECATED Err_t tune_spmm_threads (rsb_real_t * sfp = RSBP_NULL, rsb_int_t * tnp = RSBP_NULL, rsb_int_t maxr = 0, rsb_time_t maxt = 0, rsb_trans_t transA = RSB_TRANSPOSITION_N, const NT * alphap = RSBP_NULL, rsb_coo_idx_t nrhs = 1, rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT * Bp = RSBP_NULL, rsb_nnz_idx_t ldB = 0, const NT * betap = RSBP_NULL, NT * Cp = RSBP_NULL, rsb_nnz_idx_t ldC = 0) const¶
sblib_based_on_pred rsb_tune_spmm() sblib_based_on_post
sblib_autotune_snip \rl_deprecate
RSBP_RVT RSBP_DEPRECATED Err_t tune_spsm (rsb_real_t * sfp, rsb_int_t * tnp, rsb_int_t maxr, rsb_time_t maxt, rsb_trans_t transA, const NT * alphap, rsb_coo_idx_t nrhs, rsb_flags_t order, const NT * Bp, rsb_nnz_idx_t ldB, const NT * betap, NT * Cp, rsb_nnz_idx_t ldC)¶
sblib_based_on_pred rsb_tune_spsm() sblib_based_on_post
\rl_deprecate
RSBP_RVT RSBP_DEPRECATED Err_t tune_spsm_threads (rsb_real_t * sfp = RSBP_NULL, rsb_int_t * tnp = RSBP_NULL, rsb_int_t maxr = 0, rsb_time_t maxt = 0, rsb_trans_t transA = RSB_TRANSPOSITION_N, const NT * alphap = RSBP_NULL, rsb_coo_idx_t nrhs = 1, rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, const NT * Bp = RSBP_NULL, rsb_nnz_idx_t ldB = 0, const NT * betap = RSBP_NULL, NT * Cp = RSBP_NULL, rsb_nnz_idx_t ldC = 0) const¶
sblib_based_on_pred rsb_tune_spsm() sblib_based_on_post
\rl_deprecate
RSBP_RVT Err_t upd_vals (enum rsb_elopf_t elop_flags, const NT & omega)¶
sblib_based_on_pred rsb_mtx_upd_vals() sblib_based_on_post
sblib_upd_vals_snip
RSBP_RVT Err_t upd_vals (enum rsb_elopf_t elop_flags, const NT * omegap)¶
sblib_based_on_pred rsb_mtx_upd_vals() sblib_based_on_post
\rl_deprecate
~RsbMatrix (void )¶
Destructor.
Frees matrix object memory.
sblib_based_on_pred rsb_mtx_free() sblib_based_on_post
Variable Documentation¶
rsb_mtx_t* mtxAp_ {RSBP_NULL}¶
Represent a sparse matrix in RSB format by means of librsb. Manage
construction, destruction, and std::move of numerical matrices.
Most of the member functions here translate directly to a single function call
to librsb (rsb.h), and pass the parameters as they are, so the
error checking is done by librsb.
While most of librsb C functions use void* pointers instead of numerical data,
RsbMatrix is templated by a type parameter. This introduces type safety at
compile time.
Users of member functions can choose among several overloads. So in additional to the more direct overloads passing e.g. $ alpha $ and $ beta $ by reference, here a user can pass them by value.
Parameters
Note
Functions declared to return Err_t can be specialized in rsb_err_t so not to throw exceptions, but to return an error code instead.
Exceptions thrown by member functions (not constructors) can be deactivated at build time by defining RSBP_NOTHROW before including <rsb.hpp>.
One may turn on return error value as default at build time by defining RSBP_WANT_REV=1 .
Warning
Todo
Shall all $ alpha $ and $ beta $ be passed by values only? This is natural and fits C++. But rsb_tune_spmm() / rsb_tune_spsm() have more parameters with a nullptr-like `default' value: how to deal with them in RsbMatrix::tune_spmm() / RsbMatrix::tune_spsm() without introducing too many special cases ?
Similarly for the consistency of RsbMatrix::get_flags_t(), RsbMatrix::get_type_t(), RsbMatrix::get_info_coo_t(), and similar: shall they throw an exception if given a flag not matching the return type ?
Or maybe keeping only RsbMatrix::get_info(), with per-type reference overloads ?
Furthermore: if working under C++20, shall sblib avoid pointer-based interfaces completely (using std::span only)? */ template<RSBP_Scalar_t NT> class RsbMatrix { private:
/* RSBP_TESTING_ONLY
Author¶
librsb was written by Michele Martone; this documentation has been generated by Doxygen.
SEE ALSO¶
rsb-examples rsb-spblas.h rsb.h rsb.hpp
| Version 1.3.0.3 | librsb |