From 463ed852261da4d1dd1b859fa717a1d683306c9d Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 14 May 2020 18:15:23 -0700 Subject: feat: begun work on final blas level 2 --- include/libmath/blas.h | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 include/libmath/blas.h (limited to 'include') diff --git a/include/libmath/blas.h b/include/libmath/blas.h new file mode 100644 index 0000000..b331a8d --- /dev/null +++ b/include/libmath/blas.h @@ -0,0 +1,79 @@ +#pragma once + +// TODO: think of better names +enum +{ + blas·LowerTri = 1u, + blas·Transpose = 2u, + blas·ConjTranspose = 4u, + blas·DiagOnes = 8u, + blas·LeftSide = 16u, +}; + +typedef uint32 blas·Flag; + +/* + * Floats + */ + +// level 1 +void blas·rotf(int len, float *x, int incx, float *y, int incy, float cos, float sin); +void blas·rotgf(float *a, float *b, float *cos, float *sin); +error blas·rotmf(int len, float *x, int incx, float *y, int incy, float p[5]); +void blas·scalef(int len, float a, float *x, int inc); +void blas·copyf(int len, float *x, int incx, float *y, int incy); +void blas·swapf(int len, float *x, int incx, float *y, int incy); +void blas·axpyf(int len, float a, float *x, int incx, float *y, int incy); +float blas·dotf(int len, float *x, int incx, float *y, int incy); +float blas·normf(int len, float *x, int inc); +float blas·sumf(int len, float *x, int inc); +int blas·argmaxf(int len, float *x, int inc); +int blas·argminf(int len, float *x, int inc); + +// level 2 +void blas·tpmvf(blas·Flag f, int n, float *m, float *x); +error blas·gemvf(int nrow, int ncol, float a, float *m, int incm, float *x, int incx, float b, float *y, int incy) ; +void blas·tpsvf(blas·Flag f, int n, float *m, float *x); +void blas·gerf(int nrow, int ncol, float a, float *x, int incx, float *y, int incy, float *m, int incm); +void blas·herf(int n, float a, float *x, float *m); +void blas·syrf(int nrow, int ncol, float a, float *x, float *m); + +// level 3 +void blas·gemmf(int n1, int n2, int n3, float a, float *m1, float *m2, float b, float *m3); +void blas·trmmf(blas·Flag f, int nrow, int ncol, float a, float *m1, float *m2); +void blas·trsmf(blas·Flag f, int nrow, int ncol, float a, float *m1, float *m2); + +/* + * Doubles + */ + +// level 1 +void blas·rotd(int len, double *x, int incx, double *y, int incy, double cos, double sin); +void blas·rotgd(double *a, double *b, double *cos, double *sin); +error blas·rotmd(int len, double *x, int incx, double *y, int incy, double p[5]); +void blas·scaled(int len, double a, double *x, int inc); +void blas·copyd(int len, double *x, int incx, double *y, int incy); +void blas·swapd(int len, double *x, int incx, double *y, int incy); +void blas·axpyd(int len, double a, double *x, int incx, double *y, int incy); +double blas·dotd(int len, double *x, int incx, double *y, int incy); +double blas·normd(int len, double *x, int inc); +double blas·sumd(int len, double *x, int inc); +int blas·argmaxd(int len, double *x, int inc); +int blas·argmind(int len, double *x, int inc); + +// level 2 +void blas·tpmvd(blas·Flag f, int n, double *m, double *x); +error blas·gemvd(int nrow, int ncol, double a, double *m, int incm, double *x, int incx, double b, double *y, int incy) ; +void blas·tpsvd(blas·Flag f, int n, double *m, double *x); +void blas·gerd(int nrow, int ncol, double a, double *x, int incx, double *y, int incy, double *m, int incm); +void blas·herd(int n, double a, double *x, double *m); +void blas·syrd(int nrow, int ncol, double a, double *x, double *m); + +// level 3 +void blas·gemmd(int n1, int n2, int n3, double a, double *m1, double *m2, double b, double *m3); +void blas·trmmd(blas·Flag f, int nrow, int ncol, double a, double *m1, double *m2); +void blas·trsmd(blas·Flag f, int nrow, int ncol, double a, double *m1, double *m2); + +/* + * TODO: Complex + */ -- cgit v1.2.1