1 // Copyright 2019, University of Freiburg.
2 // Chair of Algorithms and Data Structures.
3 // Markus Näther <naetherm@informatik.uni-freiburg.de>
4 
5 module derelict.cublas.cublas;
6 
7 import derelict.util.loader;
8 import derelict.cuda.runtimeapi;
9 
10 
11 private
12 {
13   import derelict.util.system;
14 
15   static if(Derelict_OS_Windows)
16     // Don't know, please check!
17     enum libNames = "cublas32_1000.dll,cublas64_1000.dll";
18   else static if (Derelict_OS_Mac)
19     // Don't know, please check!
20     enum libNames = "libcublas.dylib,/usr/local/lib/libcublas.dylib";
21   else static if (Derelict_OS_Linux)
22   {
23     version(X86)
24       enum libNames = "libcublas.so,libcublas.so.10.0,/opt/cuda/lib/libcublas.so";
25     else version(X86_64)
26       enum libNames = "libcublas.so,libcublas.so.10.0,/opt/cuda/lib64/libcublas.so,/usr/lib/x86_64-linux-gnu/libcublas.so.10.0";
27     else
28       static assert(0, "Need to implement CUDA libNames for this arch.");
29   }
30   else
31     static assert(0, "Need to implement CUDA libNames for this operating system.");
32 }
33 
34 
35 
36 /* CUBLAS status type returns */
37 alias cublasStatus_t = int;
38 enum : cublasStatus_t {
39   CUBLAS_STATUS_SUCCESS         =0,
40   CUBLAS_STATUS_NOT_INITIALIZED =1,
41   CUBLAS_STATUS_ALLOC_FAILED    =3,
42   CUBLAS_STATUS_INVALID_VALUE   =7,
43   CUBLAS_STATUS_ARCH_MISMATCH   =8,
44   CUBLAS_STATUS_MAPPING_ERROR   =11,
45   CUBLAS_STATUS_EXECUTION_FAILED=13,
46   CUBLAS_STATUS_INTERNAL_ERROR  =14,
47   CUBLAS_STATUS_NOT_SUPPORTED   =15,
48   CUBLAS_STATUS_LICENSE_ERROR   =16
49 }
50 
51 
52 alias cublasFillMode_t = int;
53 enum : cublasFillMode_t {
54   CUBLAS_FILL_MODE_LOWER=0,
55   CUBLAS_FILL_MODE_UPPER=1
56 }
57 
58 alias cublasDiagType_t = int;
59 enum : cublasDiagType_t {
60   CUBLAS_DIAG_NON_UNIT=0,
61   CUBLAS_DIAG_UNIT=1
62 }
63 
64 alias cublasSideMode_t = int;
65 enum : cublasSideMode_t {
66   CUBLAS_SIDE_LEFT =0,
67   CUBLAS_SIDE_RIGHT=1
68 }
69 
70 
71 alias cublasOperation_t = int;
72 enum : cublasOperation_t {
73   CUBLAS_OP_N=0,
74   CUBLAS_OP_T=1,
75   CUBLAS_OP_C=2
76 }
77 
78 
79 alias cublasPointerMode_t = int;
80 enum : cublasPointerMode_t {
81   CUBLAS_POINTER_MODE_HOST   = 0,
82   CUBLAS_POINTER_MODE_DEVICE = 1
83 }
84 
85 alias cublasAtomicsMode_t = int;
86 enum : cublasAtomicsMode_t {
87   CUBLAS_ATOMICS_NOT_ALLOWED   = 0,
88   CUBLAS_ATOMICS_ALLOWED       = 1
89 }
90 
91 /*For different GEMM algorithm */
92 alias cublasGemmAlgo_t = int;
93 enum : cublasGemmAlgo_t {
94   CUBLAS_GEMM_DFALT               = -1,
95   CUBLAS_GEMM_DEFAULT             = -1,
96   CUBLAS_GEMM_ALGO0               =  0,
97   CUBLAS_GEMM_ALGO1               =  1,
98   CUBLAS_GEMM_ALGO2               =  2,
99   CUBLAS_GEMM_ALGO3               =  3,
100   CUBLAS_GEMM_ALGO4               =  4,
101   CUBLAS_GEMM_ALGO5               =  5,
102   CUBLAS_GEMM_ALGO6               =  6,
103   CUBLAS_GEMM_ALGO7               =  7,
104   CUBLAS_GEMM_ALGO8               =  8,
105   CUBLAS_GEMM_ALGO9               =  9,
106   CUBLAS_GEMM_ALGO10              =  10,
107   CUBLAS_GEMM_ALGO11              =  11,
108   CUBLAS_GEMM_ALGO12              =  12,
109   CUBLAS_GEMM_ALGO13              =  13,
110   CUBLAS_GEMM_ALGO14              =  14,
111   CUBLAS_GEMM_ALGO15              =  15,
112   CUBLAS_GEMM_ALGO16              =  16,
113   CUBLAS_GEMM_ALGO17              =  17,
114   CUBLAS_GEMM_ALGO18              =  18, //sliced 32x32
115   CUBLAS_GEMM_ALGO19              =  19, //sliced 64x32
116   CUBLAS_GEMM_ALGO20              =  20, //sliced 128x32
117   CUBLAS_GEMM_ALGO21              =  21, //sliced 32x32  -splitK
118   CUBLAS_GEMM_ALGO22              =  22, //sliced 64x32  -splitK
119   CUBLAS_GEMM_ALGO23              =  23, //sliced 128x32 -splitK
120   CUBLAS_GEMM_DEFAULT_TENSOR_OP   =  99,
121   CUBLAS_GEMM_DFALT_TENSOR_OP     =  99,
122   CUBLAS_GEMM_ALGO0_TENSOR_OP     =  100,
123   CUBLAS_GEMM_ALGO1_TENSOR_OP     =  101,
124   CUBLAS_GEMM_ALGO2_TENSOR_OP     =  102,
125   CUBLAS_GEMM_ALGO3_TENSOR_OP     =  103,
126   CUBLAS_GEMM_ALGO4_TENSOR_OP     =  104,
127   CUBLAS_GEMM_ALGO5_TENSOR_OP     =  105,
128   CUBLAS_GEMM_ALGO6_TENSOR_OP     =  106,
129   CUBLAS_GEMM_ALGO7_TENSOR_OP     =  107,
130   CUBLAS_GEMM_ALGO8_TENSOR_OP     =  108,
131   CUBLAS_GEMM_ALGO9_TENSOR_OP     =  109,
132   CUBLAS_GEMM_ALGO10_TENSOR_OP     =  110,
133   CUBLAS_GEMM_ALGO11_TENSOR_OP     =  111,
134   CUBLAS_GEMM_ALGO12_TENSOR_OP     =  112,
135   CUBLAS_GEMM_ALGO13_TENSOR_OP     =  113,
136   CUBLAS_GEMM_ALGO14_TENSOR_OP     =  114,
137   CUBLAS_GEMM_ALGO15_TENSOR_OP     =  115
138 }
139 
140 /*Enum for default math mode/tensor operation*/
141 alias cublasMath_t = int;
142 enum : cublasMath_t {
143   CUBLAS_DEFAULT_MATH = 0,
144   CUBLAS_TENSOR_OP_MATH = 1
145 }
146 
147 /* For backward compatibility purposes */
148 alias cublasDataType_t = cudaDataType;
149 
150 /* Opaque structure holding CUBLAS library context */
151 struct cublasContext;
152 alias cublasHandle_t = cublasContext*;
153 
154 
155 extern(System) nothrow {
156   alias cublasLogCallback = void function(const char *msg);
157 }
158 
159 
160 extern(System) @nogc nothrow {
161   alias da_cublasCreate_v2 = cublasStatus_t function(cublasHandle_t *handle);
162   alias da_cublasDestroy_v2 = cublasStatus_t function(cublasHandle_t handle);
163   alias da_cublasGetVersion_v2 = cublasStatus_t function(cublasHandle_t handle, int *pVersion);
164   alias da_cublasGetProperty = cublasStatus_t function(libraryPropertyType type, int *value);
165   alias da_cublasSetStream_v2 = cublasStatus_t function(cublasHandle_t handle, cudaStream_t streamId);
166   alias da_cublasGetStream_v2 = cublasStatus_t function(cublasHandle_t handle, cudaStream_t *streamId);
167   alias da_cublasGetPointerMode_v2 = cublasStatus_t function(cublasHandle_t handle, cublasPointerMode_t *mode);
168   alias da_cublasSetPointerMode_v2 = cublasStatus_t function(cublasHandle_t handle, cublasPointerMode_t mode);
169   alias da_cublasGetAtomicsMode = cublasStatus_t function(cublasHandle_t handle, cublasAtomicsMode_t *mode);
170   alias da_cublasSetAtomicsMode = cublasStatus_t function(cublasHandle_t handle, cublasAtomicsMode_t mode);
171   alias da_cublasGetMathMode = cublasStatus_t function(cublasHandle_t handle, cublasMath_t *mode);
172   alias da_cublasSetMathMode = cublasStatus_t function(cublasHandle_t handle, cublasMath_t mode);
173   alias da_cublasLoggerConfigure = cublasStatus_t function(int logIsOn, int logToStdOut, int logToStdErr, const char* logFileName);
174   alias da_cublasSetLoggerCallback = cublasStatus_t function(cublasLogCallback userCallback);
175   alias da_cublasGetLoggerCallback = cublasStatus_t function(cublasLogCallback* userCallback);
176   alias da_cublasSetVector = cublasStatus_t function(int n, int elemSize, const void *x,int incx, void *devicePtr, int incy);
177   alias da_cublasGetVector = cublasStatus_t function(int n, int elemSize, const void *x,int incx, void *y, int incy);
178   alias da_cublasSetMatrix = cublasStatus_t function(int rows, int cols, int elemSize,const void *A, int lda, void *B,int ldb);
179   alias da_cublasGetMatrix = cublasStatus_t function(int rows, int cols, int elemSize,const void *A, int lda, void *B,int ldb);
180   alias da_cublasSetVectorAsync = cublasStatus_t function(int n, int elemSize,const void *hostPtr, int incx,void *devicePtr, int incy,cudaStream_t stream);
181   alias da_cublasGetVectorAsync = cublasStatus_t function(int n, int elemSize,const void *devicePtr, int incx,void *hostPtr, int incy,cudaStream_t stream);
182   alias da_cublasSetMatrixAsync = cublasStatus_t function(int rows, int cols, int elemSize,const void *A, int lda, void *B,int ldb, cudaStream_t stream);
183   alias da_cublasGetMatrixAsync = cublasStatus_t function(int rows, int cols, int elemSize,const void *A, int lda, void *B,int ldb, cudaStream_t stream);
184   alias da_cublasXerbla = void function(const char *srName, int info);
185   alias da_cublasNrm2Ex = cublasStatus_t function(cublasHandle_t handle,int n,const void *x,cudaDataType xType,int incx,void *result,cudaDataType resultType,cudaDataType executionType);
186   alias da_cublasSnrm2_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *x,int incx,float *result);
187   alias da_cublasDnrm2_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *x,int incx,double *result);
188   alias da_cublasScnrm2_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,float *result);
189   alias da_cublasDznrm2_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,double *result);
190   alias da_cublasDotEx = cublasStatus_t function(cublasHandle_t handle,int n,const void *x,cudaDataType xType,int incx,const void *y,cudaDataType yType,int incy,void *result,cudaDataType resultType,cudaDataType executionType);
191   alias da_cublasDotcEx = cublasStatus_t function(cublasHandle_t handle,int n,const void *x,cudaDataType xType,int incx,const void *y,cudaDataType yType,int incy,void *result,cudaDataType resultType,cudaDataType executionType);
192   alias da_cublasSdot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *x,int incx,const float *y,int incy,float *result);
193   alias da_cublasDdot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *x,int incx,const double *y,int incy,double *result);
194   alias da_cublasCdotu_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *result);
195   alias da_cublasCdotc_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *result);
196   alias da_cublasZdotu_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *result);
197   alias da_cublasZdotc_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *result);
198   alias da_cublasScalEx = cublasStatus_t function(cublasHandle_t handle,int n,const void *alpha, cudaDataType alphaType,void *x,cudaDataType xType,int incx,cudaDataType executionType);
199   alias da_cublasSscal_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *alpha, float *x,int incx);
200   alias da_cublasDscal_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *alpha, double *x,int incx);
201   alias da_cublasCscal_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *alpha,cuComplex *x,int incx);
202   alias da_cublasCsscal_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *alpha,cuComplex *x,int incx);
203   alias da_cublasZscal_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *alpha,cuDoubleComplex *x,int incx);
204   alias da_cublasZdscal_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *alpha,cuDoubleComplex *x,int incx);
205   alias da_cublasAxpyEx = cublasStatus_t function(cublasHandle_t handle,int n,const void *alpha,cudaDataType alphaType,const void *x,cudaDataType xType,int incx,void *y,cudaDataType yType,int incy,cudaDataType executiontype);
206   alias da_cublasSaxpy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *alpha,const float *x,int incx,float *y,int incy);
207   alias da_cublasDaxpy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *alpha,const double *x,int incx,double *y,int incy);
208   alias da_cublasCaxpy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *alpha,const cuComplex *x,int incx,cuComplex *y,int incy);
209   alias da_cublasZaxpy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *x,int incx,cuDoubleComplex *y,int incy);
210   alias da_cublasScopy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *x,int incx,float *y,int incy);
211   alias da_cublasDcopy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *x,int incx,double *y,int incy);
212   alias da_cublasCcopy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,cuComplex *y,int incy);
213   alias da_cublasZcopy_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,cuDoubleComplex *y,int incy);
214   alias da_cublasSswap_v2 = cublasStatus_t function(cublasHandle_t handle,int n,float *x,int incx,float *y,int incy);
215   alias da_cublasDswap_v2 = cublasStatus_t function(cublasHandle_t handle,int n,double *x,int incx,double *y,int incy);
216   alias da_cublasCswap_v2 = cublasStatus_t function(cublasHandle_t handle,int n,cuComplex *x,int incx,cuComplex *y,int incy);
217   alias da_cublasZswap_v2 = cublasStatus_t function(cublasHandle_t handle,int n,cuDoubleComplex *x,int incx,cuDoubleComplex *y,int incy);
218   alias da_cublasIsamax_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *x,int incx,int *result);
219   alias da_cublasIdamax_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *x,int incx,int *result);
220   alias da_cublasIcamax_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,int *result);
221   alias da_cublasIzamax_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,int *result);
222   alias da_cublasIsamin_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *x,int incx,int *result);
223   alias da_cublasIdamin_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *x,int incx,int *result);
224   alias da_cublasIcamin_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,int *result);
225   alias da_cublasIzamin_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,int *result);
226   alias da_cublasSasum_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const float *x,int incx,float *result);
227   alias da_cublasDasum_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const double *x,int incx,double *result);
228   alias da_cublasScasum_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *x,int incx,float *result);
229   alias da_cublasDzasum_v2 = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *x,int incx,double *result);
230   alias da_cublasSrot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,float *x,int incx,float *y,int incy,const float *c, const float *s);
231   alias da_cublasDrot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,double *x,int incx,double *y,int incy,const double *c, const double *s);
232   alias da_cublasCrot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,cuComplex *x,int incx,cuComplex *y,int incy,const float *c,     const cuComplex *s);
233   alias da_cublasCsrot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,cuComplex *x,int incx,cuComplex *y,int incy,const float *c, const float *s);
234   alias da_cublasZrot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,cuDoubleComplex *x,int incx,cuDoubleComplex *y,int incy,const double *c,           const cuDoubleComplex *s);
235   alias da_cublasZdrot_v2 = cublasStatus_t function(cublasHandle_t handle,int n,cuDoubleComplex *x,int incx,cuDoubleComplex *y,int incy,const double *c, const double *s);
236   alias da_cublasSrotg_v2 = cublasStatus_t function(cublasHandle_t handle,float *a,  float *b,  float *c,  float *s);
237   alias da_cublasDrotg_v2 = cublasStatus_t function(cublasHandle_t handle,double *a, double *b, double *c, double *s);
238   alias da_cublasCrotg_v2 = cublasStatus_t function(cublasHandle_t handle,cuComplex *a, cuComplex *b, float *c,     cuComplex *s);
239   alias da_cublasZrotg_v2 = cublasStatus_t function(cublasHandle_t handle,cuDoubleComplex *a, cuDoubleComplex *b, double *c,          cuDoubleComplex *s);
240   alias da_cublasSrotm_v2 = cublasStatus_t function(cublasHandle_t handle,int n,float *x,int incx,float *y,int incy,const float* param);
241   alias da_cublasDrotm_v2 = cublasStatus_t function(cublasHandle_t handle,int n,double *x,int incx,double *y,int incy,const double* param);
242   alias da_cublasSrotmg_v2 = cublasStatus_t function(cublasHandle_t handle,float *d1,       float *d2,       float *x1,       const float *y1, float *param);
243   alias da_cublasDrotmg_v2 = cublasStatus_t function(cublasHandle_t handle,double *d1,       double *d2,       double *x1,       const double *y1, double *param);
244   alias da_cublasSgemv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,const float *alpha,const float *A,int lda,const float *x,int incx,const float *beta, float *y,int incy);
245   alias da_cublasDgemv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,const double *alpha,const double *A,int lda,const double *x,int incx,const double *beta,double *y,int incy);
246   alias da_cublasCgemv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *x,int incx,const cuComplex *beta,cuComplex *y,int incy);
247   alias da_cublasZgemv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *x,int incx,const cuDoubleComplex *beta,cuDoubleComplex *y,int incy);
248   alias da_cublasSgbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,int kl,int ku,const float *alpha,const float *A,int lda,const float *x,int incx,const float *beta,float *y,int incy);
249   alias da_cublasDgbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,int kl,int ku,const double *alpha,const double *A,int lda,const double *x,int incx,const double *beta,double *y,int incy);
250   alias da_cublasCgbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,int kl,int ku,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *x,int incx,const cuComplex *beta,cuComplex *y,int incy);
251   alias da_cublasZgbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t trans,int m,int n,int kl,int ku,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *x,int incx,const cuDoubleComplex *beta,cuDoubleComplex *y,int incy);
252   alias da_cublasStrmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const float *A,int lda,float *x,int incx);
253   alias da_cublasDtrmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const double *A,int lda,double *x,int incx);
254   alias da_cublasCtrmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuComplex *A,int lda,cuComplex *x,int incx);
255   alias da_cublasZtrmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuDoubleComplex *A,int lda,cuDoubleComplex *x,int incx);
256   alias da_cublasStbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const float *A,int lda,float *x,int incx);
257   alias da_cublasDtbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const double *A,int lda,double *x,int incx);
258   alias da_cublasCtbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const cuComplex *A,int lda,cuComplex *x,int incx);
259   alias da_cublasZtbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const cuDoubleComplex *A,int lda,cuDoubleComplex *x,int incx);
260   alias da_cublasStpmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const float *AP,float *x,int incx);
261   alias da_cublasDtpmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const double *AP,double *x,int incx);
262   alias da_cublasCtpmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuComplex *AP,cuComplex *x,int incx);
263   alias da_cublasZtpmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuDoubleComplex *AP,cuDoubleComplex *x,int incx);
264   alias da_cublasStrsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const float *A,int lda,float *x,int incx);
265   alias da_cublasDtrsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const double *A,int lda,double *x,int incx);
266   alias da_cublasCtrsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuComplex *A,int lda,cuComplex *x,int incx);
267   alias da_cublasZtrsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuDoubleComplex *A,int lda,cuDoubleComplex *x,int incx);
268   alias da_cublasStpsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const float *AP,float *x,int incx);
269   alias da_cublasDtpsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const double *AP,double *x,int incx);
270   alias da_cublasCtpsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuComplex *AP,cuComplex *x,int incx);
271   alias da_cublasZtpsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,const cuDoubleComplex *AP,cuDoubleComplex *x,int incx);
272   alias da_cublasStbsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const float *A,int lda,float *x,int incx);
273   alias da_cublasDtbsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const double *A,int lda,double *x,int incx);
274   alias da_cublasCtbsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const cuComplex *A,int lda,cuComplex *x,int incx);
275   alias da_cublasZtbsv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int n,int k,const cuDoubleComplex *A,int lda,cuDoubleComplex *x,int incx);
276   alias da_cublasSsymv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha,const float *A,int lda,const float *x,int incx,const float *beta,float *y,int incy);
277   alias da_cublasDsymv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const double *A,int lda,const double *x,int incx,const double *beta,double *y,int incy);
278   alias da_cublasCsymv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *x,int incx,const cuComplex *beta,cuComplex *y,int incy);
279   alias da_cublasZsymv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha, const cuDoubleComplex *A,int lda,const cuDoubleComplex *x,int incx,const cuDoubleComplex *beta,  cuDoubleComplex *y,int incy);
280   alias da_cublasChemv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *x,int incx,const cuComplex *beta,cuComplex *y,int incy);
281   alias da_cublasZhemv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha, const cuDoubleComplex *A,int lda,const cuDoubleComplex *x,int incx,const cuDoubleComplex *beta,  cuDoubleComplex *y,int incy);
282   alias da_cublasSsbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,int k,const float *alpha,  const float *A,int lda,const float *x,int incx,const float *beta, float *y,int incy);
283   alias da_cublasDsbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,int k,const double *alpha,  const double *A,int lda,const double *x,int incx,const double *beta,  double *y,int incy);
284   alias da_cublasChbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *x,int incx,const cuComplex *beta,cuComplex *y,int incy);
285   alias da_cublasZhbmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *x,int incx,const cuDoubleComplex *beta,cuDoubleComplex *y,int incy);
286   alias da_cublasSspmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha, const float *AP,const float *x,int incx,const float *beta,  float *y,int incy);
287   alias da_cublasDspmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const double *AP,const double *x,int incx,const double *beta, double *y,int incy);
288   alias da_cublasChpmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *alpha,const cuComplex *AP,const cuComplex *x,int incx,const cuComplex *beta,cuComplex *y,int incy);
289   alias da_cublasZhpmv_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *AP,const cuDoubleComplex *x,int incx,const cuDoubleComplex *beta,cuDoubleComplex *y,int incy);
290   alias da_cublasSger_v2 = cublasStatus_t function(cublasHandle_t handle,int m,int n,const float *alpha,const float *x,int incx,const float *y,int incy,float *A,int lda);
291   alias da_cublasDger_v2 = cublasStatus_t function(cublasHandle_t handle,int m,int n,const double *alpha,const double *x,int incx,const double *y,int incy,double *A,int lda);
292   alias da_cublasCgeru_v2 = cublasStatus_t function(cublasHandle_t handle,int m,int n,const cuComplex *alpha,const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *A,int lda);
293   alias da_cublasCgerc_v2 = cublasStatus_t function(cublasHandle_t handle,int m,int n,const cuComplex *alpha,const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *A,int lda);
294   alias da_cublasZgeru_v2 = cublasStatus_t function(cublasHandle_t handle,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *A,int lda);
295   alias da_cublasZgerc_v2 = cublasStatus_t function(cublasHandle_t handle,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *A,int lda);
296   alias da_cublasSsyr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha,const float *x,int incx,float *A,int lda);
297   alias da_cublasDsyr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const double *x,int incx,double *A,int lda);
298   alias da_cublasCsyr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *alpha,const cuComplex *x,int incx,cuComplex *A,int lda);
299   alias da_cublasZsyr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *x,int incx,cuDoubleComplex *A,int lda);
300   alias da_cublasCher_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha,const cuComplex *x,int incx,cuComplex *A,int lda);
301   alias da_cublasZher_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const cuDoubleComplex *x,int incx,cuDoubleComplex *A,int lda);
302   alias da_cublasSspr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha,const float *x,int incx,float *AP);
303   alias da_cublasDspr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const double *x,int incx,double *AP);
304   alias da_cublasChpr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha,const cuComplex *x,int incx,cuComplex *AP);
305   alias da_cublasZhpr_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const cuDoubleComplex *x,int incx,cuDoubleComplex *AP);
306   alias da_cublasSsyr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha,const float *x,int incx,const float *y,int incy,float *A,int lda);
307   alias da_cublasDsyr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha,const double *x,int incx,const double *y,int incy,double *A,int lda);
308   alias da_cublasCsyr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo, int n,const cuComplex *alpha, const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *A,int lda);
309   alias da_cublasZsyr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha, const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *A,int lda);
310   alias da_cublasCher2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo, int n,const cuComplex *alpha, const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *A,int lda);
311   alias da_cublasZher2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha, const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *A,int lda);
312   alias da_cublasSspr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *alpha, const float *x,int incx,const float *y,int incy,float *AP);
313   alias da_cublasDspr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *alpha, const double *x,int incx,const double *y,int incy,double *AP);
314   alias da_cublasChpr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *alpha,const cuComplex *x,int incx,const cuComplex *y,int incy,cuComplex *AP);
315   alias da_cublasZhpr2_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *x,int incx,const cuDoubleComplex *y,int incy,cuDoubleComplex *AP);
316   alias da_cublasSgemm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const float *alpha,const float *A,int lda,const float *B,int ldb,const float *beta,float *C,int ldc);
317   alias da_cublasDgemm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const double *alpha,const double *A,int lda,const double *B,int ldb,const double *beta,double *C,int ldc);
318   alias da_cublasCgemm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const cuComplex *beta,cuComplex *C,int ldc);
319   alias da_cublasCgemm3m = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const cuComplex *beta,cuComplex *C,int ldc);
320   alias da_cublasCgemm3mEx = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa, cublasOperation_t transb,int m, int n, int k,const cuComplex *alpha,const void *A,cudaDataType Atype,int lda,const void  *B,cudaDataType Btype,int ldb,const cuComplex *beta,void *C,cudaDataType Ctype,int ldc);
321   alias da_cublasZgemm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const cuDoubleComplex *beta,cuDoubleComplex *C,int ldc);
322   alias da_cublasZgemm3m = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const cuDoubleComplex *beta,cuDoubleComplex *C,int ldc);
323   //alias da_cublasHgemm = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const __half *alpha,const __half *A,int lda,const __half *B,int ldb,const __half *beta,__half *C,int ldc);
324   alias da_cublasSgemmEx = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const float *alpha,const void *A,cudaDataType Atype,int lda,const void *B,cudaDataType Btype,int ldb,const float *beta,void *C,cudaDataType Ctype,int ldc);
325   alias da_cublasGemmEx = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const void *alpha,const void *A,cudaDataType Atype,int lda,const void *B,cudaDataType Btype,int ldb,const void *beta,void *C,cudaDataType Ctype,int ldc,cudaDataType computeType,cublasGemmAlgo_t algo);
326   alias da_cublasCgemmEx = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa, cublasOperation_t transb,int m, int n, int k,const cuComplex *alpha,const void *A,cudaDataType Atype,int lda,const void *B,cudaDataType Btype,int ldb,const cuComplex *beta,void *C,cudaDataType Ctype,int ldc);
327   alias da_cublasUint8gemmBias = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa, cublasOperation_t transb, cublasOperation_t transc,int m, int n, int k,const dchar *A, int A_bias, int lda,const dchar *B, int B_bias, int ldb,dchar *C, int C_bias, int ldc,int C_mult, int C_shift);
328   alias da_cublasSsyrk_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const float *alpha,const float *A,int lda,const float *beta,float *C,int ldc);
329   alias da_cublasDsyrk_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const double *alpha, const double *A,int lda,const double *beta, double *C,int ldc);
330   alias da_cublasCsyrk_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *beta,cuComplex *C,int ldc);
331   alias da_cublasZsyrk_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *beta,cuDoubleComplex *C,int ldc);
332   alias da_cublasCsyrkEx = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const void *A,cudaDataType Atype,int lda,const cuComplex *beta,void *C,cudaDataType Ctype,int ldc);
333   alias da_cublasCsyrk3mEx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const void *A,cudaDataType Atype,int lda,const cuComplex *beta,void *C,cudaDataType Ctype,int ldc);
334   alias da_cublasCherk_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const float *alpha, const cuComplex *A,int lda,const float *beta,  cuComplex *C,int ldc);
335   alias da_cublasZherk_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const double *alpha, const cuDoubleComplex *A,int lda,const double *beta, cuDoubleComplex *C,int ldc);
336   alias da_cublasCherkEx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const float *alpha, const void *A,cudaDataType Atype,int lda,const float *beta,  void *C,cudaDataType Ctype,int ldc);
337   alias da_cublasCherk3mEx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const float *alpha,const void *A, cudaDataType Atype,int lda,const float *beta,void *C,cudaDataType Ctype,int ldc);
338   alias da_cublasSsyr2k_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const float *alpha,const float *A,int lda,const float *B,int ldb,const float *beta,float *C,int ldc);
339   alias da_cublasDsyr2k_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const double *alpha,const double *A,int lda,const double *B,int ldb,const double *beta,double *C,int ldc);
340   alias da_cublasCsyr2k_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const cuComplex *beta,cuComplex *C,int ldc);
341   alias da_cublasZsyr2k_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuDoubleComplex *alpha, const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const cuDoubleComplex *beta, cuDoubleComplex *C,int ldc);
342   alias da_cublasCher2k_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const float *beta,  cuComplex *C,int ldc);
343   alias da_cublasZher2k_v2 = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const double *beta,cuDoubleComplex *C,int ldc);
344   alias da_cublasSsyrkx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const float *alpha,const float *A,int lda,const float *B,int ldb,const float *beta,float *C,int ldc);
345   alias da_cublasDsyrkx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const double *alpha,const double *A,int lda,const double *B,int ldb,const double *beta,double *C,int ldc);
346   alias da_cublasCsyrkx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const cuComplex *beta,cuComplex *C,int ldc);
347   alias da_cublasZsyrkx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const cuDoubleComplex *beta,cuDoubleComplex *C,int ldc);
348   alias da_cublasCherkx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const float *beta,cuComplex *C,int ldc);
349   alias da_cublasZherkx = cublasStatus_t function(cublasHandle_t handle,cublasFillMode_t uplo,cublasOperation_t trans,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const double *beta,cuDoubleComplex *C,int ldc);
350   alias da_cublasSsymm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,int m,int n,const float *alpha,const float *A,int lda,const float *B,int ldb,const float *beta,float *C,int ldc);
351   alias da_cublasDsymm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,int m,int n,const double *alpha,const double *A,int lda,const double *B,int ldb,const double *beta,double *C,int ldc);
352   alias da_cublasCsymm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,int m,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const cuComplex *beta,cuComplex *C,int ldc);
353   alias da_cublasZsymm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const cuDoubleComplex *beta,cuDoubleComplex *C,int ldc);
354   alias da_cublasChemm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,int m,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,const cuComplex *beta,cuComplex *C,int ldc);
355   alias da_cublasZhemm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,const cuDoubleComplex *beta,cuDoubleComplex *C,int ldc);
356   alias da_cublasStrsm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const float *alpha,const float *A,int lda,float *B,int ldb);
357   alias da_cublasDtrsm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const double *alpha,const double *A,int lda,double *B,int ldb);
358   alias da_cublasCtrsm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const cuComplex *alpha,const cuComplex *A,int lda,cuComplex *B,int ldb);
359   alias da_cublasZtrsm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,cuDoubleComplex *B,int ldb);
360   alias da_cublasStrmm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const float *alpha,const float *A,int lda,const float *B,int ldb,float *C,int ldc);
361   alias da_cublasDtrmm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const double *alpha,const double *A,int lda,const double *B,int ldb,double *C,int ldc);
362   alias da_cublasCtrmm_v2 = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *B,int ldb,cuComplex *C,int ldc);
363   alias da_cublasZtrmm_v2 = cublasStatus_t function(cublasHandle_t handle, cublasSideMode_t side,cublasFillMode_t uplo,cublasOperation_t trans,cublasDiagType_t diag,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *B,int ldb,cuDoubleComplex *C,int ldc);
364   //alias da_cublasHgemmBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const __half *alpha, const __half *const Aarray[],int lda,const __half *const Barray[],int ldb,const __half *beta,  __half *const Carray[],int ldc,int batchCount);
365   alias da_cublasSgemmBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const float *alpha, const float *[] Aarray,int lda,const float *[] Barray,int ldb,const float *beta,  float *[] Carray,int ldc,int batchCount);
366   alias da_cublasDgemmBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const double *alpha, const double *[] Aarray,int lda,const double *[] Barray,int ldb,const double *beta, double *[] Carray,int ldc,int batchCount);
367   alias da_cublasCgemmBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuComplex *alpha,const cuComplex *[] Aarray,int lda,const cuComplex *[] Barray,int ldb,const cuComplex *beta,cuComplex *[] Carray,int ldc,int batchCount);
368   alias da_cublasCgemm3mBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuComplex *alpha,const cuComplex *[] Aarray,int lda,const cuComplex *[] Barray,int ldb,const cuComplex *beta,cuComplex *[] Carray,int ldc,int batchCount);
369   alias da_cublasZgemmBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuDoubleComplex *alpha,const cuDoubleComplex *[] Aarray,int lda,const cuDoubleComplex *[] Barray,int ldb,const cuDoubleComplex *beta,cuDoubleComplex *[] Carray,int ldc,int batchCount);
370   alias da_cublasGemmBatchedEx = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const void *alpha,const void *[] Aarray,cudaDataType Atype,int lda,const void *[] Barray,cudaDataType Btype,int ldb,const void *beta,void *[] Carray,cudaDataType Ctype,int ldc,int batchCount,cudaDataType computeType,cublasGemmAlgo_t algo);
371   alias da_cublasGemmStridedBatchedEx = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const void *alpha, const void *A,cudaDataType Atype,int lda,long strideA,   const void *B,cudaDataType Btype,int ldb,long strideB,const void *beta,  void *C,cudaDataType Ctype,int ldc,long strideC,int batchCount,cudaDataType computeType,cublasGemmAlgo_t algo);
372   alias da_cublasSgemmStridedBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const float *alpha, const float *A,int lda,long strideA,   const float *B,int ldb,long strideB,const float *beta,  float *C,int ldc,long strideC,int batchCount);
373   alias da_cublasDgemmStridedBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const double *alpha, const double *A,int lda,long strideA,   const double *B,int ldb,long strideB,const double *beta,  double *C,int ldc,long strideC,int batchCount);
374   alias da_cublasCgemmStridedBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuComplex *alpha, const cuComplex *A,int lda,long strideA,   const cuComplex *B,int ldb,long strideB,const cuComplex *beta,  cuComplex *C,int ldc,long strideC,int batchCount);
375   alias da_cublasCgemm3mStridedBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuComplex *alpha, const cuComplex *A,int lda,long strideA,   const cuComplex *B,int ldb,long strideB,const cuComplex *beta,  cuComplex *C,int ldc,long strideC,int batchCount);
376   alias da_cublasZgemmStridedBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const cuDoubleComplex *alpha, const cuDoubleComplex *A,int lda,long strideA,   const cuDoubleComplex *B,int ldb,long strideB,const cuDoubleComplex *beta,   /* host or device poi */cuDoubleComplex *C,int ldc,long strideC,int batchCount);
377   //alias da_cublasHgemmStridedBatched = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,int k,const __half *alpha, const __half *A,int lda,long strideA,   const __half *B,int ldb,long strideB,const __half *beta,  __half *C,int ldc,long strideC,int batchCount);
378   alias da_cublasSgeam = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,const float *alpha,const float *A,int lda,const float *beta ,const float *B,int ldb,float *C,int ldc);
379   alias da_cublasDgeam = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m, int n,const double *alpha,const double *A,int lda,const double *beta,const double *B,int ldb,double *C,int ldc);
380   alias da_cublasCgeam = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,const cuComplex *alpha,const cuComplex *A,int lda,const cuComplex *beta,const cuComplex *B,int ldb,cuComplex *C,int ldc);
381   alias da_cublasZgeam = cublasStatus_t function(cublasHandle_t handle,cublasOperation_t transa,cublasOperation_t transb,int m,int n,const cuDoubleComplex *alpha,const cuDoubleComplex *A,int lda,const cuDoubleComplex *beta,const cuDoubleComplex *B,int ldb,cuDoubleComplex *C,int ldc);
382   alias da_cublasSgetrfBatched = cublasStatus_t function(cublasHandle_t handle,int n,float *[] A,                int lda,int *P,                          int *info,                       int batchSize);
383   alias da_cublasDgetrfBatched = cublasStatus_t function(cublasHandle_t handle,int n,double *[] A,               int lda,int *P,                          int *info,                       int batchSize);
384   alias da_cublasCgetrfBatched = cublasStatus_t function(cublasHandle_t handle,int n,cuComplex *[] A,           int lda,int *P,                         int *info,                      int batchSize);
385   alias da_cublasZgetrfBatched = cublasStatus_t function(cublasHandle_t handle,int n,cuDoubleComplex *[] A,     int lda,int *P,                         int *info,                      int batchSize);
386   alias da_cublasSgetriBatched = cublasStatus_t function(cublasHandle_t handle,int n,const float *[] A,         int lda,const int *P,                   float *[] C,               int ldc,int *info,int batchSize);
387   alias da_cublasDgetriBatched = cublasStatus_t function(cublasHandle_t handle,int n,const double *[] A,        int lda,const int *P,                   double *[] C,              int ldc,int *info,int batchSize);
388   alias da_cublasCgetriBatched = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *[] A,     int lda,const int *P,                   cuComplex *[] C,           int ldc,int *info,int batchSize);
389   alias da_cublasZgetriBatched = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *[] A, int lda,const int *P,                     cuDoubleComplex *[] C,       int ldc,int *info,int batchSize);
390   alias da_cublasSgetrsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int n,int nrhs,const float *[] Aarray,int lda,const int *devIpiv,float *[] Barray,int ldb,int *info,int batchSize);
391   alias da_cublasDgetrsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int n,int nrhs,const double *[] Aarray,int lda,const int *devIpiv,double *[] Barray,int ldb,int *info,int batchSize);
392   alias da_cublasCgetrsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int n,int nrhs,const cuComplex *[] Aarray,int lda,const int *devIpiv,cuComplex *[] Barray,int ldb,int *info,int batchSize);
393   alias da_cublasZgetrsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int n,int nrhs,const cuDoubleComplex *[] Aarray,int lda,const int *devIpiv,cuDoubleComplex *[] Barray,int ldb,int *info,int batchSize);
394   alias da_cublasStrsmBatched = cublasStatus_t function( cublasHandle_t    handle,cublasSideMode_t  side,cublasFillMode_t  uplo,cublasOperation_t trans,cublasDiagType_t  diag,int m,int n,const float *alpha,           const float *[] A,int lda,float *[] B,int ldb,int batchCount);
395   alias da_cublasDtrsmBatched = cublasStatus_t function( cublasHandle_t    handle,cublasSideMode_t  side,cublasFillMode_t  uplo,cublasOperation_t trans,cublasDiagType_t  diag,int m,int n,const double *alpha,          const double *[] A,int lda,double *[] B,int ldb,int batchCount);
396   alias da_cublasCtrsmBatched = cublasStatus_t function( cublasHandle_t    handle,cublasSideMode_t  side,cublasFillMode_t  uplo,cublasOperation_t trans,cublasDiagType_t  diag,int m,int n,const cuComplex *alpha,       const cuComplex *[] A,int lda,cuComplex *[] B,int ldb,int batchCount);
397   alias da_cublasZtrsmBatched = cublasStatus_t function( cublasHandle_t    handle,cublasSideMode_t  side,cublasFillMode_t  uplo,cublasOperation_t trans,cublasDiagType_t  diag,int m,int n,const cuDoubleComplex *alpha, const cuDoubleComplex *[] A,int lda,cuDoubleComplex *[] B,int ldb,int batchCount);
398   alias da_cublasSmatinvBatched = cublasStatus_t function(cublasHandle_t handle,int n,const float *[] A,      int lda,float *[] Ainv,         int lda_inv,int *info,                   int batchSize);
399   alias da_cublasDmatinvBatched = cublasStatus_t function(cublasHandle_t handle,int n,const double *[] A,     int lda,double *[] Ainv,        int lda_inv,int *info,                   int batchSize);
400   alias da_cublasCmatinvBatched = cublasStatus_t function(cublasHandle_t handle,int n,const cuComplex *[] A,  int lda,cuComplex *[] Ainv,     int lda_inv,int *info,                   int batchSize);
401   alias da_cublasZmatinvBatched = cublasStatus_t function(cublasHandle_t handle,int n,const cuDoubleComplex *[] A, int lda,cuDoubleComplex *[] Ainv,    int lda_inv,int *info,                        int batchSize);
402   alias da_cublasSgeqrfBatched = cublasStatus_t function( cublasHandle_t handle,int m,int n,float *[] Aarray,      int lda,float *[] TauArray,    int *info,int batchSize);
403   alias da_cublasDgeqrfBatched = cublasStatus_t function( cublasHandle_t handle,int m,int n,double *[] Aarray,     int lda,double *[] TauArray,   int *info,int batchSize);
404   alias da_cublasCgeqrfBatched = cublasStatus_t function( cublasHandle_t handle,int m,int n,cuComplex *[] Aarray,          int lda,cuComplex *[] TauArray,        int *info,int batchSize);
405   alias da_cublasZgeqrfBatched = cublasStatus_t function( cublasHandle_t handle,int m,int n,cuDoubleComplex *[] Aarray,    int lda,cuDoubleComplex *[] TauArray,  int *info,int batchSize);
406   alias da_cublasSgelsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int m,int n,int nrhs,float *[] Aarray,      int lda,float *[] Carray,      int ldc,int *info,int *devInfoArray,          int batchSize );
407   alias da_cublasDgelsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int m,int n,int nrhs,double *[] Aarray,     int lda,double *[] Carray,     int ldc,int *info,int *devInfoArray,          int batchSize);
408   alias da_cublasCgelsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int m,int n,int nrhs,cuComplex *[] Aarray,  int lda,cuComplex *[] Carray,  int ldc,int *info,int *devInfoArray,int batchSize);
409   alias da_cublasZgelsBatched = cublasStatus_t function( cublasHandle_t handle,cublasOperation_t trans,int m,int n,int nrhs,cuDoubleComplex *[] Aarray,  int lda,cuDoubleComplex *[] Carray,  int ldc,int *info,int *devInfoArray,int batchSize);
410   alias da_cublasSdgmm = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t mode,int m,int n,const float *A,int lda,const float *x,int incx,float *C,int ldc);
411   alias da_cublasDdgmm = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t mode,int m,int n,const double *A,int lda,const double *x,int incx,double *C,int ldc);
412   alias da_cublasCdgmm = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t mode,int m,int n,const cuComplex *A,int lda,const cuComplex *x,int incx,cuComplex *C,int ldc);
413   alias da_cublasZdgmm = cublasStatus_t function(cublasHandle_t handle,cublasSideMode_t mode,int m,int n,const cuDoubleComplex *A,int lda,const cuDoubleComplex *x,int incx,cuDoubleComplex *C,int ldc);
414   alias da_cublasStpttr = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *AP,float *A,int lda );
415   alias da_cublasDtpttr = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *AP,double *A,int lda );
416   alias da_cublasCtpttr = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *AP,cuComplex *A,int lda );
417   alias da_cublasZtpttr = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *AP,cuDoubleComplex *A,int lda );
418   alias da_cublasStrttp = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const float *A,int lda,float *AP );
419   alias da_cublasDtrttp = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const double *A,int lda,double *AP );
420   alias da_cublasCtrttp = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuComplex *A,int lda,cuComplex *AP );
421   alias da_cublasZtrttp = cublasStatus_t function( cublasHandle_t handle,cublasFillMode_t uplo,int n,const cuDoubleComplex *A,int lda,cuDoubleComplex *AP );
422 }
423 
424 __gshared
425 {
426   da_cublasCreate_v2 cublasCreate_v2;
427   da_cublasDestroy_v2 cublasDestroy_v2;
428   da_cublasGetVersion_v2 cublasGetVersion_v2;
429   da_cublasGetProperty cublasGetProperty;
430   da_cublasSetStream_v2 cublasSetStream_v2;
431   da_cublasGetStream_v2 cublasGetStream_v2;
432   da_cublasGetPointerMode_v2 cublasGetPointerMode_v2;
433   da_cublasSetPointerMode_v2 cublasSetPointerMode_v2;
434   da_cublasGetAtomicsMode cublasGetAtomicsMode;
435   da_cublasSetAtomicsMode cublasSetAtomicsMode;
436   da_cublasGetMathMode cublasGetMathMode;
437   da_cublasSetMathMode cublasSetMathMode;
438   da_cublasLoggerConfigure cublasLoggerConfigure;
439   da_cublasSetLoggerCallback cublasSetLoggerCallback;
440   da_cublasGetLoggerCallback cublasGetLoggerCallback;
441   da_cublasSetVector cublasSetVector;
442   da_cublasGetVector cublasGetVector;
443   da_cublasSetMatrix cublasSetMatrix;
444   da_cublasGetMatrix cublasGetMatrix;
445   da_cublasSetVectorAsync cublasSetVectorAsync;
446   da_cublasGetVectorAsync cublasGetVectorAsync;
447   da_cublasSetMatrixAsync cublasSetMatrixAsync;
448   da_cublasGetMatrixAsync cublasGetMatrixAsync;
449   da_cublasXerbla cublasXerbla;
450   da_cublasNrm2Ex cublasNrm2Ex;
451   da_cublasSnrm2_v2 cublasSnrm2_v2;
452   da_cublasDnrm2_v2 cublasDnrm2_v2;
453   da_cublasScnrm2_v2 cublasScnrm2_v2;
454   da_cublasDznrm2_v2 cublasDznrm2_v2;
455   da_cublasDotEx cublasDotEx;
456   da_cublasDotcEx cublasDotcEx;
457   da_cublasSdot_v2 cublasSdot_v2;
458   da_cublasDdot_v2 cublasDdot_v2;
459   da_cublasCdotu_v2 cublasCdotu_v2;
460   da_cublasCdotc_v2 cublasCdotc_v2;
461   da_cublasZdotu_v2 cublasZdotu_v2;
462   da_cublasZdotc_v2 cublasZdotc_v2;
463   da_cublasScalEx cublasScalEx;
464   da_cublasSscal_v2 cublasSscal_v2;
465   da_cublasDscal_v2 cublasDscal_v2;
466   da_cublasCscal_v2 cublasCscal_v2;
467   da_cublasCsscal_v2 cublasCsscal_v2;
468   da_cublasZscal_v2 cublasZscal_v2;
469   da_cublasZdscal_v2 cublasZdscal_v2;
470   da_cublasAxpyEx cublasAxpyEx;
471   da_cublasSaxpy_v2 cublasSaxpy_v2;
472   da_cublasDaxpy_v2 cublasDaxpy_v2;
473   da_cublasCaxpy_v2 cublasCaxpy_v2;
474   da_cublasZaxpy_v2 cublasZaxpy_v2;
475   da_cublasScopy_v2 cublasScopy_v2;
476   da_cublasDcopy_v2 cublasDcopy_v2;
477   da_cublasCcopy_v2 cublasCcopy_v2;
478   da_cublasZcopy_v2 cublasZcopy_v2;
479   da_cublasSswap_v2 cublasSswap_v2;
480   da_cublasDswap_v2 cublasDswap_v2;
481   da_cublasCswap_v2 cublasCswap_v2;
482   da_cublasZswap_v2 cublasZswap_v2;
483   da_cublasIsamax_v2 cublasIsamax_v2;
484   da_cublasIdamax_v2 cublasIdamax_v2;
485   da_cublasIcamax_v2 cublasIcamax_v2;
486   da_cublasIzamax_v2 cublasIzamax_v2;
487   da_cublasIsamin_v2 cublasIsamin_v2;
488   da_cublasIdamin_v2 cublasIdamin_v2;
489   da_cublasIcamin_v2 cublasIcamin_v2;
490   da_cublasIzamin_v2 cublasIzamin_v2;
491   da_cublasSasum_v2 cublasSasum_v2;
492   da_cublasDasum_v2 cublasDasum_v2;
493   da_cublasScasum_v2 cublasScasum_v2;
494   da_cublasDzasum_v2 cublasDzasum_v2;
495   da_cublasSrot_v2 cublasSrot_v2;
496   da_cublasDrot_v2 cublasDrot_v2;
497   da_cublasCrot_v2 cublasCrot_v2;
498   da_cublasCsrot_v2 cublasCsrot_v2;
499   da_cublasZrot_v2 cublasZrot_v2;
500   da_cublasZdrot_v2 cublasZdrot_v2;
501   da_cublasSrotg_v2 cublasSrotg_v2;
502   da_cublasDrotg_v2 cublasDrotg_v2;
503   da_cublasCrotg_v2 cublasCrotg_v2;
504   da_cublasZrotg_v2 cublasZrotg_v2;
505   da_cublasSrotm_v2 cublasSrotm_v2;
506   da_cublasDrotm_v2 cublasDrotm_v2;
507   da_cublasSrotmg_v2 cublasSrotmg_v2;
508   da_cublasDrotmg_v2 cublasDrotmg_v2;
509   da_cublasSgemv_v2 cublasSgemv_v2;
510   da_cublasDgemv_v2 cublasDgemv_v2;
511   da_cublasCgemv_v2 cublasCgemv_v2;
512   da_cublasZgemv_v2 cublasZgemv_v2;
513   da_cublasSgbmv_v2 cublasSgbmv_v2;
514   da_cublasDgbmv_v2 cublasDgbmv_v2;
515   da_cublasCgbmv_v2 cublasCgbmv_v2;
516   da_cublasZgbmv_v2 cublasZgbmv_v2;
517   da_cublasStrmv_v2 cublasStrmv_v2;
518   da_cublasDtrmv_v2 cublasDtrmv_v2;
519   da_cublasCtrmv_v2 cublasCtrmv_v2;
520   da_cublasZtrmv_v2 cublasZtrmv_v2;
521   da_cublasStbmv_v2 cublasStbmv_v2;
522   da_cublasDtbmv_v2 cublasDtbmv_v2;
523   da_cublasCtbmv_v2 cublasCtbmv_v2;
524   da_cublasZtbmv_v2 cublasZtbmv_v2;
525   da_cublasStpmv_v2 cublasStpmv_v2;
526   da_cublasDtpmv_v2 cublasDtpmv_v2;
527   da_cublasCtpmv_v2 cublasCtpmv_v2;
528   da_cublasZtpmv_v2 cublasZtpmv_v2;
529   da_cublasStrsv_v2 cublasStrsv_v2;
530   da_cublasDtrsv_v2 cublasDtrsv_v2;
531   da_cublasCtrsv_v2 cublasCtrsv_v2;
532   da_cublasZtrsv_v2 cublasZtrsv_v2;
533   da_cublasStpsv_v2 cublasStpsv_v2;
534   da_cublasDtpsv_v2 cublasDtpsv_v2;
535   da_cublasCtpsv_v2 cublasCtpsv_v2;
536   da_cublasZtpsv_v2 cublasZtpsv_v2;
537   da_cublasStbsv_v2 cublasStbsv_v2;
538   da_cublasDtbsv_v2 cublasDtbsv_v2;
539   da_cublasCtbsv_v2 cublasCtbsv_v2;
540   da_cublasZtbsv_v2 cublasZtbsv_v2;
541   da_cublasSsymv_v2 cublasSsymv_v2;
542   da_cublasDsymv_v2 cublasDsymv_v2;
543   da_cublasCsymv_v2 cublasCsymv_v2;
544   da_cublasZsymv_v2 cublasZsymv_v2;
545   da_cublasChemv_v2 cublasChemv_v2;
546   da_cublasZhemv_v2 cublasZhemv_v2;
547   da_cublasSsbmv_v2 cublasSsbmv_v2;
548   da_cublasDsbmv_v2 cublasDsbmv_v2;
549   da_cublasChbmv_v2 cublasChbmv_v2;
550   da_cublasZhbmv_v2 cublasZhbmv_v2;
551   da_cublasSspmv_v2 cublasSspmv_v2;
552   da_cublasDspmv_v2 cublasDspmv_v2;
553   da_cublasChpmv_v2 cublasChpmv_v2;
554   da_cublasZhpmv_v2 cublasZhpmv_v2;
555   da_cublasSger_v2 cublasSger_v2;
556   da_cublasDger_v2 cublasDger_v2;
557   da_cublasCgeru_v2 cublasCgeru_v2;
558   da_cublasCgerc_v2 cublasCgerc_v2;
559   da_cublasZgeru_v2 cublasZgeru_v2;
560   da_cublasZgerc_v2 cublasZgerc_v2;
561   da_cublasSsyr_v2 cublasSsyr_v2;
562   da_cublasDsyr_v2 cublasDsyr_v2;
563   da_cublasCsyr_v2 cublasCsyr_v2;
564   da_cublasZsyr_v2 cublasZsyr_v2;
565   da_cublasCher_v2 cublasCher_v2;
566   da_cublasZher_v2 cublasZher_v2;
567   da_cublasSspr_v2 cublasSspr_v2;
568   da_cublasDspr_v2 cublasDspr_v2;
569   da_cublasChpr_v2 cublasChpr_v2;
570   da_cublasZhpr_v2 cublasZhpr_v2;
571   da_cublasSsyr2_v2 cublasSsyr2_v2;
572   da_cublasDsyr2_v2 cublasDsyr2_v2;
573   da_cublasCsyr2_v2 cublasCsyr2_v2;
574   da_cublasZsyr2_v2 cublasZsyr2_v2;
575   da_cublasCher2_v2 cublasCher2_v2;
576   da_cublasZher2_v2 cublasZher2_v2;
577   da_cublasSspr2_v2 cublasSspr2_v2;
578   da_cublasDspr2_v2 cublasDspr2_v2;
579   da_cublasChpr2_v2 cublasChpr2_v2;
580   da_cublasZhpr2_v2 cublasZhpr2_v2;
581   da_cublasSgemm_v2 cublasSgemm_v2;
582   da_cublasDgemm_v2 cublasDgemm_v2;
583   da_cublasCgemm_v2 cublasCgemm_v2;
584   da_cublasCgemm3m cublasCgemm3m;
585   da_cublasCgemm3mEx cublasCgemm3mEx;
586   da_cublasZgemm_v2 cublasZgemm_v2;
587   da_cublasZgemm3m cublasZgemm3m;
588   //da_cublasHgemm cublasHgemm;
589   da_cublasSgemmEx cublasSgemmEx;
590   da_cublasGemmEx cublasGemmEx;
591   da_cublasCgemmEx cublasCgemmEx;
592   da_cublasUint8gemmBias cublasUint8gemmBias;
593   da_cublasSsyrk_v2 cublasSsyrk_v2;
594   da_cublasDsyrk_v2 cublasDsyrk_v2;
595   da_cublasCsyrk_v2 cublasCsyrk_v2;
596   da_cublasZsyrk_v2 cublasZsyrk_v2;
597   da_cublasCsyrkEx cublasCsyrkEx;
598   da_cublasCsyrk3mEx cublasCsyrk3mEx;
599   da_cublasCherk_v2 cublasCherk_v2;
600   da_cublasZherk_v2 cublasZherk_v2;
601   da_cublasCherkEx cublasCherkEx;
602   da_cublasCherk3mEx cublasCherk3mEx;
603   da_cublasSsyr2k_v2 cublasSsyr2k_v2;
604   da_cublasDsyr2k_v2 cublasDsyr2k_v2;
605   da_cublasCsyr2k_v2 cublasCsyr2k_v2;
606   da_cublasZsyr2k_v2 cublasZsyr2k_v2;
607   da_cublasCher2k_v2 cublasCher2k_v2;
608   da_cublasZher2k_v2 cublasZher2k_v2;
609   da_cublasSsyrkx cublasSsyrkx;
610   da_cublasDsyrkx cublasDsyrkx;
611   da_cublasCsyrkx cublasCsyrkx;
612   da_cublasZsyrkx cublasZsyrkx;
613   da_cublasCherkx cublasCherkx;
614   da_cublasZherkx cublasZherkx;
615   da_cublasSsymm_v2 cublasSsymm_v2;
616   da_cublasDsymm_v2 cublasDsymm_v2;
617   da_cublasCsymm_v2 cublasCsymm_v2;
618   da_cublasZsymm_v2 cublasZsymm_v2;
619   da_cublasChemm_v2 cublasChemm_v2;
620   da_cublasZhemm_v2 cublasZhemm_v2;
621   da_cublasStrsm_v2 cublasStrsm_v2;
622   da_cublasDtrsm_v2 cublasDtrsm_v2;
623   da_cublasCtrsm_v2 cublasCtrsm_v2;
624   da_cublasZtrsm_v2 cublasZtrsm_v2;
625   da_cublasStrmm_v2 cublasStrmm_v2;
626   da_cublasDtrmm_v2 cublasDtrmm_v2;
627   da_cublasCtrmm_v2 cublasCtrmm_v2;
628   da_cublasZtrmm_v2 cublasZtrmm_v2;
629   //da_cublasHgemmBatched cublasHgemmBatched;
630   da_cublasSgemmBatched cublasSgemmBatched;
631   da_cublasDgemmBatched cublasDgemmBatched;
632   da_cublasCgemmBatched cublasCgemmBatched;
633   da_cublasCgemm3mBatched cublasCgemm3mBatched;
634   da_cublasZgemmBatched cublasZgemmBatched;
635   da_cublasGemmBatchedEx cublasGemmBatchedEx;
636   da_cublasGemmStridedBatchedEx cublasGemmStridedBatchedEx;
637   da_cublasSgemmStridedBatched cublasSgemmStridedBatched;
638   da_cublasDgemmStridedBatched cublasDgemmStridedBatched;
639   da_cublasCgemmStridedBatched cublasCgemmStridedBatched;
640   da_cublasCgemm3mStridedBatched cublasCgemm3mStridedBatched;
641   da_cublasZgemmStridedBatched cublasZgemmStridedBatched;
642   //da_cublasHgemmStridedBatched cublasHgemmStridedBatched;
643   da_cublasSgeam cublasSgeam;
644   da_cublasDgeam cublasDgeam;
645   da_cublasCgeam cublasCgeam;
646   da_cublasZgeam cublasZgeam;
647   da_cublasSgetrfBatched cublasSgetrfBatched;
648   da_cublasDgetrfBatched cublasDgetrfBatched;
649   da_cublasCgetrfBatched cublasCgetrfBatched;
650   da_cublasZgetrfBatched cublasZgetrfBatched;
651   da_cublasSgetriBatched cublasSgetriBatched;
652   da_cublasDgetriBatched cublasDgetriBatched;
653   da_cublasCgetriBatched cublasCgetriBatched;
654   da_cublasZgetriBatched cublasZgetriBatched;
655   da_cublasSgetrsBatched cublasSgetrsBatched;
656   da_cublasDgetrsBatched cublasDgetrsBatched;
657   da_cublasCgetrsBatched cublasCgetrsBatched;
658   da_cublasZgetrsBatched cublasZgetrsBatched;
659   da_cublasStrsmBatched cublasStrsmBatched;
660   da_cublasDtrsmBatched cublasDtrsmBatched;
661   da_cublasCtrsmBatched cublasCtrsmBatched;
662   da_cublasZtrsmBatched cublasZtrsmBatched;
663   da_cublasSmatinvBatched cublasSmatinvBatched;
664   da_cublasDmatinvBatched cublasDmatinvBatched;
665   da_cublasCmatinvBatched cublasCmatinvBatched;
666   da_cublasZmatinvBatched cublasZmatinvBatched;
667   da_cublasSgeqrfBatched cublasSgeqrfBatched;
668   da_cublasDgeqrfBatched cublasDgeqrfBatched;
669   da_cublasCgeqrfBatched cublasCgeqrfBatched;
670   da_cublasZgeqrfBatched cublasZgeqrfBatched;
671   da_cublasSgelsBatched cublasSgelsBatched;
672   da_cublasDgelsBatched cublasDgelsBatched;
673   da_cublasCgelsBatched cublasCgelsBatched;
674   da_cublasZgelsBatched cublasZgelsBatched;
675   da_cublasSdgmm cublasSdgmm;
676   da_cublasDdgmm cublasDdgmm;
677   da_cublasCdgmm cublasCdgmm;
678   da_cublasZdgmm cublasZdgmm;
679   da_cublasStpttr cublasStpttr;
680   da_cublasDtpttr cublasDtpttr;
681   da_cublasCtpttr cublasCtpttr;
682   da_cublasZtpttr cublasZtpttr;
683   da_cublasStrttp cublasStrttp;
684   da_cublasDtrttp cublasDtrttp;
685   da_cublasCtrttp cublasCtrttp;
686   da_cublasZtrttp cublasZtrttp;
687 }
688 
689 class DerelictCuBLASLoader : SharedLibLoader
690 {
691   protected
692   {
693     override void loadSymbols()
694     {
695       bindFunc(cast(void**)&cublasCreate_v2, "cublasCreate_v2");
696       bindFunc(cast(void**)&cublasDestroy_v2, "cublasDestroy_v2");
697       bindFunc(cast(void**)&cublasGetVersion_v2, "cublasGetVersion_v2");
698       bindFunc(cast(void**)&cublasGetProperty, "cublasGetProperty");
699       bindFunc(cast(void**)&cublasSetStream_v2, "cublasSetStream_v2");
700       bindFunc(cast(void**)&cublasGetStream_v2, "cublasGetStream_v2");
701       bindFunc(cast(void**)&cublasGetPointerMode_v2, "cublasGetPointerMode_v2");
702       bindFunc(cast(void**)&cublasSetPointerMode_v2, "cublasSetPointerMode_v2");
703       bindFunc(cast(void**)&cublasGetAtomicsMode, "cublasGetAtomicsMode");
704       bindFunc(cast(void**)&cublasSetAtomicsMode, "cublasSetAtomicsMode");
705       bindFunc(cast(void**)&cublasGetMathMode, "cublasGetMathMode");
706       bindFunc(cast(void**)&cublasSetMathMode, "cublasSetMathMode");
707       bindFunc(cast(void**)&cublasLoggerConfigure, "cublasLoggerConfigure");
708       bindFunc(cast(void**)&cublasSetLoggerCallback, "cublasSetLoggerCallback");
709       bindFunc(cast(void**)&cublasGetLoggerCallback, "cublasGetLoggerCallback");
710       bindFunc(cast(void**)&cublasSetVector, "cublasSetVector");
711       bindFunc(cast(void**)&cublasGetVector, "cublasGetVector");
712       bindFunc(cast(void**)&cublasSetMatrix, "cublasSetMatrix");
713       bindFunc(cast(void**)&cublasGetMatrix, "cublasGetMatrix");
714       bindFunc(cast(void**)&cublasSetVectorAsync, "cublasSetVectorAsync");
715       bindFunc(cast(void**)&cublasGetVectorAsync, "cublasGetVectorAsync");
716       bindFunc(cast(void**)&cublasSetMatrixAsync, "cublasSetMatrixAsync");
717       bindFunc(cast(void**)&cublasGetMatrixAsync, "cublasGetMatrixAsync");
718       bindFunc(cast(void**)&cublasXerbla, "cublasXerbla");
719       bindFunc(cast(void**)&cublasNrm2Ex, "cublasNrm2Ex");
720       bindFunc(cast(void**)&cublasSnrm2_v2, "cublasSnrm2_v2");
721       bindFunc(cast(void**)&cublasDnrm2_v2, "cublasDnrm2_v2");
722       bindFunc(cast(void**)&cublasScnrm2_v2, "cublasScnrm2_v2");
723       bindFunc(cast(void**)&cublasDznrm2_v2, "cublasDznrm2_v2");
724       bindFunc(cast(void**)&cublasDotEx, "cublasDotEx");
725       bindFunc(cast(void**)&cublasDotcEx, "cublasDotcEx");
726       bindFunc(cast(void**)&cublasSdot_v2, "cublasSdot_v2");
727       bindFunc(cast(void**)&cublasDdot_v2, "cublasDdot_v2");
728       bindFunc(cast(void**)&cublasCdotu_v2, "cublasCdotu_v2");
729       bindFunc(cast(void**)&cublasCdotc_v2, "cublasCdotc_v2");
730       bindFunc(cast(void**)&cublasZdotu_v2, "cublasZdotu_v2");
731       bindFunc(cast(void**)&cublasZdotc_v2, "cublasZdotc_v2");
732       bindFunc(cast(void**)&cublasScalEx, "cublasScalEx");
733       bindFunc(cast(void**)&cublasSscal_v2, "cublasSscal_v2");
734       bindFunc(cast(void**)&cublasDscal_v2, "cublasDscal_v2");
735       bindFunc(cast(void**)&cublasCscal_v2, "cublasCscal_v2");
736       bindFunc(cast(void**)&cublasCsscal_v2, "cublasCsscal_v2");
737       bindFunc(cast(void**)&cublasZscal_v2, "cublasZscal_v2");
738       bindFunc(cast(void**)&cublasZdscal_v2, "cublasZdscal_v2");
739       bindFunc(cast(void**)&cublasAxpyEx, "cublasAxpyEx");
740       bindFunc(cast(void**)&cublasSaxpy_v2, "cublasSaxpy_v2");
741       bindFunc(cast(void**)&cublasDaxpy_v2, "cublasDaxpy_v2");
742       bindFunc(cast(void**)&cublasCaxpy_v2, "cublasCaxpy_v2");
743       bindFunc(cast(void**)&cublasZaxpy_v2, "cublasZaxpy_v2");
744       bindFunc(cast(void**)&cublasScopy_v2, "cublasScopy_v2");
745       bindFunc(cast(void**)&cublasDcopy_v2, "cublasDcopy_v2");
746       bindFunc(cast(void**)&cublasCcopy_v2, "cublasCcopy_v2");
747       bindFunc(cast(void**)&cublasZcopy_v2, "cublasZcopy_v2");
748       bindFunc(cast(void**)&cublasSswap_v2, "cublasSswap_v2");
749       bindFunc(cast(void**)&cublasDswap_v2, "cublasDswap_v2");
750       bindFunc(cast(void**)&cublasCswap_v2, "cublasCswap_v2");
751       bindFunc(cast(void**)&cublasZswap_v2, "cublasZswap_v2");
752       bindFunc(cast(void**)&cublasIsamax_v2, "cublasIsamax_v2");
753       bindFunc(cast(void**)&cublasIdamax_v2, "cublasIdamax_v2");
754       bindFunc(cast(void**)&cublasIcamax_v2, "cublasIcamax_v2");
755       bindFunc(cast(void**)&cublasIzamax_v2, "cublasIzamax_v2");
756       bindFunc(cast(void**)&cublasIsamin_v2, "cublasIsamin_v2");
757       bindFunc(cast(void**)&cublasIdamin_v2, "cublasIdamin_v2");
758       bindFunc(cast(void**)&cublasIcamin_v2, "cublasIcamin_v2");
759       bindFunc(cast(void**)&cublasIzamin_v2, "cublasIzamin_v2");
760       bindFunc(cast(void**)&cublasSasum_v2, "cublasSasum_v2");
761       bindFunc(cast(void**)&cublasDasum_v2, "cublasDasum_v2");
762       bindFunc(cast(void**)&cublasScasum_v2, "cublasScasum_v2");
763       bindFunc(cast(void**)&cublasDzasum_v2, "cublasDzasum_v2");
764       bindFunc(cast(void**)&cublasSrot_v2, "cublasSrot_v2");
765       bindFunc(cast(void**)&cublasDrot_v2, "cublasDrot_v2");
766       bindFunc(cast(void**)&cublasCrot_v2, "cublasCrot_v2");
767       bindFunc(cast(void**)&cublasCsrot_v2, "cublasCsrot_v2");
768       bindFunc(cast(void**)&cublasZrot_v2, "cublasZrot_v2");
769       bindFunc(cast(void**)&cublasZdrot_v2, "cublasZdrot_v2");
770       bindFunc(cast(void**)&cublasSrotg_v2, "cublasSrotg_v2");
771       bindFunc(cast(void**)&cublasDrotg_v2, "cublasDrotg_v2");
772       bindFunc(cast(void**)&cublasCrotg_v2, "cublasCrotg_v2");
773       bindFunc(cast(void**)&cublasZrotg_v2, "cublasZrotg_v2");
774       bindFunc(cast(void**)&cublasSrotm_v2, "cublasSrotm_v2");
775       bindFunc(cast(void**)&cublasDrotm_v2, "cublasDrotm_v2");
776       bindFunc(cast(void**)&cublasSrotmg_v2, "cublasSrotmg_v2");
777       bindFunc(cast(void**)&cublasDrotmg_v2, "cublasDrotmg_v2");
778       bindFunc(cast(void**)&cublasSgemv_v2, "cublasSgemv_v2");
779       bindFunc(cast(void**)&cublasDgemv_v2, "cublasDgemv_v2");
780       bindFunc(cast(void**)&cublasCgemv_v2, "cublasCgemv_v2");
781       bindFunc(cast(void**)&cublasZgemv_v2, "cublasZgemv_v2");
782       bindFunc(cast(void**)&cublasSgbmv_v2, "cublasSgbmv_v2");
783       bindFunc(cast(void**)&cublasDgbmv_v2, "cublasDgbmv_v2");
784       bindFunc(cast(void**)&cublasCgbmv_v2, "cublasCgbmv_v2");
785       bindFunc(cast(void**)&cublasZgbmv_v2, "cublasZgbmv_v2");
786       bindFunc(cast(void**)&cublasStrmv_v2, "cublasStrmv_v2");
787       bindFunc(cast(void**)&cublasDtrmv_v2, "cublasDtrmv_v2");
788       bindFunc(cast(void**)&cublasCtrmv_v2, "cublasCtrmv_v2");
789       bindFunc(cast(void**)&cublasZtrmv_v2, "cublasZtrmv_v2");
790       bindFunc(cast(void**)&cublasStbmv_v2, "cublasStbmv_v2");
791       bindFunc(cast(void**)&cublasDtbmv_v2, "cublasDtbmv_v2");
792       bindFunc(cast(void**)&cublasCtbmv_v2, "cublasCtbmv_v2");
793       bindFunc(cast(void**)&cublasZtbmv_v2, "cublasZtbmv_v2");
794       bindFunc(cast(void**)&cublasStpmv_v2, "cublasStpmv_v2");
795       bindFunc(cast(void**)&cublasDtpmv_v2, "cublasDtpmv_v2");
796       bindFunc(cast(void**)&cublasCtpmv_v2, "cublasCtpmv_v2");
797       bindFunc(cast(void**)&cublasZtpmv_v2, "cublasZtpmv_v2");
798       bindFunc(cast(void**)&cublasStrsv_v2, "cublasStrsv_v2");
799       bindFunc(cast(void**)&cublasDtrsv_v2, "cublasDtrsv_v2");
800       bindFunc(cast(void**)&cublasCtrsv_v2, "cublasCtrsv_v2");
801       bindFunc(cast(void**)&cublasZtrsv_v2, "cublasZtrsv_v2");
802       bindFunc(cast(void**)&cublasStpsv_v2, "cublasStpsv_v2");
803       bindFunc(cast(void**)&cublasDtpsv_v2, "cublasDtpsv_v2");
804       bindFunc(cast(void**)&cublasCtpsv_v2, "cublasCtpsv_v2");
805       bindFunc(cast(void**)&cublasZtpsv_v2, "cublasZtpsv_v2");
806       bindFunc(cast(void**)&cublasStbsv_v2, "cublasStbsv_v2");
807       bindFunc(cast(void**)&cublasDtbsv_v2, "cublasDtbsv_v2");
808       bindFunc(cast(void**)&cublasCtbsv_v2, "cublasCtbsv_v2");
809       bindFunc(cast(void**)&cublasZtbsv_v2, "cublasZtbsv_v2");
810       bindFunc(cast(void**)&cublasSsymv_v2, "cublasSsymv_v2");
811       bindFunc(cast(void**)&cublasDsymv_v2, "cublasDsymv_v2");
812       bindFunc(cast(void**)&cublasCsymv_v2, "cublasCsymv_v2");
813       bindFunc(cast(void**)&cublasZsymv_v2, "cublasZsymv_v2");
814       bindFunc(cast(void**)&cublasChemv_v2, "cublasChemv_v2");
815       bindFunc(cast(void**)&cublasZhemv_v2, "cublasZhemv_v2");
816       bindFunc(cast(void**)&cublasSsbmv_v2, "cublasSsbmv_v2");
817       bindFunc(cast(void**)&cublasDsbmv_v2, "cublasDsbmv_v2");
818       bindFunc(cast(void**)&cublasChbmv_v2, "cublasChbmv_v2");
819       bindFunc(cast(void**)&cublasZhbmv_v2, "cublasZhbmv_v2");
820       bindFunc(cast(void**)&cublasSspmv_v2, "cublasSspmv_v2");
821       bindFunc(cast(void**)&cublasDspmv_v2, "cublasDspmv_v2");
822       bindFunc(cast(void**)&cublasChpmv_v2, "cublasChpmv_v2");
823       bindFunc(cast(void**)&cublasZhpmv_v2, "cublasZhpmv_v2");
824       bindFunc(cast(void**)&cublasSger_v2, "cublasSger_v2");
825       bindFunc(cast(void**)&cublasDger_v2, "cublasDger_v2");
826       bindFunc(cast(void**)&cublasCgeru_v2, "cublasCgeru_v2");
827       bindFunc(cast(void**)&cublasCgerc_v2, "cublasCgerc_v2");
828       bindFunc(cast(void**)&cublasZgeru_v2, "cublasZgeru_v2");
829       bindFunc(cast(void**)&cublasZgerc_v2, "cublasZgerc_v2");
830       bindFunc(cast(void**)&cublasSsyr_v2, "cublasSsyr_v2");
831       bindFunc(cast(void**)&cublasDsyr_v2, "cublasDsyr_v2");
832       bindFunc(cast(void**)&cublasCsyr_v2, "cublasCsyr_v2");
833       bindFunc(cast(void**)&cublasZsyr_v2, "cublasZsyr_v2");
834       bindFunc(cast(void**)&cublasCher_v2, "cublasCher_v2");
835       bindFunc(cast(void**)&cublasZher_v2, "cublasZher_v2");
836       bindFunc(cast(void**)&cublasSspr_v2, "cublasSspr_v2");
837       bindFunc(cast(void**)&cublasDspr_v2, "cublasDspr_v2");
838       bindFunc(cast(void**)&cublasChpr_v2, "cublasChpr_v2");
839       bindFunc(cast(void**)&cublasZhpr_v2, "cublasZhpr_v2");
840       bindFunc(cast(void**)&cublasSsyr2_v2, "cublasSsyr2_v2");
841       bindFunc(cast(void**)&cublasDsyr2_v2, "cublasDsyr2_v2");
842       bindFunc(cast(void**)&cublasCsyr2_v2, "cublasCsyr2_v2");
843       bindFunc(cast(void**)&cublasZsyr2_v2, "cublasZsyr2_v2");
844       bindFunc(cast(void**)&cublasCher2_v2, "cublasCher2_v2");
845       bindFunc(cast(void**)&cublasZher2_v2, "cublasZher2_v2");
846       bindFunc(cast(void**)&cublasSspr2_v2, "cublasSspr2_v2");
847       bindFunc(cast(void**)&cublasDspr2_v2, "cublasDspr2_v2");
848       bindFunc(cast(void**)&cublasChpr2_v2, "cublasChpr2_v2");
849       bindFunc(cast(void**)&cublasZhpr2_v2, "cublasZhpr2_v2");
850       bindFunc(cast(void**)&cublasSgemm_v2, "cublasSgemm_v2");
851       bindFunc(cast(void**)&cublasDgemm_v2, "cublasDgemm_v2");
852       bindFunc(cast(void**)&cublasCgemm_v2, "cublasCgemm_v2");
853       bindFunc(cast(void**)&cublasCgemm3m, "cublasCgemm3m");
854       bindFunc(cast(void**)&cublasCgemm3mEx, "cublasCgemm3mEx");
855       bindFunc(cast(void**)&cublasZgemm_v2, "cublasZgemm_v2");
856       bindFunc(cast(void**)&cublasZgemm3m, "cublasZgemm3m");
857       //bindFunc(cast(void**)&cublasHgemm, "cublasHgemm");
858       bindFunc(cast(void**)&cublasSgemmEx, "cublasSgemmEx");
859       bindFunc(cast(void**)&cublasGemmEx, "cublasGemmEx");
860       bindFunc(cast(void**)&cublasCgemmEx, "cublasCgemmEx");
861       bindFunc(cast(void**)&cublasUint8gemmBias, "cublasUint8gemmBias");
862       bindFunc(cast(void**)&cublasSsyrk_v2, "cublasSsyrk_v2");
863       bindFunc(cast(void**)&cublasDsyrk_v2, "cublasDsyrk_v2");
864       bindFunc(cast(void**)&cublasCsyrk_v2, "cublasCsyrk_v2");
865       bindFunc(cast(void**)&cublasZsyrk_v2, "cublasZsyrk_v2");
866       bindFunc(cast(void**)&cublasCsyrkEx, "cublasCsyrkEx");
867       bindFunc(cast(void**)&cublasCsyrk3mEx, "cublasCsyrk3mEx");
868       bindFunc(cast(void**)&cublasCherk_v2, "cublasCherk_v2");
869       bindFunc(cast(void**)&cublasZherk_v2, "cublasZherk_v2");
870       bindFunc(cast(void**)&cublasCherkEx, "cublasCherkEx");
871       bindFunc(cast(void**)&cublasCherk3mEx, "cublasCherk3mEx");
872       bindFunc(cast(void**)&cublasSsyr2k_v2, "cublasSsyr2k_v2");
873       bindFunc(cast(void**)&cublasDsyr2k_v2, "cublasDsyr2k_v2");
874       bindFunc(cast(void**)&cublasCsyr2k_v2, "cublasCsyr2k_v2");
875       bindFunc(cast(void**)&cublasZsyr2k_v2, "cublasZsyr2k_v2");
876       bindFunc(cast(void**)&cublasCher2k_v2, "cublasCher2k_v2");
877       bindFunc(cast(void**)&cublasZher2k_v2, "cublasZher2k_v2");
878       bindFunc(cast(void**)&cublasSsyrkx, "cublasSsyrkx");
879       bindFunc(cast(void**)&cublasDsyrkx, "cublasDsyrkx");
880       bindFunc(cast(void**)&cublasCsyrkx, "cublasCsyrkx");
881       bindFunc(cast(void**)&cublasZsyrkx, "cublasZsyrkx");
882       bindFunc(cast(void**)&cublasCherkx, "cublasCherkx");
883       bindFunc(cast(void**)&cublasZherkx, "cublasZherkx");
884       bindFunc(cast(void**)&cublasSsymm_v2, "cublasSsymm_v2");
885       bindFunc(cast(void**)&cublasDsymm_v2, "cublasDsymm_v2");
886       bindFunc(cast(void**)&cublasCsymm_v2, "cublasCsymm_v2");
887       bindFunc(cast(void**)&cublasZsymm_v2, "cublasZsymm_v2");
888       bindFunc(cast(void**)&cublasChemm_v2, "cublasChemm_v2");
889       bindFunc(cast(void**)&cublasZhemm_v2, "cublasZhemm_v2");
890       bindFunc(cast(void**)&cublasStrsm_v2, "cublasStrsm_v2");
891       bindFunc(cast(void**)&cublasDtrsm_v2, "cublasDtrsm_v2");
892       bindFunc(cast(void**)&cublasCtrsm_v2, "cublasCtrsm_v2");
893       bindFunc(cast(void**)&cublasZtrsm_v2, "cublasZtrsm_v2");
894       bindFunc(cast(void**)&cublasStrmm_v2, "cublasStrmm_v2");
895       bindFunc(cast(void**)&cublasDtrmm_v2, "cublasDtrmm_v2");
896       bindFunc(cast(void**)&cublasCtrmm_v2, "cublasCtrmm_v2");
897       bindFunc(cast(void**)&cublasZtrmm_v2, "cublasZtrmm_v2");
898       //bindFunc(cast(void**)&cublasHgemmBatched, "cublasHgemmBatched");
899       bindFunc(cast(void**)&cublasSgemmBatched, "cublasSgemmBatched");
900       bindFunc(cast(void**)&cublasDgemmBatched, "cublasDgemmBatched");
901       bindFunc(cast(void**)&cublasCgemmBatched, "cublasCgemmBatched");
902       bindFunc(cast(void**)&cublasCgemm3mBatched, "cublasCgemm3mBatched");
903       bindFunc(cast(void**)&cublasZgemmBatched, "cublasZgemmBatched");
904       bindFunc(cast(void**)&cublasGemmBatchedEx, "cublasGemmBatchedEx");
905       bindFunc(cast(void**)&cublasGemmStridedBatchedEx, "cublasGemmStridedBatchedEx");
906       bindFunc(cast(void**)&cublasSgemmStridedBatched, "cublasSgemmStridedBatched");
907       bindFunc(cast(void**)&cublasDgemmStridedBatched, "cublasDgemmStridedBatched");
908       bindFunc(cast(void**)&cublasCgemmStridedBatched, "cublasCgemmStridedBatched");
909       bindFunc(cast(void**)&cublasCgemm3mStridedBatched, "cublasCgemm3mStridedBatched");
910       bindFunc(cast(void**)&cublasZgemmStridedBatched, "cublasZgemmStridedBatched");
911       //bindFunc(cast(void**)&cublasHgemmStridedBatched, "cublasHgemmStridedBatched");
912       bindFunc(cast(void**)&cublasSgeam, "cublasSgeam");
913       bindFunc(cast(void**)&cublasDgeam, "cublasDgeam");
914       bindFunc(cast(void**)&cublasCgeam, "cublasCgeam");
915       bindFunc(cast(void**)&cublasZgeam, "cublasZgeam");
916       bindFunc(cast(void**)&cublasSgetrfBatched, "cublasSgetrfBatched");
917       bindFunc(cast(void**)&cublasDgetrfBatched, "cublasDgetrfBatched");
918       bindFunc(cast(void**)&cublasCgetrfBatched, "cublasCgetrfBatched");
919       bindFunc(cast(void**)&cublasZgetrfBatched, "cublasZgetrfBatched");
920       bindFunc(cast(void**)&cublasSgetriBatched, "cublasSgetriBatched");
921       bindFunc(cast(void**)&cublasDgetriBatched, "cublasDgetriBatched");
922       bindFunc(cast(void**)&cublasCgetriBatched, "cublasCgetriBatched");
923       bindFunc(cast(void**)&cublasZgetriBatched, "cublasZgetriBatched");
924       bindFunc(cast(void**)&cublasSgetrsBatched, "cublasSgetrsBatched");
925       bindFunc(cast(void**)&cublasDgetrsBatched, "cublasDgetrsBatched");
926       bindFunc(cast(void**)&cublasCgetrsBatched, "cublasCgetrsBatched");
927       bindFunc(cast(void**)&cublasZgetrsBatched, "cublasZgetrsBatched");
928       bindFunc(cast(void**)&cublasStrsmBatched, "cublasStrsmBatched");
929       bindFunc(cast(void**)&cublasDtrsmBatched, "cublasDtrsmBatched");
930       bindFunc(cast(void**)&cublasCtrsmBatched, "cublasCtrsmBatched");
931       bindFunc(cast(void**)&cublasZtrsmBatched, "cublasZtrsmBatched");
932       bindFunc(cast(void**)&cublasSmatinvBatched, "cublasSmatinvBatched");
933       bindFunc(cast(void**)&cublasDmatinvBatched, "cublasDmatinvBatched");
934       bindFunc(cast(void**)&cublasCmatinvBatched, "cublasCmatinvBatched");
935       bindFunc(cast(void**)&cublasZmatinvBatched, "cublasZmatinvBatched");
936       bindFunc(cast(void**)&cublasSgeqrfBatched, "cublasSgeqrfBatched");
937       bindFunc(cast(void**)&cublasDgeqrfBatched, "cublasDgeqrfBatched");
938       bindFunc(cast(void**)&cublasCgeqrfBatched, "cublasCgeqrfBatched");
939       bindFunc(cast(void**)&cublasZgeqrfBatched, "cublasZgeqrfBatched");
940       bindFunc(cast(void**)&cublasSgelsBatched, "cublasSgelsBatched");
941       bindFunc(cast(void**)&cublasDgelsBatched, "cublasDgelsBatched");
942       bindFunc(cast(void**)&cublasCgelsBatched, "cublasCgelsBatched");
943       bindFunc(cast(void**)&cublasZgelsBatched, "cublasZgelsBatched");
944       bindFunc(cast(void**)&cublasSdgmm, "cublasSdgmm");
945       bindFunc(cast(void**)&cublasDdgmm, "cublasDdgmm");
946       bindFunc(cast(void**)&cublasCdgmm, "cublasCdgmm");
947       bindFunc(cast(void**)&cublasZdgmm, "cublasZdgmm");
948       bindFunc(cast(void**)&cublasStpttr, "cublasStpttr");
949       bindFunc(cast(void**)&cublasDtpttr, "cublasDtpttr");
950       bindFunc(cast(void**)&cublasCtpttr, "cublasCtpttr");
951       bindFunc(cast(void**)&cublasZtpttr, "cublasZtpttr");
952       bindFunc(cast(void**)&cublasStrttp, "cublasStrttp");
953       bindFunc(cast(void**)&cublasDtrttp, "cublasDtrttp");
954       bindFunc(cast(void**)&cublasCtrttp, "cublasCtrttp");
955       bindFunc(cast(void**)&cublasZtrttp, "cublasZtrttp");
956     }
957   }
958 
959   public
960   {
961     this()
962     {
963       super(libNames);
964     }
965   }
966 }
967 
968 
969 __gshared DerelictCuBLASLoader DerelictCuBLAS;
970 
971 shared static this()
972 {
973     DerelictCuBLAS = new DerelictCuBLASLoader();
974 }