18 #ifndef CARMA_SPARSE_OBJ_H_
19 #define CARMA_SPARSE_OBJ_H_
20 #include <cusparse_v2.h>
23 template <
class T_data>
26 #ifndef USE_MAGMA_SPARSE
30 #include "magmasparse.h"
33 template <
class T_data>
46 #if CUDA_VERSION >= 11000
47 cusparseSpMatDescr_t sp_descr;
48 cusparseDnMatDescr_t dn_descr;
71 T_data *values,
int *colind,
int *rowind,
int nz,
78 void resize(
int nnz_,
int dim1_,
int dim2_);
84 operator T_data *() {
return d_data; }
97 #if CUDA_VERSION >= 11000
99 cudaDataType_t get_data_type() {
100 cudaDataType_t data_type;
101 if (std::is_same<T_data, float>::value)
102 data_type = CUDA_R_32F;
103 else if (std::is_same<T_data, double>::value)
104 data_type = CUDA_R_64F;
106 std::cerr <<
"Unsupported data type" << std::endl;
114 void _create(
int nnz_,
int dim1_,
int dim2_);
117 #if CUDA_VERSION < 12000
118 template <cusparseStatus_t CUSPARSEAPI (*ptr_nnz)(
119 cusparseHandle_t handle, cusparseDirection_t dirA,
int m,
int n,
120 const cusparseMatDescr_t descrA,
const T_data *A,
int lda,
121 int *nnzPerRowCol,
int *nnzTotalDevHostPtr),
122 cusparseStatus_t CUSPARSEAPI (*ptr_dense2csr)(
123 cusparseHandle_t handle,
int m,
int n,
124 const cusparseMatDescr_t descrA,
const T_data *A,
int lda,
125 const int *nnzPerRow, T_data *csrValA,
int *csrRowPtrA,
128 T_data *M,
bool load_from_host);
131 T_data *M,
bool load_from_host);
136 template <
class T_data>
137 cusparseStatus_t
carma_gemv(cusparseHandle_t handle,
char op_A, T_data alpha,
141 template <
class T_data>
142 cusparseStatus_t
carma_gemm(cusparseHandle_t handle,
char op_A, T_data alpha,
146 template <
class T_data>
147 cusparseStatus_t
carma_gemm(cusparseHandle_t handle,
char op_A,
char op_B,
152 template <
class T_data>
155 template <
class T_data>
159 template <
class T_data>
163 template <
class T_data>
165 const T_data *__restrict x, T_data beta, T_data *y);
cusparseStatus_t carma_csr2bsr(CarmaSparseObj< T_data > *src, int block_dim, CarmaSparseObj< T_data > *dest)
cusparseStatus_t carma_csr2dense(CarmaSparseObj< T_data > *src, T_data *dest)
cusparseStatus_t carma_bsr2csr(CarmaSparseObj< T_data > *src, CarmaSparseObj< T_data > *dest)
void * magma_s_sparse_matrix
int carma_kgemv(CarmaSparseObj< T_data > *A, T_data alpha, const T_data *__restrict x, T_data beta, T_data *y)
void * magma_d_sparse_matrix
cusparseStatus_t carma_gemm(cusparseHandle_t handle, char op_A, T_data alpha, CarmaSparseObj< T_data > *A, CarmaObj< T_data > *B, T_data beta, CarmaObj< T_data > *C)
cusparseStatus_t carma_gemv(cusparseHandle_t handle, char op_A, T_data alpha, CarmaSparseObj< T_data > *A, T_data *x, T_data beta, T_data *y)
this class provides the context in which CarmaObj are created
this class provides wrappers to the generic carma object
this class provides wrappers to the generic carma sparse host object
this class provides wrappers to the generic carma sparse object
CarmaSparseObj(CarmaObj< T_data > *M)
char get_major_dim() const
T_data * operator[](int index)
CarmaSparseObj(CarmaContext *current_context, CarmaSparseHostObj< T_data > *M)
void allocate(int nnz, int dim1, int dim2)
virtual ~CarmaSparseObj()
int device
device where the CarmaObj is allocate
void operator=(CarmaSparseObj< T_data > &M)
CarmaSparseObj(CarmaContext *current_context)
long dims_data[3]
dimensions of the array
int nz_elem
number of elements in the array
magma_d_sparse_matrix d_sparse_mat
void set_majorDim(char c)
magma_s_sparse_matrix s_sparse_mat
void resize(int nnz_, int dim1_, int dim2_)
CarmaContext * current_context
CarmaSparseObj(CarmaSparseObj< T_data > *M)
void sparse_to_host(int *h_rowInd, int *h_colInd, T_data *h_data)
CarmaContext * get_context()
void operator=(CarmaSparseHostObj< T_data > &M)
T_data * get_data(int index)
CarmaSparseObj(CarmaContext *current_context, const long *dims, T_data *values, int *colind, int *rowind, int nz, bool load_from_host)
CarmaSparseObj(CarmaContext *current_context, const long *dims, T_data *M, bool load_from_host)