COMPASS  5.4.4
End-to-end AO simulation tool using GPU acceleration
carma_cusolver.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 
15 
16 #ifndef _CARMA_CUSOLVER_H_
17 #define _CARMA_CUSOLVER_H_
18 
19 #include <carma_host_obj.h>
20 #include <carma_obj.h>
21 #include <carma_sparse_obj.h>
22 #include <cusolverDn.h>
23 
24 #ifndef SOLVER_EIG_MODE_VECTOR
25  #define SOLVER_EIG_MODE_VECTOR 'V'
26 #endif
27 #ifndef SOLVER_EIG_MODE_NOVECTOR
28  #define SOLVER_EIG_MODE_NOVECTOR 'N'
29 #endif
30 
31 cusolverStatus_t carma_init_cusolver(cusolverDnHandle_t *cusolver_handle);
32 cusolverStatus_t carma_shutdown_cusolver(cusolverDnHandle_t cusolver_handle);
33 
34 template <class T>
35 int carma_syevd(char jobz, CarmaObj<T> *mat,
36  CarmaObj<T> *eigenvals);
37 // template <class T, int method>
38 // int carma_syevd(cusolverDnHandle_t cusolver_handle, char jobz, CarmaObj<T> *mat, CarmaHostObj<T> *eigenvals);
39 // template <class T>
40 // int carma_syevd_m(cusolverDnHandle_t cusolver_handle, long ngpu, char jobz, long N, T *mat, T *eigenvals);
41 // template <class T>
42 // int carma_syevd_m(cusolverDnHandle_t cusolver_handle, long ngpu, char jobz, CarmaHostObj<T> *mat,
43 // CarmaHostObj<T> *eigenvals);
44 // template <class T>
45 // int carma_syevd_m(cusolverDnHandle_t cusolver_handle, long ngpu, char jobz, CarmaHostObj<T> *mat,
46 // CarmaHostObj<T> *eigenvals, CarmaHostObj<T> *U);
47 // template <class T>
48 // int carma_getri(CarmaObj<T> *d_iA);
49 template <class T>
51 // template <class T>
52 // int carma_potr_inv_m(long num_gpus, CarmaHostObj<T> *h_A, CarmaObj<T> *d_iA);
53 
54 // MAGMA functions (direct access)
55 template <class T>
56 int carma_syevd(cusolverDnHandle_t cusolver_handle, char jobz, long N, T *mat, T *eigenvals);
57 template <class T>
58 int carma_potr_inv(cusolverDnHandle_t cusolver_handle, long N, T *h_A);
59 // template <class T>
60 // int carma_potr_inv_m(cusolverDnHandle_t cusolver_handle, long num_gpus, long N, T *h_A, T *d_iA);
61 
62 // template <class T_data>
63 // int carma_svd_cpu(CarmaHostObj<T_data> *imat,
64 // CarmaHostObj<T_data> *eigenvals,
65 // CarmaHostObj<T_data> *mod2act,
66 // CarmaHostObj<T_data> *mes2mod);
67 // template <class T>
68 // int carma_getri_cpu(CarmaHostObj<T> *h_A);
69 // template <class T>
70 // int carma_potr_inv_cpu(CarmaHostObj<T> *h_A);
71 // template <class T>
72 // int carma_syevd_cpu(char jobz, CarmaHostObj<T> *h_A,
73 // CarmaHostObj<T> *eigenvals);
74 
75 // // MAGMA functions (direct access)
76 // // template <class T>
77 // // int carma_svd_cpu(long N, long M, T *imat, T *eigenvals, T *mod2act,
78 // // T *mes2mod);
79 // template <class T>
80 // int carma_getri_cpu(long N, T *h_A);
81 // template <class T>
82 // int carma_potr_inv_cpu(long N, T *h_A);
83 // template <class T>
84 // int carma_syevd_cpu(char jobz, long N, T *h_A, T *eigenvals);
85 // template <class T>
86 // int carma_axpy_cpu(long N, T alpha, T *h_X, long incX, T *h_Y, long incY);
87 // template <class T>
88 // int carma_gemm_cpu(char transa, char transb, long m, long n, long k, T alpha,
89 // T *A, long lda, T *B, long ldb, T beta, T *C, long ldc);
90 
91 // template <class T_data>
92 // int carma_cusolver_csr2ell(CarmaSparseObj<T_data> *dA);
93 
94 // template <class T_data>
95 // int carma_cusolver_spmv(T_data alpha, CarmaSparseObj<T_data> *dA,
96 // CarmaObj<T_data> *dx, T_data beta, CarmaObj<T_data>
97 // *dy);
98 
99 // template <class T_data>
100 // int carma_sparse_free(CarmaSparseObj<T_data> *dA);
101 
102 #endif // _CARMA_CUSOLVER_H_
int carma_syevd(char jobz, CarmaObj< T > *mat, CarmaObj< T > *eigenvals)
cusolverStatus_t carma_init_cusolver(cusolverDnHandle_t *cusolver_handle)
int carma_potr_inv(CarmaObj< T > *d_iA)
cusolverStatus_t carma_shutdown_cusolver(cusolverDnHandle_t cusolver_handle)