nk 1.0.0
C++ Numerical Computing Runtime
Loading...
Searching...
No Matches
blas3.hpp
1// ops/include/nk/ops/blas3.hpp
2#pragma once
3
4#include <cstddef>
5#include <complex>
6
7namespace nk::ops {
8
9enum class MatrixSide { Left, Right };
10enum class MatrixUplo { Upper, Lower };
11enum class MatrixTranspose { NoTrans, Trans, ConjTrans };
12enum class MatrixDiag { NonUnit, Unit };
13
16void gemm(MatrixTranspose transa, MatrixTranspose transb,
17 std::size_t m, std::size_t n, std::size_t k,
18 double alpha, const double *A, std::size_t lda,
19 const double *B, std::size_t ldb,
20 double beta, double *C, std::size_t ldc);
21
23void gemm(MatrixTranspose transa, MatrixTranspose transb,
24 std::size_t m, std::size_t n, std::size_t k,
25 std::complex<double> alpha, const std::complex<double> *A, std::size_t lda,
26 const std::complex<double> *B, std::size_t ldb,
27 std::complex<double> beta, std::complex<double> *C, std::size_t ldc);
28
30void trsm(MatrixSide side, MatrixUplo uplo, MatrixTranspose trans, MatrixDiag diag,
31 std::size_t m, std::size_t n,
32 double alpha, const double *A, std::size_t lda,
33 double *B, std::size_t ldb);
34
36void trsm(MatrixSide side, MatrixUplo uplo, MatrixTranspose trans, MatrixDiag diag,
37 std::size_t m, std::size_t n,
38 std::complex<double> alpha, const std::complex<double> *A, std::size_t lda,
39 std::complex<double> *B, std::size_t ldb);
40
42void syrk(MatrixUplo uplo, MatrixTranspose trans,
43 std::size_t n, std::size_t k,
44 double alpha, const double *A, std::size_t lda,
45 double beta, double *C, std::size_t ldc);
46
48void syrk(MatrixUplo uplo, MatrixTranspose trans,
49 std::size_t n, std::size_t k,
50 std::complex<double> alpha, const std::complex<double> *A, std::size_t lda,
51 std::complex<double> beta, std::complex<double> *C, std::size_t ldc);
52
53} // namespace nk::ops