pub unsafe extern "C" fn cusolverDnSormqr(
handle: cusolverDnHandle_t,
side: cublasSideMode_t,
trans: cublasOperation_t,
m: c_int,
n: c_int,
k: c_int,
A: *const f32,
lda: c_int,
tau: *const f32,
C: *mut f32,
ldc: c_int,
work: *mut f32,
lwork: c_int,
devInfo: *mut c_int,
) -> cusolverStatus_tExpand description
These helper functions calculate the size of work buffers needed. Please visit cuSOLVER Library Samples - ormqr for a code example.
The S and D data types are real valued single and double precision, respectively.
The C and Z data types are complex valued single and double precision, respectively.
This function overwrites $m \times n$ matrix C by:
$$
C =
\begin{cases}
\operatorname{op}(Q) * C & \text{if } side = \text{CUBLAS_SIDE_LEFT} \
C * \operatorname{op}(Q) & \text{if } side = \text{CUBLAS_SIDE_RIGHT}
\end{cases}
$$
The operation of Q is defined by:
$$
\operatorname{op}(Q) =
\begin{cases}
Q & \text{if } transa = \text{CUBLAS_OP_N} \
Q^T & \text{if } transa = \text{CUBLAS_OP_T} \
Q^H & \text{if } transa = \text{CUBLAS_OP_C}
\end{cases}
$$
Q is a unitary matrix formed by a sequence of elementary reflection vectors from QR factorization (geqrf) of A.
Q=H(1) ``H(2) … H(k)
Q is of order m if side = cublasSideMode_t::CUBLAS_SIDE_LEFT and of order n if side = cublasSideMode_t::CUBLAS_SIDE_RIGHT.
The user has to provide working space which is pointed by input parameter work. The input parameter lwork is size of the working space, and it is returned by geqrf_bufferSize() or ormqr_bufferSize(). Please note that the size in bytes of the working space is equal to sizeof(<type>) * lwork.
If output parameter devInfo = -i (less than zero), the i-th parameter is wrong (not counting handle).
The user can combine geqrf, ormqr and trsm to complete a linear solver or a least-square solver.