|
| 1 | +#include "wrapper_common.h" |
| 2 | +#include "blas.h" |
| 3 | + |
| 4 | +#if __cplusplus |
| 5 | +extern "C" { |
| 6 | +#endif |
| 7 | +DLLEXPORT void s_axpy(const blas_int n, const float alpha, const float x[], float y[]){ |
| 8 | + cblas_saxpy(n, alpha, x, 1, y, 1); |
| 9 | +} |
| 10 | + |
| 11 | +DLLEXPORT void d_axpy(const blas_int n, const double alpha, const double x[], double y[]){ |
| 12 | + cblas_daxpy(n, alpha, x, 1, y, 1); |
| 13 | +} |
| 14 | + |
| 15 | +DLLEXPORT void c_axpy(const blas_int n, const blas_complex_float alpha, const blas_complex_float x[], blas_complex_float y[]){ |
| 16 | + cblas_caxpy(n, (float*)&alpha, (float*)x, 1, (float*)y, 1); |
| 17 | +} |
| 18 | + |
| 19 | +DLLEXPORT void z_axpy(const blas_int n, const blas_complex_double alpha, const blas_complex_double x[], blas_complex_double y[]){ |
| 20 | + cblas_zaxpy(n, (double*)&alpha, (double*)x, 1, (double*)y, 1); |
| 21 | +} |
| 22 | + |
| 23 | +DLLEXPORT void s_scale(const blas_int n, const float alpha, float x[]){ |
| 24 | + cblas_sscal(n, alpha, x, 1); |
| 25 | +} |
| 26 | + |
| 27 | +DLLEXPORT void d_scale(const blas_int n, const double alpha, double x[]){ |
| 28 | + cblas_dscal(n, alpha, x, 1); |
| 29 | +} |
| 30 | + |
| 31 | +DLLEXPORT void c_scale(const blas_int n, const blas_complex_float alpha, blas_complex_float x[]){ |
| 32 | + cblas_cscal(n, (float*)&alpha, (float*)x, 1); |
| 33 | +} |
| 34 | + |
| 35 | +DLLEXPORT void z_scale(const blas_int n, const blas_complex_double alpha, blas_complex_double x[]){ |
| 36 | + cblas_zscal(n, (double*)&alpha, (double*)x, 1); |
| 37 | +} |
| 38 | + |
| 39 | +DLLEXPORT float s_dot_product(const blas_int n, const float x[], const float y[]){ |
| 40 | + return cblas_sdot(n, x, 1, y, 1); |
| 41 | +} |
| 42 | + |
| 43 | +DLLEXPORT double d_dot_product(const blas_int n, const double x[], const double y[]){ |
| 44 | + return cblas_ddot(n, x, 1, y, 1); |
| 45 | +} |
| 46 | + |
| 47 | +DLLEXPORT blas_complex_float c_dot_product(const blas_int n, const blas_complex_float x[], const blas_complex_float y[]){ |
| 48 | + blas_complex_float ret; |
| 49 | + cblas_cdotu_sub(n, (float*)x, 1, (float*)y, 1, &ret); |
| 50 | + return ret; |
| 51 | +} |
| 52 | + |
| 53 | +DLLEXPORT blas_complex_double z_dot_product(const blas_int n, const blas_complex_double x[], const blas_complex_double y[]){ |
| 54 | + blas_complex_double ret; |
| 55 | + cblas_zdotu_sub(n, (double*)x, 1, (double*)y, 1, &ret); |
| 56 | + return ret; |
| 57 | +} |
| 58 | + |
| 59 | +DLLEXPORT void s_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blas_int m, const blas_int n, const blas_int k, const float alpha, const float x[], const float y[], const float beta, float c[]){ |
| 60 | + blas_int lda = transA == CblasNoTrans ? m : k; |
| 61 | + blas_int ldb = transB == CblasNoTrans ? k : n; |
| 62 | + |
| 63 | + cblas_sgemm(CblasColMajor, transA, transB, m, n, k, alpha, x, lda, y, ldb, beta, c, m); |
| 64 | +} |
| 65 | + |
| 66 | +DLLEXPORT void d_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blas_int m, const blas_int n, const blas_int k, const double alpha, const double x[], const double y[], const double beta, double c[]){ |
| 67 | + blas_int lda = transA == CblasNoTrans ? m : k; |
| 68 | + blas_int ldb = transB == CblasNoTrans ? k : n; |
| 69 | + |
| 70 | + cblas_dgemm(CblasColMajor, transA, transB, m, n, k, alpha, x, lda, y, ldb, beta, c, m); |
| 71 | +} |
| 72 | + |
| 73 | +DLLEXPORT void c_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blas_int m, const blas_int n, const blas_int k, const blas_complex_float alpha, const blas_complex_float x[], const blas_complex_float y[], const blas_complex_float beta, blas_complex_float c[]){ |
| 74 | + blas_int lda = transA == CblasNoTrans ? m : k; |
| 75 | + blas_int ldb = transB == CblasNoTrans ? k : n; |
| 76 | + |
| 77 | + cblas_cgemm(CblasColMajor, transA, transB, m, n, k, (float*)&alpha, (float*)x, lda, (float*)y, ldb, (float*)&beta, (float*)c, m); |
| 78 | +} |
| 79 | + |
| 80 | +DLLEXPORT void z_matrix_multiply(CBLAS_TRANSPOSE transA, CBLAS_TRANSPOSE transB, const blas_int m, const blas_int n, const blas_int k, const blas_complex_double alpha, const blas_complex_double x[], const blas_complex_double y[], const blas_complex_double beta, blas_complex_double c[]){ |
| 81 | + blas_int lda = transA == CblasNoTrans ? m : k; |
| 82 | + blas_int ldb = transB == CblasNoTrans ? k : n; |
| 83 | + |
| 84 | + cblas_zgemm(CblasColMajor, transA, transB, m, n, k, (double*)&alpha, (double*)x, lda, (double*)y, ldb, (double*)&beta, (double*)c, m); |
| 85 | +} |
| 86 | + |
| 87 | +#if __cplusplus |
| 88 | +} |
| 89 | +#endif |
0 commit comments