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 dcopy_(
long const *n,
const double *a,
int const *incx,
double *b,
int const *incy);
29void zcopy_(
long const *n,
const std::complex<double> *a,
int const *incx, std::complex<double> *b,
int const *incy);
33void cdotc_(
const int *n,
const std::complex<float> *zx,
const int *incx,
34 const std::complex<float> *zy,
const int *incy, std::complex<float> *result);
35void zdotc_(
const int *n,
const std::complex<double> *zx,
const int *incx,
36 const std::complex<double> *zy,
const int *incy, std::complex<double> *result);
38float sdot_(
const int *
N,
const float *x,
const int *incx,
const float *y,
const int *incy);
39double ddot_(
const int *
N,
const double *x,
const int *incx,
const double *y,
const int *incy);
42float snrm2_(
const int *n,
const float *x,
const int *incx );
43double dnrm2_(
const int *n,
const double *x,
const int *incx );
44double dznrm2_(
const int *n,
const std::complex<double> *x,
const int *incx );
47void sgemv_(
const char*
const transa,
const int*
const m,
const int*
const n,
48 const float*
const alpha,
const float*
const a,
const int*
const lda,
const float*
const x,
const int*
const incx,
49 const float*
const eta,
float*
const y,
const int*
const incy);
50void dgemv_(
const char*
const transa,
const int*
const m,
const int*
const n,
51 const double*
const alpha,
const double*
const a,
const int*
const lda,
const double*
const x,
const int*
const incx,
52 const double*
const beta,
double*
const y,
const int*
const incy);
54void cgemv_(
const char *trans,
const int *m,
const int *n,
const std::complex<float> *alpha,
55 const std::complex<float> *a,
const int *lda,
const std::complex<float> *x,
const int *incx,
56 const std::complex<float> *beta, std::complex<float> *y,
const int *incy);
58void zgemv_(
const char *trans,
const int *m,
const int *n,
const std::complex<double> *alpha,
59 const std::complex<double> *a,
const int *lda,
const std::complex<double> *x,
const int *incx,
60 const std::complex<double> *beta, std::complex<double> *y,
const int *incy);
62void dsymv_(
const char *uplo,
const int *n,
63 const double *alpha,
const double *a,
const int *lda,
64 const double *x,
const int *incx,
65 const double *beta,
double *y,
const int *incy);
79 const std::complex<double>* alpha,
80 const std::complex<double>* x,
82 const std::complex<double>* y,
84 std::complex<double>* a,
91void sgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
92 const float *alpha,
const float *a,
const int *lda,
const float *b,
const int *ldb,
93 const float *beta,
float *c,
const int *ldc);
94void dgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
95 const double *alpha,
const double *a,
const int *lda,
const double *b,
const int *ldb,
96 const double *beta,
double *c,
const int *ldc);
97void cgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
98 const std::complex<float> *alpha,
const std::complex<float> *a,
const int *lda,
const std::complex<float> *b,
const int *ldb,
99 const std::complex<float> *beta, std::complex<float> *c,
const int *ldc);
100void zgemm_(
const char *transa,
const char *transb,
const int *m,
const int *n,
const int *k,
101 const std::complex<double> *alpha,
const std::complex<double> *a,
const int *lda,
const std::complex<double> *b,
const int *ldb,
102 const std::complex<double> *beta, std::complex<double> *c,
const int *ldc);
106void dsymm_(
const char *side,
const char *uplo,
const int *m,
const int *n,
107 const double *alpha,
const double *a,
const int *lda,
const double *b,
const int *ldb,
108 const double *beta,
double *c,
const int *ldc);
110void zhemm_(
char *side,
char *uplo,
int *m,
int *n,std::complex<double> *alpha,
111 std::complex<double> *a,
int *lda, std::complex<double> *b,
int *ldb, std::complex<double> *beta, std::complex<double> *c,
int *ldc);
114void dtrsm_(
char *side,
char* uplo,
char *transa,
char *diag,
int *m,
int *n,
115 double* alpha,
double* a,
int *lda,
double*b,
int *ldb);
116void ztrsm_(
char *side,
char* uplo,
char *transa,
char *diag,
int *m,
int *n,
117 std::complex<double>* alpha, std::complex<double>* a,
int *lda, std::complex<double>*b,
int *ldb);
129void axpy(
const int& n,
const float& alpha,
const float *x,
const int& incx,
float *y,
const int& incy)
131 saxpy_(&n, &alpha, x, &incx, y, &incy);
134void axpy(
const int& n,
const double& alpha,
const double *x,
const int& incx,
double *y,
const int& incy)
136 daxpy_(&n, &alpha, x, &incx, y, &incy);
139void axpy(
const int& n,
const std::complex<float>& alpha,
const std::complex<float> *x,
const int& incx, std::complex<float> *y,
const int& incy)
141 caxpy_(&n, &alpha, x, &incx, y, &incy);
144void axpy(
const int& n,
const std::complex<double>& alpha,
const std::complex<double> *x,
const int& incx, std::complex<double> *y,
const int& incy)
146 zaxpy_(&n, &alpha, x, &incx, y, &incy);
152void scal(
const int& n,
const float& alpha,
float *x,
const int& incx)
154 sscal_(&n, &alpha, x, &incx);
157void scal(
const int& n,
const double& alpha,
double *x,
const int& incx)
159 dscal_(&n, &alpha, x, &incx);
162void scal(
const int& n,
const std::complex<float>& alpha, std::complex<float> *x,
const int& incx)
164 cscal_(&n, &alpha, x, &incx);
167void scal(
const int& n,
const std::complex<double>& alpha, std::complex<double> *x,
const int& incx)
169 zscal_(&n, &alpha, x, &incx);
175float dot(
const int& n,
const float *x,
const int& incx,
const float *y,
const int& incy)
177 return sdot_(&n, x, &incx, y, &incy);
180double dot(
const int& n,
const double *x,
const int& incx,
const double *y,
const int& incy)
182 return ddot_(&n, x, &incx, y, &incy);
186std::complex<float> dot(
const int& n,
const std::complex<float> *x,
const int& incx,
const std::complex<float> *y,
const int& incy)
188 std::complex<float> result = {0, 0};
190 for (
int ii = 0; ii < n; ii++) {
191 result += std::conj(x[ii * incx]) * y[ii * incy];
196std::complex<double> dot(
const int& n,
const std::complex<double> *x,
const int& incx,
const std::complex<double> *y,
const int& incy)
198 std::complex<double> result = {0, 0};
200 for (
int ii = 0; ii < n; ii++) {
201 result += std::conj(x[ii * incx]) * y[ii * incy];
209void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
210 const float& alpha,
const float* A,
const int& lda,
const float* B,
const int& ldb,
211 const float& beta,
float* C,
const int& ldc)
213 sgemm_(&transa, &transb, &m, &n, &k,
214 &alpha, A, &lda, B, &ldb,
218void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
219 const double& alpha,
const double* A,
const int& lda,
const double* B,
const int& ldb,
220 const double& beta,
double* C,
const int& ldc)
222 dgemm_(&transa, &transb, &m, &n, &k,
223 &alpha, A, &lda, B, &ldb,
227void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
228 const std::complex<float>& alpha,
const std::complex<float>* A,
const int& lda,
const std::complex<float>* B,
const int& ldb,
229 const std::complex<float>& beta, std::complex<float>* C,
const int& ldc)
231 cgemm_(&transa, &transb, &m, &n, &k,
232 &alpha, A, &lda, B, &ldb,
236void gemm(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
237 const std::complex<double>& alpha,
const std::complex<double>* A,
const int& lda,
const std::complex<double>* B,
const int& ldb,
238 const std::complex<double>& beta, std::complex<double>* C,
const int& ldc)
240 zgemm_(&transa, &transb, &m, &n, &k,
241 &alpha, A, &lda, B, &ldb,
247void gemm_batched(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
248 const T& alpha,
T** A,
const int& lda,
T** B,
const int& ldb,
249 const T& beta,
T** C,
const int& ldc,
const int& batch_size)
251 for (
int ii = 0; ii < batch_size; ++ii) {
253 BlasConnector::gemm(transa, transb, m, n, k, alpha, A[ii], lda, B[ii], ldb, beta, C[ii], ldc);
259void gemm_batched_strided(
const char& transa,
const char& transb,
const int& m,
const int& n,
const int& k,
260 const T& alpha,
const T* A,
const int& lda,
const int& stride_a,
const T* B,
const int& ldb,
const int& stride_b,
261 const T& beta,
T* C,
const int& ldc,
const int& stride_c,
const int& batch_size)
263 for (
int ii = 0; ii < batch_size; ii++) {
265 BlasConnector::gemm(transa, transb, m, n, k, alpha, A + ii * stride_a, lda, B + ii * stride_b, ldb, beta, C + ii * stride_c, ldc);
270void gemv(
const char& trans,
const int& m,
const int& n,
271 const float& alpha,
const float *A,
const int& lda,
const float *x,
const int& incx,
272 const float& beta,
float *y,
const int& incy)
274 sgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
277void gemv(
const char& trans,
const int& m,
const int& n,
278 const double& alpha,
const double *A,
const int& lda,
const double *x,
const int& incx,
279 const double& beta,
double *y,
const int& incy)
281 dgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
284void gemv(
const char& trans,
const int& m,
const int& n,
285 const std::complex<float>& alpha,
const std::complex<float> *A,
const int& lda,
const std::complex<float> *x,
const int& incx,
286 const std::complex<float>& beta, std::complex<float> *y,
const int& incy)
288 cgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
291void gemv(
const char& trans,
const int& m,
const int& n,
292 const std::complex<double>& alpha,
const std::complex<double> *A,
const int& lda,
const std::complex<double> *x,
const int& incx,
293 const std::complex<double>& beta, std::complex<double> *y,
const int& incy)
295 zgemv_(&trans, &m, &n, &alpha, A, &lda, x, &incx, &beta, y, &incy);
300void gemv_batched(
const char& trans,
const int& m,
const int& n,
301 const T& alpha,
T** A,
const int& lda,
T** x,
const int& incx,
302 const T& beta,
T** y,
const int& incy,
const int& batch_size)
304 for (
int ii = 0; ii < batch_size; ++ii) {
306 BlasConnector::gemv(trans, m, n, alpha, A[ii], lda, x[ii], incy, beta, y[ii], incy);
312void gemv_batched_strided(
const char& transa,
const int& m,
const int& n,
313 const T& alpha,
const T* A,
const int& lda,
const int& stride_a,
const T* x,
const int& incx,
const int& stride_x,
314 const T& beta,
T* y,
const int& incy,
const int& stride_y,
const int& batch_size)
316 for (
int ii = 0; ii < batch_size; ii++) {
318 BlasConnector::gemv(transa, m, n, alpha, A + ii * stride_a, lda, x + ii * stride_x, incx, beta, y + ii * stride_y, incy);
325float nrm2(
const int n,
const float *x,
const int incx )
327 return snrm2_( &n, x, &incx );
330double nrm2(
const int n,
const double *x,
const int incx )
332 return dnrm2_( &n, x, &incx );
335double nrm2(
const int n,
const std::complex<double> *x,
const int incx )
337 return dznrm2_( &n, x, &incx );
342void copy(
const long n,
const double *a,
const int incx,
double *b,
const int incy)
344 dcopy_(&n, a, &incx, b, &incy);
347void copy(
const long n,
const std::complex<double> *a,
const int incx, std::complex<double> *b,
const int incy)
349 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 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 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 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 dtrsm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, double *alpha, double *a, int *lda, double *b, int *ldb)
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 zhemm_(char *side, char *uplo, int *m, int *n, std::complex< double > *alpha, std::complex< double > *a, int *lda, std::complex< double > *b, int *ldb, std::complex< double > *beta, std::complex< double > *c, int *ldc)
void sscal_(const int *N, const float *alpha, float *x, const int *incx)
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 ztrsm_(char *side, char *uplo, char *transa, char *diag, int *m, int *n, std::complex< double > *alpha, std::complex< double > *a, int *lda, std::complex< double > *b, int *ldb)
void zcopy_(long const *n, const std::complex< double > *a, int const *incx, std::complex< double > *b, int const *incy)
void dcopy_(long const *n, const double *a, int const *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 snrm2_(const int *n, const float *x, const int *incx)
Definition blas_connector.h:147
#define N
Definition exp.cpp:24
#define T
Definition exp.cpp:237