5 #ifndef FML_GPU_LINALG_LINALG_LU_H
6 #define FML_GPU_LINALG_LINALG_LU_H
12 #include "../../_internals/linalgutils.hh"
14 #include "../arch/arch.hh"
16 #include "../internals/gpuscalar.hh"
19 #include "../gpumat.hh"
20 #include "../gpuvec.hh"
22 #include "internals/err.hh"
50 template <
typename REAL>
53 err::check_card(x, p);
56 const len_t m = x.
nrows();
57 const len_t n = x.
ncols();
58 auto c = x.get_card();
60 const len_t lipiv = std::min(m, n);
61 if (!p.get_card()->valid_card())
66 #if defined(FML_GPULAPACK_VENDOR)
68 gpulapack_status_t check = gpulapack::getrf_buflen(c->lapack_handle(), m,
70 gpulapack::err::check_ret(check,
"getrf_bufferSize");
75 check = gpulapack::getrf(c->lapack_handle(), m, n, x.
data_ptr(), m,
76 work.data_ptr(), p.
data_ptr(), info_device.data_ptr());
78 info_device.get_val(&info);
79 gpulapack::err::check_ret(check,
"getrf");
80 #elif defined(FML_GPULAPACK_MAGMA)
85 #error "Unsupported GPU lapack"
90 template <
typename REAL>
98 fml::linalgutils::check_info(info,
"getrf");