28#if defined(NDA_HAVE_CUDA)
32namespace nda::lapack::f77 {
34 void gelss(
int M,
int N,
int NRHS,
double *A,
int LDA,
double *B,
int LDB,
double *S,
double RCOND,
int &RANK,
double *WORK,
int LWORK,
35 double *RWORK,
int &INFO);
36 void gelss(
int M,
int N,
int NRHS, std::complex<double> *A,
int LDA, std::complex<double> *B,
int LDB,
double *S,
double RCOND,
int &RANK,
37 std::complex<double> *WORK,
int LWORK,
double *RWORK,
int &INFO);
39 void gesvd(
char JOBU,
char JOBVT,
int M,
int N,
double *A,
int LDA,
double *S,
double *U,
int LDU,
double *VT,
int LDVT,
double *WORK,
int LWORK,
40 double *RWORK,
int &INFO);
41 void gesvd(
char JOBU,
char JOBVT,
int M,
int N, std::complex<double> *A,
int LDA,
double *S, std::complex<double> *U,
int LDU,
42 std::complex<double> *VT,
int LDVT, std::complex<double> *WORK,
int LWORK,
double *RWORK,
int &INFO);
44 void geqp3(
int M,
int N,
double *A,
int LDA,
int *JPVT,
double *TAU,
double *WORK,
int LWORK,
double *RWORK,
int &INFO);
45 void geqp3(
int M,
int N, std::complex<double> *A,
int LDA,
int *JPVT, std::complex<double> *TAU, std::complex<double> *WORK,
int LWORK,
46 double *RWORK,
int &INFO);
48 void orgqr(
int M,
int N,
int K,
double *A,
int LDA,
double *TAU,
double *WORK,
int LWORK,
int &INFO);
50 void ungqr(
int M,
int N,
int K, std::complex<double> *A,
int LDA, std::complex<double> *TAU, std::complex<double> *WORK,
int LWORK,
int &INFO);
52 void getrf(
int M,
int N,
double *A,
int LDA,
int *ipiv,
int &info);
53 void getrf(
int M,
int N, std::complex<double> *A,
int LDA,
int *ipiv,
int &info);
55 void getri(
int N,
double *A,
int LDA,
int const *ipiv,
double *work,
int lwork,
int &info);
56 void getri(
int N, std::complex<double> *A,
int LDA,
int const *ipiv, std::complex<double> *work,
int lwork,
int &info);
58 void gtsv(
int N,
int NRHS,
double *DL,
double *D,
double *DU,
double *B,
int LDB,
int &info);
59 void gtsv(
int N,
int NRHS, std::complex<double> *DL, std::complex<double> *D, std::complex<double> *DU, std::complex<double> *B,
int LDB,
62 void stev(
char J,
int N,
double *D,
double *E,
double *Z,
int ldz,
double *work,
int &info);
64 void syev(
char JOBZ,
char UPLO,
int N,
double *A,
int LDA,
double *W,
double *work,
int &lwork,
int &info);
66 void heev(
char JOBZ,
char UPLO,
int N, std::complex<double> *A,
int LDA,
double *W, std::complex<double> *work,
int &lwork,
double *work2,
69 void getrs(
char op,
int N,
int NRHS,
double const *A,
int LDA,
int const *ipiv,
double *B,
int LDB,
int &info);
70 void getrs(
char op,
int N,
int NRHS, std::complex<double>
const *A,
int LDA,
int const *ipiv, std::complex<double> *B,
int LDB,
int &info);
75namespace nda::lapack {
Provides a C++ interface for the GPU versions of various LAPACK routines.
int get_ld(A const &a)
Get the leading dimension in LAPACK jargon of an nda::MemoryMatrix.
static constexpr bool has_C_layout
Constexpr variable that is true if the given nda::Array type has a C memory layout.
static constexpr bool is_conj_array_expr
Constexpr variable that is true if the given type is a conjugate lazy expression.
int get_ncols(A const &a)
Get the number of columns in LAPACK jargon of an nda::MemoryMatrix.
static constexpr bool has_F_layout
Constexpr variable that is true if the given nda::Array type has a Fortran memory layout.
const char get_op
Variable template that determines the BLAS matrix operation tag ('N','T','C') based on the given bool...
int gtsv(DL &&dl, D &&d, DU &&du, B &&b)
Interface to the LAPACK gtsv routine.
int getri(A &&a, IPIV const &ipiv)
Interface to the LAPACK getri routine.
int gesvd(A &&a, S &&s, U &&u, VT &&vt)
Interface to the LAPACK gesvd routine.
int getrs(A const &a, B &&b, IPIV const &ipiv)
Interface to the LAPACK getrs routine.
int gelss(A &&a, B &&b, S &&s, double rcond, int &rank)
Interface to the LAPACK gelss routine.
int getrf(A &&a, IPIV &&ipiv)
Interface to the LAPACK getrf routine.
int geqp3(A &&a, JPVT &&jpvt, TAU &&tau)
Interface to the LAPACK geqp3 routine.