Skip to main content

cusolverDnSormqr

Function cusolverDnSormqr 

Source
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_t
Expand 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.