COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
carma_magma.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-2019 COMPASS Team <https://github.com/ANR-COMPASS>
5 // All rights reserved.
6 // Distributed under GNU - LGPL
7 //
8 // COMPASS is free software: you can redistribute it and/or modify it under the
9 // terms of the GNU Lesser General Public License as published by the Free
10 // Software Foundation, either version 3 of the License, or any later version.
11 //
12 // COMPASS: End-to-end AO simulation tool using GPU acceleration
13 // The COMPASS platform was designed to meet the need of high-performance for
14 // the simulation of AO systems.
15 //
16 // The final product includes a software package for simulating all the
17 // critical subcomponents of AO, particularly in the context of the ELT and a
18 // real-time core based on several control approaches, with performances
19 // consistent with its integration into an instrument. Taking advantage of the
20 // specific hardware architecture of the GPU, the COMPASS tool allows to
21 // achieve adequate execution speeds to conduct large simulation campaigns
22 // called to the ELT.
23 //
24 // The COMPASS platform can be used to carry a wide variety of simulations to
25 // both testspecific components of AO of the E-ELT (such as wavefront analysis
26 // device with a pyramid or elongated Laser star), and various systems
27 // configurations such as multi-conjugate AO.
28 //
29 // COMPASS is distributed in the hope that it will be useful, but WITHOUT ANY
30 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
31 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
32 // details.
33 //
34 // You should have received a copy of the GNU Lesser General Public License
35 // along with COMPASS. If not, see <https://www.gnu.org/licenses/lgpl-3.0.txt>.
36 // -----------------------------------------------------------------------------
37 
45 
46 #ifndef _CARMA_MAGMA_H_
47 #define _CARMA_MAGMA_H_
48 
49 #include <carma_host_obj.h>
50 #include <carma_obj.h>
51 #include <carma_sparse_obj.h>
52 
53 // MAGMA functions
55 // template <class T>
56 // int carma_svd(CarmaObj<T> *imat, CarmaObj<T> *eigenvals,
57 // CarmaObj<T> *mod2act, CarmaObj<T> *mes2mod);
58 template <class T>
59 int carma_magma_syevd(char jobz, CarmaObj<T> *mat,
60  CarmaHostObj<T> *eigenvals);
61 // template <class T, int method>
62 // int carma_magma_syevd(char jobz, CarmaObj<T> *mat, CarmaHostObj<T>
63 // *eigenvals);
64 template <class T>
65 int carma_magma_syevd_m(long ngpu, char jobz, long N, T *mat, T *eigenvals);
66 template <class T>
67 int carma_magma_syevd_m(long ngpu, char jobz, CarmaHostObj<T> *mat,
68  CarmaHostObj<T> *eigenvals);
69 template <class T>
70 int carma_magma_syevd_m(long ngpu, char jobz, CarmaHostObj<T> *mat,
71  CarmaHostObj<T> *eigenvals, CarmaHostObj<T> *U);
72 template <class T>
74 template <class T>
76 template <class T>
77 int carma_magma_potri_m(long num_gpus, CarmaHostObj<T> *h_A,
78  CarmaObj<T> *d_iA);
79 
80 // MAGMA functions (direct access)
81 template <class T>
82 int carma_magma_syevd(char jobz, long N, T *mat, T *eigenvals);
83 // template <class T>
84 // int carma_magma_potri_m(long num_gpus, long N, T *h_A, T *d_iA);
85 
86 template <class T_data>
88  CarmaHostObj<T_data> *eigenvals,
89  CarmaHostObj<T_data> *mod2act,
90  CarmaHostObj<T_data> *mes2mod);
91 template <class T>
93 template <class T>
95 template <class T>
97  CarmaHostObj<T> *eigenvals);
98 
99 // MAGMA functions (direct access)
100 // template <class T>
101 // int carma_magma_svd_cpu(long N, long M, T *imat, T *eigenvals, T *mod2act,
102 // T *mes2mod);
103 template <class T>
104 int carma_magma_getri_cpu(long N, T *h_A);
105 template <class T>
106 int carma_magma_potri_cpu(long N, T *h_A);
107 template <class T>
108 int carma_magma_syevd_cpu(char jobz, long N, T *h_A, T *eigenvals);
109 template <class T>
110 int carma_magma_axpy_cpu(long N, T alpha, T *h_X, long incX, T *h_Y, long incY);
111 template <class T>
112 int carma_gemm_cpu(char transa, char transb, long m, long n, long k, T alpha,
113  T *A, long lda, T *B, long ldb, T beta, T *C, long ldc);
114 
115 template <class T_data>
116 int carma_magma_gemv(char trans, int m, int n, T_data alpha, T_data *matA,
117  int lda, T_data *vectx, int incx, T_data beta,
118  T_data *vecty, int incy);
119 
120 template <class T_data>
122 
123 template <class T_data>
125  CarmaObj<T_data> *dx, T_data beta, CarmaObj<T_data> *dy);
126 
127 template <class T_data>
129 
130 #endif // _CARMA_MAGMA_H_
carma_magma_gemv
int carma_magma_gemv(char trans, int m, int n, T_data alpha, T_data *matA, int lda, T_data *vectx, int incx, T_data beta, T_data *vecty, int incy)
carma_gemm_cpu
int carma_gemm_cpu(char transa, char transb, long m, long n, long k, T alpha, T *A, long lda, T *B, long ldb, T beta, T *C, long ldc)
carma_magma_axpy_cpu
int carma_magma_axpy_cpu(long N, T alpha, T *h_X, long incX, T *h_Y, long incY)
carma_magma_syevd_m
int carma_magma_syevd_m(long ngpu, char jobz, long N, T *mat, T *eigenvals)
carma_magma_svd_cpu
int carma_magma_svd_cpu(CarmaHostObj< T_data > *imat, CarmaHostObj< T_data > *eigenvals, CarmaHostObj< T_data > *mod2act, CarmaHostObj< T_data > *mes2mod)
carma_magma_syevd_cpu
int carma_magma_syevd_cpu(char jobz, CarmaHostObj< T > *h_A, CarmaHostObj< T > *eigenvals)
carma_magma_getri
int carma_magma_getri(CarmaObj< T > *d_iA)
carma_magma_potri
int carma_magma_potri(CarmaObj< T > *d_iA)
carma_magma_csr2ell
int carma_magma_csr2ell(CarmaSparseObj< T_data > *dA)
CarmaObj< T >
carma_obj.h
CarmaSparseObj
this class provides wrappers to the generic carma sparse object
Definition: carma_sparse_host_obj.h:48
carma_magma_syevd
int carma_magma_syevd(char jobz, CarmaObj< T > *mat, CarmaHostObj< T > *eigenvals)
carma_magma_getri_cpu
int carma_magma_getri_cpu(CarmaHostObj< T > *h_A)
CarmaHostObj
this class provides wrappers to the generic carma host object
Definition: carma_host_obj.h:68
carma_magma_sparse_free
int carma_magma_sparse_free(CarmaSparseObj< T_data > *dA)
carma_magma_potri_m
int carma_magma_potri_m(long num_gpus, CarmaHostObj< T > *h_A, CarmaObj< T > *d_iA)
carma_magma_potri_cpu
int carma_magma_potri_cpu(CarmaHostObj< T > *h_A)
carma_sparse_obj.h
carma_magma_disabled
int carma_magma_disabled()
carma_magma_spmv
int carma_magma_spmv(T_data alpha, CarmaSparseObj< T_data > *dA, CarmaObj< T_data > *dx, T_data beta, CarmaObj< T_data > *dy)
carma_host_obj.h