COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
carma_sparse_host_obj.h
Go to the documentation of this file.
1 // -----------------------------------------------------------------------------
2 // This file is part of COMPASS <https://anr-compass.github.io/compass/>
3 //
4 // Copyright (C) 2011-2023 COMPASS Team <https://github.com/ANR-COMPASS>
5 // All rights reserved.
6 
7 // -----------------------------------------------------------------------------
8 
16 
17 
18 #ifndef CARMASPARSEHOSTOBJ_H_
19 #define CARMASPARSEHOSTOBJ_H_
20 #include "carma_host_obj.h"
21 
22 template <class T_data>
23 class CarmaSparseObj;
24 
25 template <class T_data>
27  public:
31  CarmaSparseHostObj(const long* dims, T_data* M, char order);
33 
34  // delete all arrays and create new for nnz=new_nnz
35  void resize(int new_nnz, int dim1_, int dim2_);
36 
39 
40  void init_from_matrix(const long* dims, T_data* M, char major_dim);
41  void copy_into_matrix(T_data* M, char major_dim);
44  char get_major_dim() const { return major_dim; }
45 
47  operator T_data*() { return h_data; }
48  T_data* operator[](int index) { return &h_data[index]; }
49  T_data* get_data() { return h_data; }
50  T_data* get_data(int index) { return &h_data[index]; }
51  const long* get_dims() { return dims_data; }
52  long get_dims(int i) { return dims_data[i]; }
53  int get_nonzero_elem() { return nz_elem; }
54 
55  private:
56  void _create(int nnz_, int dim1_, int dim2_); // create new arrays
57  void _clear(); // clear arrays
58 
59  char major_dim; // U - undefined
60  // R - row major
61  // C - col major
62 
63  MemAlloc malloc_type;
64 
65  public:
66  long dims_data[3];
67  int nz_elem;
68 
69  // see Sparse Matrix Storage Formats (coordinate format)
70  // ONE-BASED!!!!
71  T_data* h_data;
72  int* rowind;
73  int* colind;
74 };
75 
76 // Multiply sparce matrix by vector
77 // y := alpha*A*x + betta * y
78 template <class T_data>
79 void carma_gemv(T_data alpha, CarmaSparseHostObj<T_data>* A,
80  CarmaHostObj<T_data>* x, T_data betta,
82  void (*ptr_coomv)(char* transa, long* m, long* k, T_data* alpha,
83  char* matdescra, T_data* val, int* rowind,
84  int* colind, int* nnz, T_data* x,
85  T_data* beta, T_data* y));
86 
87 // Multiply sparce matrix by dense matrix
88 // C := alpha*op(A)*B + betta * y
89 // op_A could be N (do nothing) or T (transpose)
90 template <class T_data>
91 void carma_gemm(char op_A, T_data alpha, CarmaSparseHostObj<T_data>* A,
92  CarmaHostObj<T_data>* B, T_data betta,
94 
95 // Multiply sparce matrix by dense matrix
96 // C := alpha*A*B + betta * y
97 template <class T_data>
98 inline void carma_gemm(T_data alpha, CarmaSparseHostObj<T_data>* A,
99  CarmaHostObj<T_data>* B, T_data betta,
101  kp_gemm('N', alpha, A, B, betta, C);
102 }
103 
104 #endif /* CARMASPARSEHOSTOBJ_H_ */
MemAlloc
void carma_gemv(T_data alpha, CarmaSparseHostObj< T_data > *A, CarmaHostObj< T_data > *x, T_data betta, CarmaHostObj< T_data > *y, void(*ptr_coomv)(char *transa, long *m, long *k, T_data *alpha, char *matdescra, T_data *val, int *rowind, int *colind, int *nnz, T_data *x, T_data *beta, T_data *y))
void carma_gemm(char op_A, T_data alpha, CarmaSparseHostObj< T_data > *A, CarmaHostObj< T_data > *B, T_data betta, CarmaHostObj< T_data > *C)
this class provides wrappers to the generic carma host object
this class provides wrappers to the generic carma sparse host object
CarmaSparseHostObj(const long *dims, T_data *M, char order)
void resize(int new_nnz, int dim1_, int dim2_)
void operator=(CarmaSparseHostObj< T_data > &M)
CarmaSparseHostObj(CarmaSparseObj< T_data > &sm)
void init_from_matrix(const long *dims, T_data *M, char major_dim)
T_data * operator[](int index)
T_data * get_data(int index)
CarmaSparseHostObj(CarmaSparseHostObj< T_data > &sm)
void copy_into_matrix(T_data *M, char major_dim)
virtual ~CarmaSparseHostObj()
int nz_elem
number of elements in the array
long dims_data[3]
dimensions of the array
void operator=(CarmaSparseObj< T_data > &M)
this class provides wrappers to the generic carma sparse object