COMPASS  5.0.0
End-to-end AO simulation tool using GPU acceleration
carma_cublas.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 terms of the GNU Lesser
9 // General Public License as published by the Free Software Foundation, either version 3 of the License,
10 // 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 the simulation of AO systems.
14 //
15 // The final product includes a software package for simulating all the critical subcomponents of AO,
16 // particularly in the context of the ELT and a real-time core based on several control approaches,
17 // with performances consistent with its integration into an instrument. Taking advantage of the specific
18 // hardware architecture of the GPU, the COMPASS tool allows to achieve adequate execution speeds to
19 // conduct large simulation campaigns called to the ELT.
20 //
21 // The COMPASS platform can be used to carry a wide variety of simulations to both testspecific components
22 // of AO of the E-ELT (such as wavefront analysis device with a pyramid or elongated Laser star), and
23 // various systems configurations such as multi-conjugate AO.
24 //
25 // COMPASS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the
26 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 // See the GNU Lesser General Public License for more details.
28 //
29 // You should have received a copy of the GNU Lesser General Public License along with COMPASS.
30 // If not, see <https://www.gnu.org/licenses/lgpl-3.0.txt>.
31 // -----------------------------------------------------------------------------
32 
40 
41 
42 #ifndef CARMA_CUBLAS_H_
43 #define CARMA_CUBLAS_H_
44 
45 #include <cuda_runtime_api.h>
46 /* Using updated (v2) interfaces to cublas */
47 #include <cublas_v2.h>
48 #include <string>
49 
50 #define carma_checkCublasStatus(status) \
51  __carma_checkCublasStatus(status, __LINE__, __FILE__)
52 
53 cublasStatus_t __carma_checkCublasStatus(cublasStatus_t status, int line,
54  std::string file);
55 
56 cublasStatus_t carma_initCublas(cublasHandle_t *cublas_handle);
57 cublasStatus_t carma_shutdownCublas(cublasHandle_t cublas_handle);
58 
59 cublasOperation_t carma_char2cublas_operation(char operation);
60 
61 /*
62  * _____ _____ __ __ ____ _ _ _____ _____ ____
63  *|_ _| ____| \/ | _ \| | / \|_ _| ____/ ___|
64  * | | | _| | |\/| | |_) | | / _ \ | | | _| \___ \
65  * | | | |___| | | | __/| |___ / ___ \| | | |___ ___) |
66  * |_| |_____|_| |_|_| |_____/_/ \_\_| |_____|____/
67  *
68  */
69 
70 template <class T_data>
71 int carma_where_amax(cublasHandle_t cublas_handle, int n, const T_data *vect,
72  int incx);
73 
74 template <class T_data>
75 int carma_where_amin(cublasHandle_t cublas_handle, int n, const T_data *vect,
76  int incx);
77 
78 template <class T_data>
79 T_data carma_getasum(cublasHandle_t cublas_handle, int n, const T_data *vect,
80  int incx);
81 
82 template <class T_data>
83 cublasStatus_t carma_axpy(cublasHandle_t cublas_handle, int n,
84  const T_data alpha, const T_data *vectx, int incx,
85  T_data *vecty, int incy);
86 
87 template <class T_data>
88 T_data carma_dot(cublasHandle_t cublas_handle, int n, T_data *vectx, int incx,
89  T_data *vecty, int incy);
90 
91 template <class T_data>
92 T_data carma_nrm2(cublasHandle_t cublas_handle, int n, T_data *vect, int incx);
93 
94 template <class T_data>
95 cublasStatus_t carma_rot(cublasHandle_t cublas_handle, int n, T_data *vectx,
96  int incx, T_data *vecty, int incy, T_data sc,
97  T_data ss);
98 
99 template <class T_data>
100 cublasStatus_t carma_scal(cublasHandle_t cublas_handle, int n, T_data alpha,
101  T_data *vectx, int incx);
102 
103 template <class T_data>
104 cublasStatus_t carma_swap(cublasHandle_t cublas_handle, int n, T_data *vectx,
105  int incx, T_data *vecty, int incy);
106 
107 template <class T_data>
108 cublasStatus_t carma_copy(cublasHandle_t cublas_handle, int n,
109  const T_data *vectx, int incx, T_data *vecty,
110  int incy);
111 
112 template <class T_data>
113 cublasStatus_t carma_gemv(cublasHandle_t cublas_handle, char trans, int m,
114  int n, T_data alpha, T_data *matA, int lda,
115  T_data *vectx, int incx, T_data beta, T_data *vecty,
116  int incy);
117 
118 template <class T_data>
119 cublasStatus_t carma_symv(cublasHandle_t cublas_handle, char uplo, int n,
120  T_data alpha, T_data *matA, int lda, T_data *vectx,
121  int incx, T_data beta, T_data *vecty, int incy);
122 
123 template <class T_data>
124 cublasStatus_t carma_ger(cublasHandle_t cublas_handle, int m, int n,
125  T_data alpha, T_data *vectx, int incx, T_data *vecty,
126  int incy, T_data *matA, int lda);
127 
128 template <class T_data>
129 cublasStatus_t carma_gemm(cublasHandle_t cublas_handle, char transa,
130  char transb, int m, int n, int k, T_data alpha,
131  T_data *matA, int lda, T_data *matB, int ldb,
132  T_data beta, T_data *matC, int ldc);
133 
134 template <class T_data>
135 cublasStatus_t carma_symm(cublasHandle_t cublas_handle, char side, char uplo,
136  int m, int n, T_data alpha, T_data *matA, int lda,
137  T_data *matB, int ldb, T_data beta, T_data *matC,
138  int ldc);
139 
140 template <class T_data>
141 cublasStatus_t carma_syrk(cublasHandle_t cublas_handle, char uplo, char transa,
142  int n, int k, T_data alpha, T_data *matA, int lda,
143  T_data beta, T_data *matC, int ldc);
144 
145 template <class T_data>
146 cublasStatus_t carma_syrkx(cublasHandle_t cublas_handle, char uplo, char transa,
147  int n, int k, T_data alpha, T_data *matA, int lda,
148  T_data *matB, int ldb, T_data beta, T_data *matC,
149  int ldc);
150 
151 template <class T_data>
152 cublasStatus_t carma_geam(cublasHandle_t cublas_handle, char transa,
153  char transb, int m, int n, T_data alpha, T_data *matA,
154  int lda, T_data beta, T_data *matB, int ldb,
155  T_data *matC, int ldc);
156 
157 template <class T_data>
158 cublasStatus_t carma_dgmm(cublasHandle_t cublas_handle, char side, int m, int n,
159  const T_data *matA, int lda, const T_data *vectx,
160  int incx, T_data *matC, int ldc);
161 
162 #endif /* CARMA_CUBLAS_H_ */
carma_ger
cublasStatus_t carma_ger(cublasHandle_t cublas_handle, int m, int n, T_data alpha, T_data *vectx, int incx, T_data *vecty, int incy, T_data *matA, int lda)
carma_rot
cublasStatus_t carma_rot(cublasHandle_t cublas_handle, int n, T_data *vectx, int incx, T_data *vecty, int incy, T_data sc, T_data ss)
carma_gemv
cublasStatus_t carma_gemv(cublasHandle_t cublas_handle, 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_dot
T_data carma_dot(cublasHandle_t cublas_handle, int n, T_data *vectx, int incx, T_data *vecty, int incy)
carma_getasum
T_data carma_getasum(cublasHandle_t cublas_handle, int n, const T_data *vect, int incx)
__carma_checkCublasStatus
cublasStatus_t __carma_checkCublasStatus(cublasStatus_t status, int line, std::string file)
carma_shutdownCublas
cublasStatus_t carma_shutdownCublas(cublasHandle_t cublas_handle)
carma_swap
cublasStatus_t carma_swap(cublasHandle_t cublas_handle, int n, T_data *vectx, int incx, T_data *vecty, int incy)
carma_syrkx
cublasStatus_t carma_syrkx(cublasHandle_t cublas_handle, char uplo, char transa, int n, int k, T_data alpha, T_data *matA, int lda, T_data *matB, int ldb, T_data beta, T_data *matC, int ldc)
carma_symm
cublasStatus_t carma_symm(cublasHandle_t cublas_handle, char side, char uplo, int m, int n, T_data alpha, T_data *matA, int lda, T_data *matB, int ldb, T_data beta, T_data *matC, int ldc)
carma_symv
cublasStatus_t carma_symv(cublasHandle_t cublas_handle, char uplo, int n, T_data alpha, T_data *matA, int lda, T_data *vectx, int incx, T_data beta, T_data *vecty, int incy)
carma_nrm2
T_data carma_nrm2(cublasHandle_t cublas_handle, int n, T_data *vect, int incx)
carma_axpy
cublasStatus_t carma_axpy(cublasHandle_t cublas_handle, int n, const T_data alpha, const T_data *vectx, int incx, T_data *vecty, int incy)
carma_where_amax
int carma_where_amax(cublasHandle_t cublas_handle, int n, const T_data *vect, int incx)
carma_geam
cublasStatus_t carma_geam(cublasHandle_t cublas_handle, char transa, char transb, int m, int n, T_data alpha, T_data *matA, int lda, T_data beta, T_data *matB, int ldb, T_data *matC, int ldc)
carma_syrk
cublasStatus_t carma_syrk(cublasHandle_t cublas_handle, char uplo, char transa, int n, int k, T_data alpha, T_data *matA, int lda, T_data beta, T_data *matC, int ldc)
carma_scal
cublasStatus_t carma_scal(cublasHandle_t cublas_handle, int n, T_data alpha, T_data *vectx, int incx)
carma_char2cublas_operation
cublasOperation_t carma_char2cublas_operation(char operation)
carma_copy
cublasStatus_t carma_copy(cublasHandle_t cublas_handle, int n, const T_data *vectx, int incx, T_data *vecty, int incy)
carma_where_amin
int carma_where_amin(cublasHandle_t cublas_handle, int n, const T_data *vect, int incx)
carma_gemm
cublasStatus_t carma_gemm(cublasHandle_t cublas_handle, char transa, char transb, int m, int n, int k, T_data alpha, T_data *matA, int lda, T_data *matB, int ldb, T_data beta, T_data *matC, int ldc)
carma_dgmm
cublasStatus_t carma_dgmm(cublasHandle_t cublas_handle, char side, int m, int n, const T_data *matA, int lda, const T_data *vectx, int incx, T_data *matC, int ldc)
carma_initCublas
cublasStatus_t carma_initCublas(cublasHandle_t *cublas_handle)