1#ifndef BASE_THIRD_PARTY_BLAS_H_
2#define BASE_THIRD_PARTY_BLAS_H_
17void sscal_(
const int *
N,
const float *alpha,
float *x,
const int *incx);
18void dscal_(
const int *
N,
const double *alpha,
double *x,
const int *incx);
19void cscal_(
const int *
N,
const std::complex<float> *alpha, std::complex<float> *x,
const int *incx);
20void zscal_(
const int *
N,
const std::complex<double> *alpha, std::complex<double> *x,
const int *incx);
23void saxpy_(
const int *
N,
const float *alpha,
const float *x,
const int *incx,
float *y,
const int *incy);
24void daxpy_(
const int *
N,
const double *alpha,
const double *x,
const int *incx,
double *y,
const int *incy);
25void caxpy_(
const int *
N,
const std::complex<float> *alpha,
const std::complex<float> *x,
const int *incx, std::complex<float> *y,
const int *incy);
26void zaxpy_(
const int *
N,
const std::complex<double> *alpha,
const std::complex<double> *x,
const int *incx, std::complex<double> *y,
const int *incy);
28void scopy_(
const int *n,
const float *a,
const int *incx,
float *b,
int const *incy);
29void dcopy_(
const int *n,
const double *a,
const int *incx,
double *b,
int const *incy);
30void ccopy_(
const int *n,
const std::complex<float> *a,
const int *incx, std::complex<float> *b,
int const *incy);
31void zcopy_(
const int *n,
const std::complex<double> *a,
const int *incx, std::complex<double> *b,
int const *incy);
36void cdotc_(
const int *n,
const std::complex<float> *zx,
const int *incx,
37 const std::complex<float> *zy,
const int *incy, std::complex<float> *result);
38void zdotc_(
const int *n,
const std::complex<double> *zx,
const int *incx,
39 const std::complex<double> *zy,
const int *incy, std::complex<double> *result);
41float sdot_(
const int *
N,
const float *x,
const int *incx,
const float *y,
const int *incy);
42double ddot_(
const int *
N,
const double *x,
const int *incx,
const double *y,
const int *incy);
45float snrm2_(
const int *n,
const float *x,
const int *incx );
46double dnrm2_(
const int *n,
const double *x,
const int *incx );
47float scnrm2_(
const int *n,
const std::complex<float> *x,
const int *incx );
48double dznrm2_(
const int *n,
const std::complex<double> *x,
const int *incx );
51void sgemv_(
const char*
const transa,
const int*
const m,
const int*
const n,
52 const float*
const alpha,
const float*
const a,
const int*
const lda,
const float*
const x,
const int*
const incx,
53 const float*
const eta,
float*
const y,
const int*
const incy);
54void dgemv_(
const char*
const transa,
const int*
const m,
const int*
const n,
55 const double*
const alpha,
const double*
const a,
const int*
const lda,
const double*
const x,
const int*
const incx,
56 const double*
const beta,
double*
const y,
const int*
const incy);
58void cgemv_(
const char *trans,
const int *m,
const int *n,
const std::complex<float> *alpha,
59 const std::complex<float> *a,
const int *lda,
const std::complex<float> *x,
const int *incx,
60 const std::complex<float> *beta, std::complex<float> *y,
const int *incy);
62void zgemv_(
const char *trans,
const int *m,
const int *n,
const std::complex<double> *alpha,
63 const std::complex<double> *a,
const int *lda,
const std::complex<double> *x,
const int *incx,
64 const std::complex<double> *beta, std::complex<double> *y,
const int *incy);
66void dsymv_(
const char *uplo,
const int *n,
67 const double *alpha,
const double *a,
const int *lda,
68 const double *x,
const int *incx,
69 const double *beta,
double *y,
const int *incy);
83 const std::complex<double>* alpha,
84 const std::complex<double>* x,
86 const std::complex<double>* y,
88 std::complex<double>* a,
95void sgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
96 const float *alpha,
const float *a,
const int *lda,
const float *b,
const int *ldb,
97 const float *beta,
float *c,
const int *ldc);
98void dgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
99 const double *alpha,
const double *a,
const int *lda,
const double *b,
const int *ldb,
100 const double *beta,
double *c,
const int *ldc);
101void cgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
102 const std::complex<float> *alpha,
const std::complex<float> *a,
const int *lda,
const std::complex<float> *b,
const int *ldb,
103 const std::complex<float> *beta, std::complex<float> *c,
const int *ldc);
104void zgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
105 const std::complex<double> *alpha,
const std::complex<double> *a,
const int *lda,
const std::complex<double> *b,
const int *ldb,
106 const std::complex<double> *beta, std::complex<double> *c,
const int *ldc);
110void dsymm_(
const char *side,
const char *uplo,
const int *m,
const int *n,
111 const double *alpha,
const double *a,
const int *lda,
const double *b,
const int *ldb,
112 const double *beta,
double *c,
const int *ldc);
114void zhemm_(
const char *side,
const char *uplo,
115 const int *m,
const int *n,
116 const std::complex<double> *alpha,
117 const std::complex<double> *a,
const int *lda,
118 const std::complex<double> *b,
const int *ldb,
119 const std::complex<double> *beta,
120 std::complex<double> *c,
const int *ldc);
123void dtrsm_(
const char *side,
const char *uplo,
const char *transa,
const char *diag,
124 const int *m,
const int *n,
126 const double *a,
const int *lda,
127 double *b,
const int *ldb);
129void ztrsm_(
const char *side,
const char *uplo,
const char *transa,
const char *diag,
130 const int *m,
const int *n,
131 const std::complex<double> *alpha,
132 const std::complex<double> *a,
const int *lda,
133 std::complex<double> *b,
const int *ldb);
145void axpy(
const int& n,
const float& alpha,
const float *x,
const int& incx,
float *y,
const int& incy)
147 saxpy_(&n, &alpha, x, &incx, y, &incy);
150void axpy(
const int& n,
const double& alpha,
const double *x,
const int& incx,
double *y,
const int& incy)
152 daxpy_(&n, &alpha, x, &incx, y, &incy);
155void axpy(
const int& n,
const std::complex<float>& alpha,
const std::complex<float> *x,
const int& incx, std::complex<float> *y,
const int& incy)
157 caxpy_(&n, &alpha, x, &incx, y, &incy);
160void axpy(
const int& n,
const std::complex<double>& alpha,
const std::complex<double> *x,
const int& incx, std::complex<double> *y,
const int& incy)
162 zaxpy_(&n, &alpha, x, &incx, y, &incy);
168void scal(
const int& n,
const float& alpha,
float *x,
const int& incx)
170 sscal_(&n, &alpha, x, &incx);
173void scal(
const int& n,
const double& alpha,
double *x,
const int& incx)
175 dscal_(&n, &alpha, x, &incx);
178void scal(
const int& n,
const std::complex<float>& alpha, std::complex<float> *x,
const int& incx)
180 cscal_(&n, &alpha, x, &incx);
183void scal(
const int& n,
const std::complex<double>& alpha, std::complex<double> *x,
const int& incx)
185 zscal_(&n, &alpha, x, &incx);
191float dot(
const int& n,
const float *x,
const int& incx,
const float *y,
const int& incy)
193 return sdot_(&n, x, &incx, y, &incy);
196double dot(
const int& n,
const double *x,
const int& incx,
const double *y,
const int& incy)
198 return ddot_(&n, x, &incx, y, &incy);
202std::complex<float> dot(
const int& n,
const std::complex<float> *x,
const int& incx,
const std::complex<float> *y,
const int& incy)
204 std::complex<float> result = {0, 0};
206 for (
int ii = 0; ii < n; ii++) {
207 result += std::conj(x[ii * incx]) * y[ii * incy];
212std::complex<double> dot(
const int& n,
const std::complex<double> *x,
const int& incx,
const std::complex<double> *y,
const int& incy)
214 std::complex<double> result = {0, 0};
216 for (
int ii = 0; ii < n; ii++) {
217 result += std::conj(x[ii * incx]) * y[ii * incy];
225void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
226 const float& alpha,
const float* A,
const int& lda,
const float* B,
const int& ldb,
227 const float& beta,
float* C,
const int& ldc)
229 sgemm_(&transa, &transb, &m, &n, &k,
230 &alpha, A, &lda, B, &ldb,
234void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
235 const double& alpha,
const double* A,
const int& lda,
const double* B,
const int& ldb,
236 const double& beta,
double* C,
const int& ldc)
238 dgemm_(&transa, &transb, &m, &n, &k,
239 &alpha, A, &lda, B, &ldb,
243void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
244 const std::complex<float>& alpha,
const std::complex<float>* A,
const int& lda,
const std::complex<float>* B,
const int& ldb,
245 const std::complex<float>& beta, std::complex<float>* C,
const int& ldc)
247 cgemm_(&transa, &transb, &m, &n, &k,
248 &alpha, A, &lda, B, &ldb,
252void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
253 const std::complex<double>& alpha,
const std::complex<double>* A,
const int& lda,
const std::complex<double>* B,
const int& ldb,
254 const std::complex<double>& beta, std::complex<double>* C,
const int& ldc)
256 zgemm_(&transa, &transb, &m, &n, &k,
257 &alpha, A, &lda, B, &ldb,
263void gemm_batched(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
264 const T& alpha,
T** A,
const int& lda,
T** B,
const int& ldb,
265 const T& beta,
T** C,
const int& ldc,
const int& batch_size)
267 for (
int ii = 0; ii < batch_size; ++ii) {
269 BlasConnector::gemm(transa, transb, m, n, k, alpha, A[ii], lda, B[ii], ldb, beta, C[ii], ldc);
275void gemm_batched_strided(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
276 const T& alpha,
const T* A,
const int& lda,
const int& stride_a,
const T* B,
const int& ldb,
const int& stride_b,
277 const T& beta,
T* C,
const int& ldc,
const int& stride_c,
const int& batch_size)
279 for (
int ii = 0; ii < batch_size; ii++) {
281 BlasConnector::gemm(transa, transb, m, n, k, alpha, A + ii * stride_a, lda, B + ii * stride_b, ldb, beta, C + ii * stride_c, ldc);
286void gemv(
const char& trans,
const int& m,
const int& n,
287 const float& alpha,
const float *A,
const int& lda,
const float *x,
const int& incx,
288 const float& beta,
float *y,
const int& incy)
290 sgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
293void gemv(
const char& trans,
const int& m,
const int& n,
294 const double& alpha,
const double *A,
const int& lda,
const double *x,
const int& incx,
295 const double& beta,
double *y,
const int& incy)
297 dgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
300void gemv(
const char& trans,
const int& m,
const int& n,
301 const std::complex<float>& alpha,
const std::complex<float> *A,
const int& lda,
const std::complex<float> *x,
const int& incx,
302 const std::complex<float>& beta, std::complex<float> *y,
const int& incy)
304 cgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
307void gemv(
const char& trans,
const int& m,
const int& n,
308 const std::complex<double>& alpha,
const std::complex<double> *A,
const int& lda,
const std::complex<double> *x,
const int& incx,
309 const std::complex<double>& beta, std::complex<double> *y,
const int& incy)
311 zgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
316void gemv_batched(
const char& trans,
const int& m,
const int& n,
317 const T& alpha,
T** A,
const int& lda,
T** x,
const int& incx,
318 const T& beta,
T** y,
const int& incy,
const int& batch_size)
320 for (
int ii = 0; ii < batch_size; ++ii) {
322 BlasConnector::gemv(trans, m, n, alpha, A[ii], lda, x[ii], incy, beta, y[ii], incy);
328void gemv_batched_strided(
const char& transa,
const int& m,
const int& n,
329 const T& alpha,
const T* A,
const int& lda,
const int& stride_a,
const T* x,
const int& incx,
const int& stride_x,
330 const T& beta,
T* y,
const int& incy,
const int& stride_y,
const int& batch_size)
332 for (
int ii = 0; ii < batch_size; ii++) {
334 BlasConnector::gemv(transa, m, n, alpha, A + ii * stride_a, lda, x + ii * stride_x, incx, beta, y + ii * stride_y, incy);
341float nrm2(
const int n,
const float *x,
const int incx )
343 return snrm2_( &n, x, &incx );
346double nrm2(
const int n,
const double *x,
const int incx )
348 return dnrm2_( &n, x, &incx );
351double nrm2(
const int n,
const std::complex<float> *x,
const int incx )
353 return scnrm2_( &n, x, &incx );
356double nrm2(
const int n,
const std::complex<double> *x,
const int incx )
358 return dznrm2_( &n, x, &incx );
363void copy(
const int n,
const float *a,
const int incx,
float *b,
const int incy)
365 scopy_(&n, a, &incx, b, &incy);
368void copy(
const int n,
const double *a,
const int incx,
double *b,
const int incy)
371 dcopy_(&n, a, &incx, b, &incy);
374void copy(
const int n,
const std::complex<float> *a,
const int incx, std::complex<float> *b,
const int incy)
376 ccopy_(&n, a, &incx, b, &incy);
379void copy(
const int n,
const std::complex<double> *a,
const int incx, std::complex<double> *b,
const int incy)
381 zcopy_(&n, a, &incx, b, &incy);
void cdotc_(const int *n, const std::complex< float > *zx, const int *incx, const std::complex< float > *zy, const int *incy, std::complex< float > *result)
void saxpy_(const int *N, const float *alpha, const float *x, const int *incx, float *y, const int *incy)
void sgemv_(const char *const transa, const int *const m, const int *const n, const float *const alpha, const float *const a, const int *const lda, const float *const x, const int *const incx, const float *const eta, float *const y, const int *const incy)
void ccopy_(const int *n, const std::complex< float > *a, const int *incx, std::complex< float > *b, int const *incy)
void zcopy_(const int *n, const std::complex< double > *a, const int *incx, std::complex< double > *b, int const *incy)
void dtrsm_(const char *side, const char *uplo, const char *transa, const char *diag, const int *m, const int *n, const double *alpha, const double *a, const int *lda, double *b, const int *ldb)
void zgerc_(const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *x, const int *incx, const std::complex< double > *y, const int *incy, std::complex< double > *a, const int *lda)
void ztrsm_(const char *side, const char *uplo, const char *transa, const char *diag, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, std::complex< double > *b, const int *ldb)
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 zhemm_(const char *side, const char *uplo, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, const std::complex< double > *b, const int *ldb, const std::complex< double > *beta, std::complex< double > *c, const int *ldc)
void dgemv_(const char *const transa, const int *const m, const int *const n, const double *const alpha, const double *const a, const int *const lda, const double *const x, const int *const incx, const double *const beta, double *const y, const int *const incy)
void dsymm_(const char *side, const char *uplo, const int *m, const int *n, const double *alpha, const double *a, const int *lda, const double *b, const int *ldb, const double *beta, double *c, const int *ldc)
void zgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, const std::complex< double > *b, const int *ldb, const std::complex< double > *beta, std::complex< double > *c, const int *ldc)
float sdot_(const int *N, const float *x, const int *incx, const float *y, const int *incy)
void zscal_(const int *N, const std::complex< double > *alpha, std::complex< double > *x, const int *incx)
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 zdotc_(const int *n, const std::complex< double > *zx, const int *incx, const std::complex< double > *zy, const int *incy, std::complex< double > *result)
void caxpy_(const int *N, const std::complex< float > *alpha, const std::complex< float > *x, const int *incx, std::complex< float > *y, const int *incy)
void sscal_(const int *N, const float *alpha, float *x, const int *incx)
void scopy_(const int *n, const float *a, const int *incx, float *b, int const *incy)
void cgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k, const std::complex< float > *alpha, const std::complex< float > *a, const int *lda, const std::complex< float > *b, const int *ldb, const std::complex< float > *beta, std::complex< float > *c, const int *ldc)
void dcopy_(const int *n, const double *a, const int *incx, double *b, int const *incy)
double ddot_(const int *N, const double *x, const int *incx, const double *y, const int *incy)
void dscal_(const int *N, const double *alpha, double *x, const int *incx)
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 dsymv_(const char *uplo, 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)
double dnrm2_(const int *n, const double *x, const int *incx)
void cscal_(const int *N, const std::complex< float > *alpha, std::complex< float > *x, const int *incx)
void cgemv_(const char *trans, const int *m, const int *n, const std::complex< float > *alpha, const std::complex< float > *a, const int *lda, const std::complex< float > *x, const int *incx, const std::complex< float > *beta, std::complex< float > *y, const int *incy)
double dznrm2_(const int *n, const std::complex< double > *x, const int *incx)
void zaxpy_(const int *N, const std::complex< double > *alpha, const std::complex< double > *x, const int *incx, std::complex< double > *y, const int *incy)
void zgemv_(const char *trans, const int *m, const int *n, const std::complex< double > *alpha, const std::complex< double > *a, const int *lda, const std::complex< double > *x, const int *incx, const std::complex< double > *beta, std::complex< double > *y, const int *incy)
float scnrm2_(const int *n, const std::complex< float > *x, const int *incx)
float snrm2_(const int *n, const float *x, const int *incx)
Definition blas_connector.h:203
#define N
Definition exp.cpp:24
#define T
Definition exp.cpp:237