Skip to content

Commit 2a59b00

Browse files
committed
Fix
1 parent ef3cb17 commit 2a59b00

File tree

1 file changed

+103
-0
lines changed

1 file changed

+103
-0
lines changed

source/module_base/blas_connector.cpp

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,108 @@
11
#include "blas_connector.h"
22

3+
extern "C"
4+
{
5+
// level 1: std::vector-std::vector operations, O(n) data and O(n) work.
6+
7+
// Peize Lin add ?scal 2016-08-04, to compute x=a*x
8+
void sscal_(const int *N, const float *alpha, float *X, const int *incX);
9+
void dscal_(const int *N, const double *alpha, double *X, const int *incX);
10+
void cscal_(const int *N, const std::complex<float> *alpha, std::complex<float> *X, const int *incX);
11+
void zscal_(const int *N, const std::complex<double> *alpha, std::complex<double> *X, const int *incX);
12+
13+
// Peize Lin add ?axpy 2016-08-04, to compute y=a*x+y
14+
void saxpy_(const int *N, const float *alpha, const float *X, const int *incX, float *Y, const int *incY);
15+
void daxpy_(const int *N, const double *alpha, const double *X, const int *incX, double *Y, const int *incY);
16+
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);
17+
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);
18+
19+
void dcopy_(long const *n, const double *a, int const *incx, double *b, int const *incy);
20+
void zcopy_(long const *n, const std::complex<double> *a, int const *incx, std::complex<double> *b, int const *incy);
21+
22+
//reason for passing results as argument instead of returning it:
23+
//see https://www.numbercrunch.de/blog/2014/07/lost-in-translation/
24+
// void zdotc_(std::complex<double> *result, const int *n, const std::complex<double> *zx,
25+
// const int *incx, const std::complex<double> *zy, const int *incy);
26+
// Peize Lin add ?dot 2017-10-27, to compute d=x*y
27+
float sdot_(const int *N, const float *X, const int *incX, const float *Y, const int *incY);
28+
double ddot_(const int *N, const double *X, const int *incX, const double *Y, const int *incY);
29+
30+
// Peize Lin add ?nrm2 2018-06-12, to compute out = ||x||_2 = \sqrt{ \sum_i x_i**2 }
31+
float snrm2_( const int *n, const float *X, const int *incX );
32+
double dnrm2_( const int *n, const double *X, const int *incX );
33+
double dznrm2_( const int *n, const std::complex<double> *X, const int *incX );
34+
35+
// level 2: matrix-std::vector operations, O(n^2) data and O(n^2) work.
36+
void dgemv_(const char*const transa, const int*const m, const int*const n,
37+
const double*const alpha, const double*const a, const int*const lda, const double*const x, const int*const incx,
38+
const double*const beta, double*const y, const int*const incy);
39+
40+
void cgemv_(const char *trans, const int *m, const int *n, const std::complex<float> *alpha,
41+
const std::complex<float> *a, const int *lda, const std::complex<float> *x, const int *incx,
42+
const std::complex<float> *beta, std::complex<float> *y, const int *incy);
43+
44+
void zgemv_(const char *trans, const int *m, const int *n, const std::complex<double> *alpha,
45+
const std::complex<double> *a, const int *lda, const std::complex<double> *x, const int *incx,
46+
const std::complex<double> *beta, std::complex<double> *y, const int *incy);
47+
48+
void dsymv_(const char *uplo, const int *n,
49+
const double *alpha, const double *a, const int *lda,
50+
const double *x, const int *incx,
51+
const double *beta, double *y, const int *incy);
52+
53+
// A := alpha x * y.T + A
54+
void dger_(const int* m,
55+
const int* n,
56+
const double* alpha,
57+
const double* x,
58+
const int* incx,
59+
const double* y,
60+
const int* incy,
61+
double* a,
62+
const int* lda);
63+
void zgerc_(const int* m,
64+
const int* n,
65+
const std::complex<double>* alpha,
66+
const std::complex<double>* x,
67+
const int* incx,
68+
const std::complex<double>* y,
69+
const int* incy,
70+
std::complex<double>* a,
71+
const int* lda);
72+
73+
// level 3: matrix-matrix operations, O(n^2) data and O(n^3) work.
74+
75+
// Peize Lin add ?gemm 2017-10-27, to compute C = a * A.? * B.? + b * C
76+
// A is general
77+
void sgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k,
78+
const float *alpha, const float *a, const int *lda, const float *b, const int *ldb,
79+
const float *beta, float *c, const int *ldc);
80+
void dgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k,
81+
const double *alpha, const double *a, const int *lda, const double *b, const int *ldb,
82+
const double *beta, double *c, const int *ldc);
83+
void cgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k,
84+
const std::complex<float> *alpha, const std::complex<float> *a, const int *lda, const std::complex<float> *b, const int *ldb,
85+
const std::complex<float> *beta, std::complex<float> *c, const int *ldc);
86+
void zgemm_(const char *transa, const char *transb, const int *m, const int *n, const int *k,
87+
const std::complex<double> *alpha, const std::complex<double> *a, const int *lda, const std::complex<double> *b, const int *ldb,
88+
const std::complex<double> *beta, std::complex<double> *c, const int *ldc);
89+
90+
//a is symmetric
91+
void dsymm_(const char *side, const char *uplo, const int *m, const int *n,
92+
const double *alpha, const double *a, const int *lda, const double *b, const int *ldb,
93+
const double *beta, double *c, const int *ldc);
94+
//a is hermitian
95+
void zhemm_(char *side, char *uplo, int *m, int *n,std::complex<double> *alpha,
96+
std::complex<double> *a, int *lda, std::complex<double> *b, int *ldb, std::complex<double> *beta, std::complex<double> *c, int *ldc);
97+
98+
//solving triangular matrix with multiple right hand sides
99+
void dtrsm_(char *side, char* uplo, char *transa, char *diag, int *m, int *n,
100+
double* alpha, double* a, int *lda, double*b, int *ldb);
101+
void ztrsm_(char *side, char* uplo, char *transa, char *diag, int *m, int *n,
102+
std::complex<double>* alpha, std::complex<double>* a, int *lda, std::complex<double>*b, int *ldb);
103+
104+
}
105+
3106
void BlasConnector::axpy( const int n, const float alpha, const float *X, const int incX, float *Y, const int incY)
4107
{
5108
saxpy_(&n, &alpha, X, &incX, Y, &incY);

0 commit comments

Comments
 (0)