Skip to main content

cusolverDnDgebrd

Function cusolverDnDgebrd 

Source
pub unsafe extern "C" fn cusolverDnDgebrd(
    handle: cusolverDnHandle_t,
    m: c_int,
    n: c_int,
    A: *mut f64,
    lda: c_int,
    D: *mut f64,
    E: *mut f64,
    TAUQ: *mut f64,
    TAUP: *mut f64,
    Work: *mut f64,
    Lwork: c_int,
    devInfo: *mut c_int,
) -> cusolverStatus_t
Expand description

These helper functions calculate the size of work buffers needed.

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 reduces a general $m \times n$ matrix A to a real upper or lower bidiagonal form B by an orthogonal transformation: $Q^{H}\*A\*P = B$

If m>=n, B is upper bidiagonal; if m<n, B is lower bidiagonal.

The matrix Q and P are overwritten into matrix A in the following sense:

  • if m>=n, the diagonal and the first superdiagonal are overwritten with the upper bidiagonal matrix B; the elements below the diagonal, with the array TAUQ, represent the orthogonal matrix Q as a product of elementary reflectors, and the elements above the first superdiagonal, with the array TAUP, represent the orthogonal matrix P as a product of elementary reflectors.
  • if m<n, the diagonal and the first subdiagonal are overwritten with the lower bidiagonal matrix B; the elements below the first subdiagonal, with the array TAUQ, represent the orthogonal matrix Q as a product of elementary reflectors, and the elements above the diagonal, with the array TAUP, represent the orthogonal matrix P as a product of elementary reflectors.

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 gebrd_bufferSize().

If output parameter devInfo = -i (less than zero), the i-th parameter is wrong (not counting handle).

Remark: gebrd only supports m>=n.