49 #ifndef RSB_RSB_HPP_INCLUDED 50 #define RSB_RSB_HPP_INCLUDED 60 #if defined(RSB_LIBRSB_VER) && ( RSB_LIBRSB_VER >= 10300 ) 64 #if __cplusplus >= 201709L 65 #define RSBP_WANT_CPP20 1 76 #define RSBP_WANT_DBG_LWCP 0 77 #ifndef RSBP_WANT_CXX11 78 # if defined(__cplusplus) && (__cplusplus>=201103L) 79 # define RSBP_WANT_CXX11 1 81 # define RSBP_WANT_CXX11 0 90 #define RSBP_ALWAYS_THROW(E) throw(std::exception{}) 92 #define RSBP_THROW(E) throw(std::exception{}) 96 #define RSBP_PERRORA(E) rsb_perror(stdout, E) 97 #define RSBP_PERROR(ERRVAL) if ( (ERRVAL) != RSB_ERR_NO_ERROR ) { rsb_perror(stdout,(ERRVAL));RSBP_THROW(E);} 98 #define RSBP_PERROR_ALWAYS_THROW(ERRVAL) if ( (ERRVAL) != RSB_ERR_NO_ERROR ) { rsb_perror(stdout,(ERRVAL));RSBP_ALWAYS_THROW(E);} 101 #define RSBP_NULL nullptr 102 #define RSBP_CONSTEXPR constexpr 104 #define RSBP_NULL NULL 105 #define RSBP_CONSTEXPR 108 #define RSBP_STOPP(EC) {std::exit(EC);} 109 #define RSBP_CRERR() RSBP_STOPP(-1) 110 #define RSBP_MFRV(RETVAL) RSBP_PERROR(errval_); return (RETVAL); 111 #define RSBP_PLOC(OS) OS << __func__ << " in " <<__FILE__ << ":" << __LINE__ 112 #define RSBP_PFLOC(OS) OS << "at " <<__FILE__ << "@" << __LINE__<< ":" << __func__ 113 #define RSBP_LWCP() if (RSBP_WANT_DBG_LWCP) RSBP_PLOC(RSBP_EOS) << "\n" 114 #define RSBP_EOS std::cout 115 #define RSBP_WANT_VFMC() getenv("RSBP_VERBOSE_CALLS") 116 #define RSBP_VWARNM(MSG) if ( RSBP_WANT_VFMC() ) RSBP_PLOC(RSBP_EOS) << "\n" 117 #define RSBP_ERRORM(MSG) RSBP_PLOC(RSBP_EOS) << ": error: " << MSG << "\n" 119 #define RSBP_EFE(ERRVAL,EXP) ERRVAL = EXP; RSBP_PERROR(ERRVAL); 120 #define RSBP_NFE(EXP) RSBP_EFE(errval_,EXP) 122 #define RSBP_MFR(ERRVAL) return return_output<Err_t>(ERRVAL); 123 #define RSBP_DFE(EXP) RSBP_EFE(errval,EXP) 124 #define RSBP_CFE(EXP) RSBP_EFE(errval,EXP) 126 #define RSBP_MDR() RSBP_MFR(errval_); 127 #define RSBP_STCHK() RSBP_VWARNM(""); if( this->state_ != Valid ) { RSBP_ERRORM("Invalid matrix state (did you initialize it in the proper sequence ?) !\n"); RSBP_ALWAYS_THROW(); } 130 #define RSBP_LFMH() RSBP_STCHK() 131 #define RSBP_CFMH(DC) rsb_err_t errval = RSB_ERR_NO_ERROR; if (DC) { RSBP_STCHK() ;} 132 #define RSBP_CNMH(DC) if (DC) { RSBP_STCHK() ;} 134 #define RSBP_NWMFHO() RSBP_LWCP(); RSBP_LFMH( ) 135 #define RSBP_CWMFHO() RSBP_LWCP(); RSBP_CFMH(1) 136 #define RSBP_CDMFHO() RSBP_LWCP(); RSBP_CFMH(1) 137 #define RSBP_CNMFHO() RSBP_CNMH(1) 138 #define RSBP_KWMFHO() RSBP_LWCP(); RSBP_CFMH(0) 139 #define RSBP_LWMFHO() RSBP_LWCP(); \ 140 rsb_err_t errval = RSB_ERR_NO_ERROR; \ 141 RSBP_VWARNM(""); if( this->state_ != Begin ) { errval = RSB_ERR_BADARGS; RSBP_ERRORM("Invalid matrix state (did you initialize it in the proper sequence ?) !\n"); RSBP_THROW(errval); RSBP_MFR(errval); } 143 #define RSBP_CWMFRE() RSBP_MFR(errval) 145 #define RSBP_CFMO() RSBP_RMCI(); RSBP_VWARNM(""); { 146 #define RSBP_CFMC() } 148 #define RSBP_WANT_IMPLICIT_ORDER 0 // pertains spmm overloads with implicit order 149 #define RSBP_WANT_INLINE_INIT 0 // Putting this to 1 is for debug mode only. 150 #define RSBP_ERRGOTO(ERRVAL,ERRLABEL) { if ( (ERRVAL) != RSB_ERR_NO_ERROR ) { goto ERRLABEL; } }; 151 #define RSBP_CANNOT_HONOUR_CSR(NNZ,ROWS,FLAGSA) ( NNZ < 2*((ROWS)+1) && ! RSB_DO_FLAG_HAS(FLAGSA,RSB_FLAG_DEFAULT_RSB_MATRIX_FLAGS) ) 152 #ifdef RSB_TRANSPOSITION_INVALID 153 #define RSBP_INVALID_TRANS_CHAR RSB_TRANSPOSITION_INVALID 155 #define RSBP_INVALID_TRANS_CHAR '?' 159 #ifndef RSBP_NO_NAMESPACE 163 using rsb_string_t = std::string;
165 #ifdef RSBP_WANT_CPP20 167 concept RSBP_Scalar_t =
168 #ifdef RSB_NUMERICAL_TYPE_FLOAT 169 std::is_same_v<S, float>
171 #ifdef RSB_NUMERICAL_TYPE_LONG_DOUBLE 172 || std::is_same_v<S, long double>
174 #ifdef RSB_NUMERICAL_TYPE_DOUBLE 175 || std::is_same_v<S, double>
177 #ifdef RSB_NUMERICAL_TYPE_FLOAT_COMPLEX 178 || std::is_same_v<S, std::complex<float>>
180 #ifdef RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX 181 || std::is_same_v<S, std::complex<double>>
183 #ifdef RSB_NUMERICAL_TYPE_LONG_DOUBLE_COMPLEX 184 || std::is_same_v<S, std::complex<long double>>
186 #ifdef RSB_NUMERICAL_TYPE_INT 187 || std::is_same_v<S, int>
191 #define RSBP_Scalar_t typename 194 #ifdef RSBP_WANT_CPP20 195 template<
typename out>
197 std::is_same_v<out, void> ||
198 std::is_same_v<out, rsb_err_t>;
200 #define RSBP_Err_t typename 203 #ifdef RSBP_WANT_CPP20 204 template<RSBP_Err_t Err_t>
205 Err_t return_output(rsb_err_t errval) {
206 if constexpr (std::is_same_v<Err_t, void>){
212 template<
typename Err_t>
213 Err_t return_output(rsb_err_t ) {
214 RSBP_PERROR(RSB_ERR_BADARGS);
217 void return_output<void>(rsb_err_t errval) {
221 rsb_err_t return_output<rsb_err_t>(rsb_err_t errval) {
228 #if __cplusplus >= 201709 229 #define RSBP_DEPRECATED [[deprecated]] 231 #define RSBP_DEPRECATED 235 #if __cplusplus >= 201709 236 #define RSBP_NODISCARD [[nodiscard]] 238 #define RSBP_NODISCARD 241 #ifndef RSBP_WANT_REV 243 #define RSBP_WANT_REV 0 248 #define RSBP_RVT template <typename Err_t=rsb_err_t> RSBP_NODISCARD 251 #define RSBP_RVT template <typename Err_t=void> 254 #define RSBP_MSLVRV 10201 272 bool rsb_cpp_initialized_ {
false};
274 void initialize(
struct rsb_initopts * iop = RSBP_NULL)
276 if( ! rsb_cpp_initialized_ )
278 rsb_err_t errval = RSB_ERR_NO_ERROR;
279 #ifdef RSB_LIBRSB_VER 282 errval = RSB_ERR_UNSUPPORTED_FEATURE;
283 RSBP_ERRORM(
"This librsb version (see RSB_LIBRSB_VER) is " << RSB_LIBRSB_VER <<
" -- and is too old: need at least " <<
RSBP_MSLVRV );
287 errval = rsb_lib_init( iop ? iop : RSB_NULL_INIT_OPTIONS );
288 if( errval != RSB_ERR_NO_ERROR )
292 rsb_cpp_initialized_ =
true;
302 rsb_err_t errval = RSB_ERR_NO_ERROR;
303 errval = rsb_lib_set_opt_str(opnp,opvp);
312 rsb_err_t errval = RSB_ERR_NO_ERROR;
313 errval = rsb_lib_set_opt(iof,iop);
322 rsb_err_t errval = RSB_ERR_NO_ERROR;
323 errval = rsb_lib_get_opt(iof, iop);
327 rsb_string_t
get_opt(
enum rsb_opt_t iof)
const 332 rsb_err_t errval = RSB_ERR_NO_ERROR;
333 const char * sp {
nullptr};
334 RSB_REINIT_SINGLE_VALUE_GET(RSB_IO_WANT_MEMORY_HIERARCHY_INFO_STRING,&sp,errval);
336 return rsb_string_t(sp?sp:
"");
344 rsb_err_t errval = RSB_ERR_NO_ERROR;
345 errval = set_opt<rsb_err_t>(RSB_IO_WANT_EXECUTING_THREADS, &nt);
354 rsb_err_t errval = RSB_ERR_NO_ERROR;
356 errval = get_opt<rsb_err_t>(RSB_IO_WANT_EXECUTING_THREADS, &nt);
366 rsb_err_t errval = RSB_ERR_NO_ERROR;
367 errval = rsb_lib_reinit(iop);
372 rsb_cpp_initialized_(false)
377 struct rsb_initopts tio;
379 std::pair<enum rsb_opt_t,void*> vio { RSB_IO_WANT_VERBOSE_INIT, &of };
380 tio.keys = & vio.first;
381 tio.values = & vio.second;
383 tio.action = RSB_IO_SPECIFIER_SET;
384 initialize(verbose ? &tio : RSBP_NULL);
388 rsb_cpp_initialized_(false)
404 rsb_err_t errval = RSB_ERR_NO_ERROR;
405 size_t totmem = 0, totall = 0;
406 RSB_REINIT_SINGLE_VALUE_GET(RSB_IO_WANT_MEM_ALLOC_CNT,&totall,errval);
407 if(errval==RSB_ERR_UNSUPPORTED_FEATURE)
410 RSB_REINIT_SINGLE_VALUE_GET(RSB_IO_WANT_MEM_ALLOC_TOT,&totmem,errval);
413 RSBP_EOS <<
"librsb has allocated " << totmem <<
" bytes in " << totall <<
" chunks.\n";
425 rsb_err_t errval = RSB_ERR_NO_ERROR;
427 RSB_REINIT_SINGLE_VALUE_SET(RSB_IO_WANT_VERBOSE_EXIT,&stdout,errval);
428 errval |= rsb_lib_exit(RSB_NULL_EXIT_OPTIONS);
429 if( errval != RSB_ERR_NO_ERROR )
435 #if RSBP_WANT_INLINE_INIT 437 #define RSBP_RMCI() rsb_lib.initialize(); 442 namespace rsb_internal
444 template<
typename NT> constexpr rsb_type_t rsb_type_t_for(
void) {
return RSB_NUMERICAL_TYPE_INVALID_TYPE; }
445 #ifdef RSB_NUMERICAL_TYPE_LONG_DOUBLE 446 template<> constexpr rsb_type_t rsb_type_t_for<long double> (void) {
return RSB_NUMERICAL_TYPE_LONG_DOUBLE; }
448 #ifdef RSB_NUMERICAL_TYPE_DOUBLE 449 template<> constexpr rsb_type_t rsb_type_t_for<double> (void) {
return RSB_NUMERICAL_TYPE_DOUBLE; }
451 #ifdef RSB_NUMERICAL_TYPE_LONG_DOUBLE_COMPLEX 452 template<> constexpr rsb_type_t rsb_type_t_for<std::complex<long double>> (void) {
return RSB_NUMERICAL_TYPE_LONG_DOUBLE_COMPLEX; }
454 #ifdef RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX 455 template<> constexpr rsb_type_t rsb_type_t_for<std::complex<double>> (void) {
return RSB_NUMERICAL_TYPE_DOUBLE_COMPLEX; }
457 #ifdef RSB_NUMERICAL_TYPE_FLOAT_COMPLEX 458 template<> constexpr rsb_type_t rsb_type_t_for<std::complex<float>> (void) {
return RSB_NUMERICAL_TYPE_FLOAT_COMPLEX; }
460 #ifdef RSB_NUMERICAL_TYPE_FLOAT 461 template<> constexpr rsb_type_t rsb_type_t_for<float> (void) {
return RSB_NUMERICAL_TYPE_FLOAT; }
463 #ifdef RSB_NUMERICAL_TYPE_INT 464 template<> constexpr rsb_type_t rsb_type_t_for<int> (void) {
return RSB_NUMERICAL_TYPE_INT; }
518 template<RSBP_Scalar_t NT>
522 #ifdef RSBP_TESTING_ONLY 523 friend class MatrixConstructors_Test;
524 FRIEND_TEST(MatrixConstructors_Test,MoveAssignment);
525 FRIEND_TEST(MatrixConstructors_Test,Move);
526 FRIEND_TEST(MatrixConstructors_Test,InternalsMoveBadType);
527 FRIEND_TEST(MatrixConstructors_Test,InternalsCtorBadType);
528 FRIEND_TEST(MatrixConstructors_Test,InternalsCtorTypeOk);
529 FRIEND_TEST(MatrixConstructors_Test,InternalsCtorTypeBad);
530 FRIEND_TEST(MatrixConstructors_Test,clone);
531 FRIEND_TEST(LowerTest,compare_same);
532 FRIEND_TEST(LowerTest,compare_different);
534 rsb_mtx_t * mtxAp_ {RSBP_NULL};
536 rsb_err_t errval_ { RSB_ERR_NO_ERROR };
537 enum State { Invalid, Begin, Valid };
538 enum State state_ { Invalid };
539 const static rsb_type_t typecode_ = rsb_internal::rsb_type_t_for<NT>();
540 RSBP_CONSTEXPR
static const NT one = 1.0;
541 RSBP_CONSTEXPR
static const NT zero = 0.0;
542 RSBP_CONSTEXPR
static const NT defmultbeta = 0.0;
543 RSBP_CONSTEXPR
static const NT defmultalpha = 1.0;
544 RSBP_CONSTEXPR
static const NT RSBP_NUMT_INVALID = std::numeric_limits<const NT>::max();
549 enum RsbSym { IsGen = RSB_FLAG_NOFLAGS , IsHer = RSB_FLAG_HERMITIAN , IsSym = RSB_FLAG_SYMMETRIC , IsTri = RSB_FLAG_TRIANGULAR };
552 rsb_flags_t _adjustSym(
const RsbSym sym = IsGen )
const 554 rsb_flags_t flags = RSB_FLAG_NOFLAGS;
559 RSB_DO_FLAG_ADD( flags, RSB_FLAG_HERMITIAN);
561 RSB_DO_FLAG_ADD( flags, RSB_FLAG_SYMMETRIC);
563 RSB_DO_FLAG_ADD( flags, RSB_FLAG_TRIANGULAR);
567 bool _is_integer(
void)
const 569 return std::numeric_limits<const NT>::is_integer;
572 RSBP_RVT Err_t perror (
const rsb_err_t errval)
const 579 this->perror(errval_);
587 errval_ (RSB_ERR_NO_ERROR),
603 const rsb_nnz_idx_t nnzA = 0;
605 this->mtxAp_ = rsb_mtx_alloc_from_coo_begin(nnzA, typecode_, nrA, ncA, _adjustSym( sym ), &errval_);
606 if( errval_ == RSB_ERR_NO_ERROR )
608 RSBP_PERROR_ALWAYS_THROW(errval_);
612 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 ):
614 errval_ (RSB_ERR_NO_ERROR),
623 const rsb_coo_idx_t ncA = 0;
624 const rsb_blk_idx_t brA = 0, bcA = 0;
627 this->mtxAp_ = rsb_mtx_alloc_from_csr_const(VA, RP, JA, RP[nrA], typecode_, nrA, ncA, brA, bcA, _adjustSym( sym ), &errval_);
629 this->mtxAp_ = RSBP_NULL,
630 errval_ = RSB_ERR_GENERIC_ERROR;
632 if( errval_ == RSB_ERR_NO_ERROR )
635 RSBP_PERROR_ALWAYS_THROW(errval_);
640 RsbMatrix(
const std::span<const rsb_coo_idx_t> IA,
const std::span<const rsb_coo_idx_t> JA,
const std::span<const NT> VA, rsb_nnz_idx_t nnzA = RSB_INVALID_NNZ_IDX_VAL,
const rsb_flags_t flagsA = RSB_FLAG_NOFLAGS ):
642 errval_ (RSB_ERR_NO_ERROR),
653 const rsb_coo_idx_t nrA = 0, ncA = 0;
654 const rsb_blk_idx_t brA = 0, bcA = 0;
655 if ( nnzA == RSB_INVALID_NNZ_IDX_VAL )
657 this->mtxAp_ = rsb_mtx_alloc_from_coo_const(VA.data(), IA.data(), JA.data(), nnzA, typecode_, nrA, ncA, brA, bcA, flagsA, &errval_);
659 if( errval_ == RSB_ERR_NO_ERROR )
662 RSBP_PERROR_ALWAYS_THROW(errval_);
667 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 ):
669 errval_ (RSB_ERR_NO_ERROR),
680 const rsb_coo_idx_t nrA = 0, ncA = 0;
681 const rsb_blk_idx_t brA = 0, bcA = 0;
683 if ( ( IA && JA && VA ) || nnzA == 0 )
684 this->mtxAp_ = rsb_mtx_alloc_from_coo_const(VA, IA, JA, nnzA, typecode_, nrA, ncA, brA, bcA, flagsA, &errval_);
686 this->mtxAp_ = RSBP_NULL,
687 errval_ = RSB_ERR_GENERIC_ERROR;
689 if( errval_ == RSB_ERR_NO_ERROR )
692 RSBP_PERROR_ALWAYS_THROW(errval_);
698 errval_ (RSB_ERR_NO_ERROR),
708 this->mtxAp_ = rsb_file_mtx_load(filename, _adjustSym( sym ), typecode_, &errval_);
709 if( errval_ == RSB_ERR_NO_ERROR )
711 RSBP_PERROR_ALWAYS_THROW(errval_);
717 errval_ (RSB_ERR_NO_ERROR),
726 const rsb_trans_t transA = do_trans ? RSB_TRANSPOSITION_T : RSB_TRANSPOSITION_N;
728 if ( RSBP_CANNOT_HONOUR_CSR(A_Rsb.
nnz(), A_Rsb.
rows(), flagsA) )
729 RSB_DO_FLAG_ADD( flagsA, RSB_FLAG_DEFAULT_COO_MATRIX_FLAGS );
730 errval_ = A_Rsb.clone<rsb_err_t>(&this->mtxAp_, transA, RSBP_NULL, flagsA);
732 if( errval_ == RSB_ERR_NO_ERROR )
734 RSBP_PERROR_ALWAYS_THROW(errval_);
738 #if defined(RSBP_TESTING_ONLY) || defined(RSBT_TESTING_ONLY) 741 errval_ (RSB_ERR_NO_ERROR),
742 state_ ( mtxAp ? Valid : Invalid )
749 errval_ = type_check<rsb_err_t>();
750 RSBP_PERROR_ALWAYS_THROW(errval_);
769 this->swap(swappable);
783 this->mtxAp_ = rsb_mtx_free (this->mtxAp_);
793 RSBP_NFE(set_val<rsb_err_t> (val, i, j, RSB_FLAG_NOFLAGS));
810 RSBP_NFE(rsb_mtx_alloc_from_coo_end (&this->mtxAp_));
811 if( errval_ == RSB_ERR_NO_ERROR )
822 RSBP_NFE(close<rsb_err_t>());
826 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 833 RSBP_CFE( rsb_spmv(transA, alphap, this->mtxAp_, Xp, incX, betap, Yp, incY) );
837 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 845 RSBP_DFE( spmv<rsb_err_t>(transA, &alpha, Xp, incX, &beta, Yp, incY) );
849 RSBP_RVT Err_t
spmv(rsb_trans_t transA,
const NT alpha,
const NT * Xp,
const NT beta, NT * Yp)
const 857 const rsb_coo_idx_t incX = 1, incY = 1;
858 RSBP_DFE( spmv<rsb_err_t>(transA, &alpha, Xp, incX, &beta, Yp, incY) );
863 std::pair<rsb_nnz_idx_t,rsb_nnz_idx_t> _get_ldX_ldY(rsb_trans_t transA, rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER, rsb_coo_idx_t nrhs = 1)
const 865 if (order != RSB_FLAG_WANT_COLUMN_MAJOR_ORDER)
867 const auto ldX = ( transA == RSB_TRANSPOSITION_N ) ? this->cols() : this->rows();
868 const auto ldY = ( transA == RSB_TRANSPOSITION_N ) ? this->rows() : this->cols();
874 RSBP_RVT Err_t spmv(rsb_trans_t transA,
const NT alpha,
const std::span<const NT> X,
const NT beta, std::span<NT> Y)
const 882 const rsb_coo_idx_t incX = 1, incY = 1;
883 const auto [ldX, ldY] = _get_ldX_ldY(transA);
885 if ( static_cast<rsb_nnz_idx_t>(X.size()) < ldX || static_cast<rsb_nnz_idx_t>(Y.size()) < ldY )
887 errval = RSB_ERR_BADARGS;
891 RSBP_CFE( rsb_spmv(transA, &alpha, this->mtxAp_, X.data(), incX, &beta, Y.data(), incY) );
904 const rsb_trans_t transA = do_trans ? RSB_TRANSPOSITION_T : RSB_TRANSPOSITION_N;
905 const NT alpha = defmultalpha;
906 const NT beta = defmultbeta;
907 const rsb_coo_idx_t incX = 1, incY = 1;
908 RSBP_DFE( spmv<rsb_err_t>(transA, &alpha, x, incX, &beta, y, incY) );
912 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 919 RSBP_CFE ( rsb_spmm (transA,alphap,this->mtxAp_,nrhs,order,Bp,ldB,betap,Cp,ldC) );
923 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 931 RSBP_DFE ( spmm<rsb_err_t> (transA,&alpha,nrhs,order,Bp,ldB,&beta,Cp,ldC) );
935 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 940 const rsb_nnz_idx_t ldC {}, ldB {};
942 RSBP_DFE ( spmm<rsb_err_t> (transA,&alpha,nrhs,order,Bp,ldB,&beta,Cp,ldC) );
946 #if RSBP_WANT_IMPLICIT_ORDER 947 RSBP_RVT RSBP_DEPRECATED Err_t spmm(rsb_trans_t transA,
const NT alpha, rsb_coo_idx_t nrhs,
const NT * Bp,
const NT beta, NT * Cp)
const 953 bool do_trans = ( transA == RSB_TRANSPOSITION_N ? false : true );
954 const rsb_coo_idx_t ldC = do_trans ? cols():rows(), ldB = do_trans ? rows():cols();
955 const rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER;
956 RSBP_DFE ( spmm<rsb_err_t> (transA,&alpha,nrhs,order,Bp,ldB,&beta,Cp,ldC) );
961 #if RSBP_WANT_IMPLICIT_ORDER 962 RSBP_RVT RSBP_DEPRECATED Err_t spmm(rsb_trans_t transA,
const NT * alphap, rsb_coo_idx_t nrhs,
const NT * Bp,
const NT * betap, NT * Cp)
const 970 RSBP_DFE ( spmm<rsb_err_t> (transA,*alphap,nrhs,Bp,*betap,Cp) );
975 #if RSBP_WANT_IMPLICIT_ORDER 982 const rsb_trans_t transA = do_trans ? RSB_TRANSPOSITION_T : RSB_TRANSPOSITION_N;
983 const NT alpha = defmultalpha;
984 const NT beta = defmultbeta;
985 const rsb_coo_idx_t ldC = do_trans ? cols():rows(), ldB = do_trans ? rows():cols();
986 const rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER;
987 RSBP_DFE( spmm<rsb_err_t>(transA, &alpha, nrhs, order, x, ldB, &beta, y, ldC) );
993 RSBP_RVT Err_t spmm(rsb_trans_t transA,
const NT alpha, rsb_coo_idx_t nrhs, rsb_flags_t order,
const std::span<const NT> x,
const NT beta, std::span<NT> y)
const 999 const auto [ldB, ldC] = _get_ldX_ldY(transA,order,nrhs);
1000 RSBP_CFE ( rsb_spmm (transA,&alpha,this->mtxAp_,nrhs,order,x.data(),ldB,&beta,y.data(),ldC) );
1005 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 1012 RSBP_CFE( rsb_spsm (transT,alphap,this->mtxAp_,nrhs,order,betap,Bp,ldB,Cp,ldC) );
1016 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 1022 RSBP_DFE( spsm<rsb_err_t> (transT,&alpha,nrhs,order,&beta,Bp,ldB,Cp,ldC) );
1026 RSBP_RVT Err_t
spsm(rsb_trans_t transT,
const NT alpha, rsb_coo_idx_t nrhs,
const NT * Bp, NT * Cp)
const 1032 const rsb_coo_idx_t ldC = rows(), ldB = ldC;
1033 const rsb_flags_t order = RSB_FLAG_WANT_COLUMN_MAJOR_ORDER;
1034 const NT beta = defmultbeta;
1035 RSBP_DFE( spsm<rsb_err_t> (transT,&alpha,nrhs,order,&beta,Bp,ldB,Cp,ldC) );
1039 RSBP_RVT Err_t
spsm(NT * y,
const NT * x, rsb_coo_idx_t nrhs,
bool do_trans =
false)
const 1045 const rsb_trans_t transA = do_trans ? RSB_TRANSPOSITION_T : RSB_TRANSPOSITION_N;
1046 const NT alpha = one;
1047 const NT beta = zero;
1048 const rsb_coo_idx_t ldC = rows(), ldB = ldC;
1049 RSBP_DFE( spsm<rsb_err_t> (transA,&alpha,nrhs,RSB_FLAG_WANT_COLUMN_MAJOR_ORDER,&beta,x,ldB,y,ldC));
1053 RSBP_RVT Err_t
spsm(NT * y, rsb_coo_idx_t nrhs,
bool do_trans =
false)
const 1059 RSBP_DFE( spsm<rsb_err_t> (y,y,nrhs,do_trans ));
1070 RSBP_CFE( rsb_spsv(transT,alphap,this->mtxAp_,Xp,incX,Yp,incY) );
1074 RSBP_RVT Err_t
spsv(rsb_trans_t transT,
const NT alpha,
const NT * Xp, NT * Yp)
const 1080 const rsb_coo_idx_t incX = 1, incY = 1;
1081 RSBP_CFE( spsv<rsb_err_t>(transT,&alpha,Xp,incX,Yp,incY) );
1091 const rsb_trans_t transA = do_trans ? RSB_TRANSPOSITION_T : RSB_TRANSPOSITION_N;
1092 const NT alpha = one;
1093 const rsb_coo_idx_t incX = 1, incY = 1;
1094 RSBP_DFE( spsv<rsb_err_t>(transA,&alpha,x,incX,y,incY) );
1104 const rsb_trans_t transA = do_trans ? RSB_TRANSPOSITION_T : RSB_TRANSPOSITION_N;
1105 const NT alpha = one;
1106 const rsb_coo_idx_t incY = 1;
1107 RSBP_DFE( spsv<rsb_err_t>(transA,&alpha,y,incY,y,incY) );
1118 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1128 rsb_flags_t val = 0;
1129 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1139 rsb_blk_idx_t val = 0;
1140 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1150 rsb_nnz_idx_t val = 0;
1151 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1161 rsb_flags_t val = 0;
1162 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1173 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1183 rsb_coo_idx_t val = 0;
1184 RSBP_DFE( rsb_mtx_get_info(this->mtxAp_,mif,&val));
1193 return get_info_size_t(RSB_MIF_INDEX_STORAGE_IN_BYTES__TO__SIZE_T);
1201 return _get_index_storage_bytes() + 2 *
sizeof(NT) * nnz();
1207 std::swap(this->mtxAp_,other.mtxAp_);
1208 std::swap(this->state_,other.state_);
1214 if ( rsbtype() != get_type_t(RSB_MIF_MATRIX_TYPECODE__TO__RSB_TYPE_T) )
1216 errval_ = RSB_ERR_BADARGS;
1217 RSBP_PERROR(RSB_ERR_BADARGS);
1222 RSBP_RVT Err_t use_mtx_ptr(
struct rsb_mtx_t * mtxBp)
1225 if( mtxBp != RSBP_NULL && mtxBp != this->mtxAp_ )
1227 rsb_mtx_free (this->mtxAp_);
1228 this->mtxAp_ = mtxBp;
1230 errval_ = type_check<rsb_err_t>();
1240 RSBP_MFRV(get_info_nnz_t(RSB_MIF_MATRIX_NNZ__TO__RSB_NNZ_INDEX_T));
1248 RSBP_MFRV(get_info_blk_t(RSB_MIF_LEAVES_COUNT__TO__RSB_BLK_INDEX_T));
1257 RSBP_MFRV(get_info_coo_t(RSB_MIF_MATRIX_ROWS__TO__RSB_COO_INDEX_T));
1266 RSBP_MFRV(get_info_coo_t(RSB_MIF_MATRIX_COLS__TO__RSB_COO_INDEX_T));
1269 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 1275 RSBP_CFE(rsb_mtx_get_vals(this->mtxAp_, VA, IA, JA, nnz, flags));
1279 NT
get_val(
const rsb_coo_idx_t i,
const rsb_coo_idx_t j, rsb_flags_t flags = RSB_FLAG_NOFLAGS)
const 1285 rsb_mtx_get_vals(this->mtxAp_, &val, &i, &j, 1, flags);
1289 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)
1299 RSBP_NFE(rsb_mtx_set_vals (this->mtxAp_, &val, &i, &j, 1, flags));
1303 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)
1315 RSBP_NFE(rsb_mtx_set_vals (this->mtxAp_, VA, IA, JA, nnz, flags));
1325 RSBP_CFE(rsb_mtx_get_vec(this->mtxAp_, Dp, flags));
1338 RSBP_CFE(rsb_mtx_get_coo(this->mtxAp_, VA, IA, JA, flags));
1351 RSBP_CFE(rsb_mtx_get_csr(RSB_NUMERICAL_TYPE_SAME_TYPE, this->mtxAp_, VA, RP, JA, flags));
1355 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 1363 RSBP_CFE(rsb_mtx_get_rows_sparse(transA, alphap, this->mtxAp_, VA, IA, JA, frA, lrA, rnzp, flags));
1375 RSBP_NFE(rsb_mtx_upd_vals(this->mtxAp_, elop_flags, &omega));
1387 RSBP_NFE(rsb_mtx_upd_vals(this->mtxAp_, elop_flags, omegap));
1397 RSBP_CFE(rsb_mtx_get_nrm(this->mtxAp_, Np, flags));
1407 RSBP_MFRV(typecode_);
1415 RSBP_MFRV(get_flags_t(RSB_MIF_MATRIX_FLAGS__TO__RSB_FLAGS_T));
1424 const auto RSBP_INFOBUF { 256 };
1425 char ss[RSBP_INFOBUF];
1426 RSBP_CFE(rsb_mtx_get_info_str(this->mtxAp_,key,ss,RSBP_INFOBUF));
1427 RSBP_MFRV(rsb_string_t(ss));
1436 RSBP_CFE(rsb_mtx_get_info(this->mtxAp_, miflags, minfop));
1446 RSBP_MFRV(get_info_str(
"RSB_MIF_MATRIX_INFO__TO__CHAR_P"));
1449 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 1458 RSBP_CFE(rsb_tune_spsm(RSBP_NULL, sfp, tnp, maxr, maxt, transA, alphap, this->mtxAp_, nrhs, order, Bp, ldB, betap, Cp, ldC));
1462 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 1472 RSBP_CFE(rsb_tune_spmm(RSBP_NULL, sfp, tnp, maxr, maxt, transA, alphap, this->mtxAp_, nrhs, order, Bp, ldB, betap, Cp, ldC));
1476 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)
1489 struct rsb_mtx_t * mtxBp {};
1490 RSBP_NFE(rsb_tune_spmm(&mtxBp, sfp, tnp, maxr, maxt, transA, alphap, this->mtxAp_, nrhs, order, Bp, ldB, betap, Cp, ldC));
1491 errval_ = use_mtx_ptr<rsb_err_t>(mtxBp);
1496 RSBP_NFE(rsb_tune_spmm(&(this->mtxAp_), sfp, tnp, maxr, maxt, transA, alphap, RSBP_NULL, nrhs, order, Bp, ldB, betap, Cp, ldC));
1501 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)
1510 RSBP_CFE( tune_spmm<rsb_err_t>( sfp, tnp, maxr, maxt, transA, &alpha, nrhs, order, Bp, ldB, &beta, Cp, ldC) );
1514 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)
1521 rsb_int_t *tnp {
nullptr};
1522 const rsb_int_t maxr {0};
1523 const rsb_time_t maxt {0.0};
1524 const std::pair<rsb_nnz_idx_t,rsb_nnz_idx_t> ldX = _get_ldX_ldY(transA,order,nrhs);
1525 # if defined(__cplusplus) && (__cplusplus>=201709L) 1526 const auto [ldB, ldC] = ldX;
1528 const rsb_nnz_idx_t ldB = ldX.first, ldC = ldX.second;
1532 RSBP_CFE( tune_spmm<rsb_err_t>( &sf, tnp, maxr, maxt, transA, &alpha, nrhs, order, Bp, ldB, &beta, Cp, ldC) );
1537 RSBP_RVT RSBP_DEPRECATED 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 std::span<const NT> B, rsb_nnz_idx_t ldB,
const NT beta, std::span<NT> C, rsb_nnz_idx_t ldC)
1544 rsb_int_t *tnp {
nullptr};
1545 const rsb_int_t maxr {0};
1546 const rsb_time_t maxt {0.0};
1548 RSBP_CFE( tune_spmm<rsb_err_t>( &sf, tnp, maxr, maxt, transA, &alpha, nrhs, order, B.data(), ldB, &beta, C.data(), ldC) );
1552 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 std::span<const NT> B,
const NT beta, std::span<NT> C)
1559 rsb_int_t *tnp {
nullptr};
1560 const rsb_int_t maxr {0};
1561 const rsb_time_t maxt {0.0};
1562 const auto [ldB, ldC] = _get_ldX_ldY(transA,order,nrhs);
1564 struct rsb_mtx_t * mtxBp {};
1565 RSBP_NFE(rsb_tune_spmm(&mtxBp, &sf, tnp, maxr, maxt, transA, &alpha, this->mtxAp_, nrhs, order, B.data(), ldB, &beta, C.data(), ldC));
1566 errval_ = use_mtx_ptr<rsb_err_t>(mtxBp);
1570 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 std::span<const NT> B, rsb_nnz_idx_t ldB,
const NT beta, std::span<NT> C, rsb_nnz_idx_t ldC)
1579 RSBP_CFE( tune_spmm<rsb_err_t>( sfp, tnp, maxr, maxt, transA, &alpha, nrhs, order, B.data(), ldB, &beta, C.data(), ldC) );
1584 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)
1595 struct rsb_mtx_t * mtxBp {};
1596 RSBP_NFE(rsb_tune_spsm(&mtxBp, sfp, tnp, maxr, maxt, transA, alphap, this->mtxAp_, nrhs, order, Bp, ldB, betap, Cp, ldC));
1602 RSBP_NFE(rsb_tune_spsm(&(this->mtxAp_), sfp, tnp, maxr, maxt, transA, alphap, RSBP_NULL, nrhs, order, Bp, ldB, betap, Cp, ldC));
1615 RSBP_CFE(rsb_file_mtx_save(this->mtxAp_, filename));
1620 RSBP_RVT RSBP_DEPRECATED Err_t clone(
struct rsb_mtx_t ** mtxBpp, rsb_trans_t transA = RSB_TRANSPOSITION_N,
const NT *alphap = RSBP_NULL, rsb_flags_t flags = RSB_FLAG_NOFLAGS)
const 1630 RSBP_PERROR(RSB_ERR_BADARGS);
1631 RSBP_CFE(rsb_mtx_clone(mtxBpp, this->typecode_, transA, alphap, this->mtxAp_, flags));
1643 errval_ = A_Rsb.clone<rsb_err_t>(&this->mtxAp_);
1652 return !std::is_scalar<NT>();
1656 bool _equal_to(
const RsbMatrix & B_Rsb)
const 1664 bool retval =
false;
1665 const rsb_coo_idx_t invalid_coo_ = RSB_INVALID_COO_IDX_VAL;
1666 const rsb_nnz_idx_t nnzA = nnz();
1668 if( nnzA != B_Rsb.
nnz() )
1670 if( this->rows() != B_Rsb.
rows() )
1672 if( this->cols() != B_Rsb.
cols() )
1675 if( ! _is_integer() )
1677 if( this->normOne() != B_Rsb.
normOne() )
1679 if( this->normInf() != B_Rsb.
normInf() )
1684 std::vector<rsb_coo_idx_t > AIA(nnzA,invalid_coo_),AJA(nnzA,invalid_coo_);
1685 std::vector<rsb_coo_idx_t > BIA(nnzA,invalid_coo_),BJA(nnzA,invalid_coo_);
1686 std::vector<NT > AVA(nnzA,invalid_coo_);
1687 std::vector<NT > BVA(nnzA,invalid_coo_);
1690 errval = rsb_mtx_get_coo(this->mtxAp_, &AVA[0], &AIA[0], &AJA[0], RSB_FLAG_SORTED_INPUT);
1691 RSBP_ERRGOTO(errval,ret)
1692 errval = rsb_mtx_get_coo(B_Rsb.mtxAp_, &BVA[0], &BIA[0], &BJA[0], RSB_FLAG_SORTED_INPUT);
1693 RSBP_ERRGOTO(errval,ret)
1695 std::equal(AIA.begin(),AIA.end(),BIA.begin()) &&
1696 std::equal(AJA.begin(),AJA.end(),BJA.begin()) &&
1697 std::equal(AVA.begin(),AVA.end(),BVA.begin()) );
1714 const bool retval = _equal_to(B_Rsb);
1725 return ! ( (*this) == B_Rsb );
1732 NT nrm = RSBP_NUMT_INVALID;
1733 this->get_nrm(&nrm, RSB_EXTF_NORM_ONE);
1741 NT nrm = RSBP_NUMT_INVALID;
1742 this->get_nrm(&nrm, RSB_EXTF_NORM_INF);
1746 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 1754 RSBP_CFE(rsb_mtx_rndr(filename, mtxAp_, pmWidth, pmHeight, rflags));
1759 #ifndef RSBP_NO_NAMESPACE Err_t set_num_threads(rsb_int_t nt)
Definition: rsb.hpp:339
rsb_type_t get_type_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1166
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
Definition: rsb.hpp:826
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
Definition: rsb.hpp:1462
bool operator!=(const RsbMatrix &B_Rsb) const
Definition: rsb.hpp:1718
#define RSBP_MSLVRV
Minimal supported librsb version (value of RSB_LIBRSB_VER, defined via rsb.h)
Definition: rsb.hpp:254
Err_t spsv(NT *y, const NT *x, bool do_trans=false) const
Definition: rsb.hpp:1085
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)
Definition: rsb.hpp:667
rsb_string_t get_info_str(const char *key) const
Definition: rsb.hpp:1418
rsb_coo_idx_t rows(void) const
Definition: rsb.hpp:1251
Err_t get_nrm(NT *Np, enum rsb_extff_t flags) const
Definition: rsb.hpp:1391
Class initializing/finalizing librsb state.
Definition: rsb.hpp:269
rsb_flags_t get_info_rsb_flags_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1122
rsb_coo_idx_t cols(void) const
Definition: rsb.hpp:1260
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
Definition: rsb.hpp:1449
RsbMatrix(RsbMatrix &&other)
Definition: rsb.hpp:758
Err_t upd_vals(enum rsb_elopf_t elop_flags, const NT *omegap)
Definition: rsb.hpp:1379
rsb_int_t get_num_threads(void) const
Definition: rsb.hpp:349
rsb_type_t rsbtype(void) const
Definition: rsb.hpp:1401
#define RSBP_RVT
No return type.
Definition: rsb.hpp:251
NT get_val(const rsb_coo_idx_t i, const rsb_coo_idx_t j, rsb_flags_t flags=RSB_FLAG_NOFLAGS) const
Definition: rsb.hpp:1279
Err_t set_opt(enum rsb_opt_t iof, const void *iop)
Definition: rsb.hpp:307
~RsbMatrix(void)
Definition: rsb.hpp:774
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
Definition: rsb.hpp:1746
RsbSym
Definition: rsb.hpp:549
size_t _get_storage_bytes(void) const
Definition: rsb.hpp:1196
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
Definition: rsb.hpp:1342
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)
Definition: rsb.hpp:612
size_t meminfo(void)
Definition: rsb.hpp:396
Err_t set_opt_str(const rsb_char_t *opnp, const rsb_char_t *opvp)
Definition: rsb.hpp:297
Err_t _add(rsb_coo_idx_t i, rsb_coo_idx_t j, NT val)
Definition: rsb.hpp:787
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
Definition: rsb.hpp:837
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
Definition: rsb.hpp:1016
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
Definition: rsb.hpp:1063
RsbMatrix(rsb_coo_idx_t nrA, rsb_coo_idx_t ncA, const RsbSym sym=IsGen)
Definition: rsb.hpp:585
Err_t get_vec(NT *Dp, enum rsb_extff_t flags) const
Definition: rsb.hpp:1319
bool operator==(const RsbMatrix &B_Rsb) const
Definition: rsb.hpp:1704
size_t _get_index_storage_bytes(void) const
Definition: rsb.hpp:1188
Err_t spmv(rsb_trans_t transA, const NT alpha, const NT *Xp, const NT beta, NT *Yp) const
Definition: rsb.hpp:849
Err_t spsv(rsb_trans_t transT, const NT alpha, const NT *Xp, NT *Yp) const
Definition: rsb.hpp:1074
Err_t get_opt(enum rsb_opt_t iof, void *iop) const
Definition: rsb.hpp:317
Err_t spsm(NT *y, rsb_coo_idx_t nrhs, bool do_trans=false) const
Definition: rsb.hpp:1053
~RsbLib(void)
Definition: rsb.hpp:417
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)
Definition: rsb.hpp:1303
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)
Definition: rsb.hpp:1501
Err_t get_info(enum rsb_mif_t miflags, void *minfop) const
Definition: rsb.hpp:1430
rsb_nnz_idx_t get_info_nnz_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1144
RsbMatrix(const rsb_char_t *filename, const RsbSym sym=IsGen)
Definition: rsb.hpp:696
size_t get_info_size_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1111
NT normOne(void) const
Definition: rsb.hpp:1728
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
Definition: rsb.hpp:1355
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
Definition: rsb.hpp:1005
Err_t close(void)
Definition: rsb.hpp:797
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)
Definition: rsb.hpp:1514
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)
Definition: rsb.hpp:1476
rsb_blk_idx_t get_info_blk_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1133
Err_t file_save(const rsb_char_t *filename=RSBP_NULL) const
Definition: rsb.hpp:1607
rsb_flags_t get_flags_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1155
Err_t spsm(NT *y, const NT *x, rsb_coo_idx_t nrhs, bool do_trans=false) const
Definition: rsb.hpp:1039
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)
Definition: rsb.hpp:1289
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
Definition: rsb.hpp:1269
rsb_string_t get_opt(enum rsb_opt_t iof) const
Definition: rsb.hpp:327
rsb_nnz_idx_t nnz(void) const
Definition: rsb.hpp:1235
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
Definition: rsb.hpp:1329
bool _is_complex(void) const
Definition: rsb.hpp:1647
NT normInf(void) const
Definition: rsb.hpp:1737
rsb_flags_t rsbflags(void) const
Definition: rsb.hpp:1410
RsbMatrix & operator=(const RsbMatrix &A_Rsb)
Definition: rsb.hpp:1636
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
Definition: rsb.hpp:935
RsbLib(void)
Definition: rsb.hpp:387
RsbLib(bool verbose)
Definition: rsb.hpp:371
Err_t spmv(NT *y, const NT *x, bool do_trans=false) const
Definition: rsb.hpp:896
Err_t spsv(NT *y, bool do_trans=false) const
Definition: rsb.hpp:1098
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
Definition: rsb.hpp:923
Err_t upd_vals(enum rsb_elopf_t elop_flags, const NT &omega)
Definition: rsb.hpp:1367
Err_t spsm(rsb_trans_t transT, const NT alpha, rsb_coo_idx_t nrhs, const NT *Bp, NT *Cp) const
Definition: rsb.hpp:1026
RsbMatrix(const RsbMatrix &A_Rsb, bool do_trans=false, rsb_flags_t flagsA=RSB_FLAG_NOFLAGS)
Definition: rsb.hpp:715
rsb_string_t _info(void) const
Definition: rsb.hpp:1440
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
Definition: rsb.hpp:912
#define RSBP_DEPRECATED
Internal attribute specifier for deprecated member functions.
Definition: rsb.hpp:231
rsb_blk_idx_t blocks(void) const
Definition: rsb.hpp:1243
Err_t _close(void)
Definition: rsb.hpp:816
rsb_coo_idx_t get_info_coo_t(enum rsb_mif_t mif) const
Definition: rsb.hpp:1177
Err_t reinit(struct rsb_initopts *iop)
Definition: rsb.hpp:361
Represent a sparse matrix in RSB format by means of librsb.
Definition: rsb.hpp:519
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)
Definition: rsb.hpp:1584