18 #ifndef TMVA_DNN_ARCHITECTURES_CPU_BLAS 19 #define TMVA_DNN_ARCHITECTURES_CPU_BLAS 26 extern "C" void saxpy_(
const int *
n,
const float * alpha,
const float *
x,
27 const int * incx,
float *
y,
const int * incy);
28 extern "C" void daxpy_(
const int *
n,
const double * alpha,
const double *
x,
29 const int * incx,
double *
y,
const int * incy);
30 extern "C" void sger_(
const int *
m,
const int *
n,
const float * alpha,
31 const float *
x,
const int * incx,
32 const float *
y,
const int * incy,
33 float *
A,
const int * lda);
34 extern "C" void dger_(
const int *
m,
const int *
n,
const double * alpha,
35 const double *
x,
const int * incx,
36 const double *
y,
const int * incy,
37 double *
A,
const int * lda);
38 extern "C" void sgemv_(
const char * trans,
const int *
m,
const int *
n,
39 const float * alpha,
const float *
A,
const int * lda,
40 const float *
x,
const int * incx,
41 const float *
beta,
float *
y,
const int * incy);
42 extern "C" void dgemv_(
const char * trans,
const int *
m,
const int *
n,
43 const double * alpha,
const double *
A,
const int * lda,
44 const double *
x,
const int * incx,
45 const double *
beta,
double *
y,
const int * incy);
46 extern "C" void dgemm_(
const char * transa,
const char * transb,
47 const int *
m,
const int *
n,
const int * k,
48 const double * alpha,
const double *
A,
const int * lda,
49 const double *
B,
const int * ldb,
const double *
beta,
50 double *
C,
const int * ldc);
51 extern "C" void sgemm_(
const char * transa,
const char * transb,
52 const int *
m,
const int *
n,
const int * k,
53 const float * alpha,
const float *
A,
const int * lda,
54 const float *
B,
const int * ldb,
const float *
beta,
55 float *
C,
const int * ldc);
58 #include "gsl/gsl_cblas.h" 71 template <
typename Real_t>
72 inline void Axpy(
const int *
n,
const Real_t * alpha,
73 const Real_t *
x,
const int * incx,
77 template <
typename Real_t>
78 inline void Gemv(
const char *trans,
const int *
m,
const int * n,
80 const Real_t * x,
const int * incx,
84 template <
typename Real_t>
85 inline void Gemm(
const char *transa,
const char *transb,
86 const int * m,
const int * n,
const int* k,
92 template <
typename Real_t>
93 inline void Ger(
const int * m,
const int * n,
const Real_t * alpha,
94 const Real_t * x,
const int * incx,
95 const Real_t * y,
const int * incy,
96 Real_t * A,
const int * lda);
100 #ifndef DNN_USE_CBLAS 104 const double *
x,
const int * incx,
105 double *
y,
const int * incy)
108 cblas_daxpy(*n, *alpha, x, *incx, y, *incy);
110 daxpy_(n, alpha, x, incx, y, incy);
116 const float *
x,
const int * incx,
117 float *
y,
const int * incy)
119 saxpy_(n, alpha, x, incx, y, incy);
124 const double * alpha,
const double *
A,
const int * lda,
125 const double *
x,
const int * incx,
126 const double *
beta,
double *
y,
const int * incy)
128 dgemv_(trans, m, n, alpha, A, lda, x, incx, beta, y, incy);
133 const float * alpha,
const float *
A,
const int * lda,
134 const float *
x,
const int * incx,
135 const float *
beta,
float *
y,
const int * incy)
137 sgemv_(trans, m, n, alpha, A, lda, x, incx, beta, y, incy);
142 const int *
m,
const int *
n,
const int* k,
143 const double * alpha,
const double *
A,
const int * lda,
144 const double *
B,
const int * ldb,
const double *
beta,
145 double *
C,
const int * ldc)
147 dgemm_(transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
152 const int *
m,
const int *
n,
const int* k,
153 const float * alpha,
const float *
A,
const int * lda,
154 const float *
B,
const int * ldb,
const float *
beta,
155 float *
C,
const int * ldc)
157 sgemm_(transa, transb, m, n, k, alpha, A, lda, B, ldb, beta, C, ldc);
162 const double *
x,
const int * incx,
163 const double *
y,
const int * incy,
164 double *
A,
const int * lda)
166 dger_(m, n, alpha, x, incx, y, incy, A, lda);
170 inline void Ger<float>(
const int *
m,
const int *
n,
const float * alpha,
171 const float *
x,
const int * incx,
172 const float *
y,
const int * incy,
173 float *
A,
const int * lda)
175 sger_(m, n, alpha, x, incx, y, incy, A, lda);
183 inline void Axpy<double>(
const int *
n,
const double * alpha,
184 const double *
x,
const int * incx,
185 double *
y,
const int * incy)
187 cblas_daxpy(*n, *alpha, x, *incx, y, *incy);
191 inline void Axpy<float>(
const int *
n,
const float * alpha,
192 const float *
x,
const int * incx,
193 float *
y,
const int * incy)
195 cblas_saxpy(*n, *alpha, x, *incx, y, *incy);
199 inline void Gemv<double>(
const char *trans,
const int *
m,
const int *
n,
200 const double * alpha,
const double *
A,
const int * lda,
201 const double *
x,
const int * incx,
202 const double *
beta,
double *
y,
const int * incy)
204 CBLAS_TRANSPOSE kTrans = (*trans ==
'T') ? CblasTrans : CblasNoTrans;
205 cblas_dgemv(CblasColMajor, kTrans, *m, *n, *alpha, A, *lda, x, *incx, *beta, y, *incy);
209 inline void Gemv<float>(
const char *trans,
const int *
m,
const int *
n,
210 const float * alpha,
const float *
A,
const int * lda,
211 const float *
x,
const int * incx,
212 const float *
beta,
float *
y,
const int * incy)
214 CBLAS_TRANSPOSE kTrans = (*trans ==
'T') ? CblasTrans : CblasNoTrans;
215 cblas_sgemv(CblasColMajor, kTrans, *m, *n, *alpha, A, *lda, x, *incx, *beta, y, *incy);
219 inline void Gemm<double>(
const char *transa,
const char *transb,
220 const int *
m,
const int *
n,
const int* k,
221 const double * alpha,
const double *
A,
const int * lda,
222 const double *
B,
const int * ldb,
const double *
beta,
223 double *
C,
const int * ldc)
225 CBLAS_TRANSPOSE kTransA = (*transa ==
'T') ? CblasTrans : CblasNoTrans;
226 CBLAS_TRANSPOSE kTransB = (*transb ==
'T') ? CblasTrans : CblasNoTrans;
227 cblas_dgemm(CblasColMajor, kTransA, kTransB, *m, *n, *k, *alpha, A, *lda, B, *ldb, *beta, C, *ldc);
231 inline void Gemm<float>(
const char *transa,
const char *transb,
232 const int *
m,
const int *
n,
const int* k,
233 const float * alpha,
const float *
A,
const int * lda,
234 const float *
B,
const int * ldb,
const float *
beta,
235 float *
C,
const int * ldc)
237 CBLAS_TRANSPOSE kTransA = (*transa ==
'T') ? CblasTrans : CblasNoTrans;
238 CBLAS_TRANSPOSE kTransB = (*transb ==
'T') ? CblasTrans : CblasNoTrans;
239 cblas_sgemm(CblasColMajor, kTransA, kTransB, *m, *n, *k, *alpha, A, *lda, B, *ldb, *beta, C, *ldc);
243 inline void Ger<double>(
const int *
m,
const int *
n,
const double * alpha,
244 const double *
x,
const int * incx,
245 const double *
y,
const int * incy,
246 double *
A,
const int * lda)
248 cblas_dger(CblasColMajor, *m, *n, *alpha, x, *incx, y, *incy, A, *lda);
252 inline void Ger<float>(
const int *
m,
const int *
n,
const float * alpha,
253 const float *
x,
const int * incx,
254 const float *
y,
const int * incy,
255 float *
A,
const int * lda)
257 cblas_sger(CblasColMajor, *m, *n, *alpha, x, *incx, y, *incy, A, *lda);
void sgemv_(const char *trans, const int *m, const int *n, const float *alpha, const float *A, const int *lda, const float *x, const int *incx, const float *beta, float *y, const int *incy)
void Axpy< double >(const int *n, const double *alpha, const double *x, const int *incx, double *y, const int *incy)
void Ger(const int *m, const int *n, const Real_t *alpha, const Real_t *x, const int *incx, const Real_t *y, const int *incy, Real_t *A, const int *lda)
Add the outer product of x and y to the matrix A.
void Ger< float >(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y, const int *incy, float *A, const int *lda)
void Axpy< float >(const int *n, const float *alpha, const float *x, const int *incx, float *y, const int *incy)
void saxpy_(const int *n, const float *alpha, const float *x, const int *incx, float *y, const int *incy)
double beta(double x, double y)
Calculates the beta function.
void dgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *A, const int *lda, const double *B, const int *ldb, const double *beta, double *C, const int *ldc)
void Gemm(const char *transa, const char *transb, const int *m, const int *n, const int *k, const Real_t *alpha, const Real_t *A, const int *lda, const Real_t *B, const int *ldb, const Real_t *beta, Real_t *C, const int *ldc)
Multiply the matrix A with the matrix B and store the result in C.
void Ger< double >(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y, const int *incy, double *A, const int *lda)
void dger_(const int *m, const int *n, const double *alpha, const double *x, const int *incx, const double *y, const int *incy, double *A, const int *lda)
void Gemm< float >(const char *transa, const char *transb, const int *m, const int *n, const int *k, const float *alpha, const float *A, const int *lda, const float *B, const int *ldb, const float *beta, float *C, const int *ldc)
void Gemv< float >(const char *trans, const int *m, const int *n, const float *alpha, const float *A, const int *lda, const float *x, const int *incx, const float *beta, float *y, const int *incy)
void Axpy(const int *n, const Real_t *alpha, const Real_t *x, const int *incx, Real_t *y, const int *incy)
Add the vector x scaled by alpha to y scaled by .
void Gemv(const char *trans, const int *m, const int *n, const Real_t *alpha, const Real_t *A, const int *lda, const Real_t *x, const int *incx, const Real_t *beta, Real_t *y, const int *incy)
Multiply the vector x with the matrix A and store the result in y.
void Gemm< double >(const char *transa, const char *transb, const int *m, const int *n, const int *k, const double *alpha, const double *A, const int *lda, const double *B, const int *ldb, const double *beta, double *C, const int *ldc)
void Gemv< double >(const char *trans, const int *m, const int *n, const double *alpha, const double *A, const int *lda, const double *x, const int *incx, const double *beta, double *y, const int *incy)
Abstract ClassifierFactory template that handles arbitrary types.
void dgemv_(const char *trans, const int *m, const int *n, const double *alpha, const double *A, const int *lda, const double *x, const int *incx, const double *beta, double *y, const int *incy)
void sgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const float *alpha, const float *A, const int *lda, const float *B, const int *ldb, const float *beta, float *C, const int *ldc)
void daxpy_(const int *n, const double *alpha, const double *x, const int *incx, double *y, const int *incy)
void sger_(const int *m, const int *n, const float *alpha, const float *x, const int *incx, const float *y, const int *incy, float *A, const int *lda)