QR Factorization#

GEQRF (GEneral QR Factorization) function computes batched QR factorization of a general matrix:

\[A = Q * R,\]

using Householder reflection transformations, where:

  • A is a batched M x N matrix, with leading dimension lda >= M if matrix A is in column-major layout, or lda >= N if matrix A is row-major,

  • Q is an unitary M x M matrix, and

  • R is an upper triangular matrix if M >= N, or upper trapezoidal matrix if M < N.

cuSolverDx geqrf device functions are (see Execution Methods):

__device__ void execute(data_type* A, data_type* tau);
// with the runtime lda
__device__ void execute(data_type* A, const unsigned int lda, data_type* tau);

After the function, the upper triangular or upper trapezoidal part of input A, including diagonal elements, is replaced by the matrix R.

Matrix Q is not explicitly formed. The elements below the diagonal of A, with the array tau, represent the matrix Q as a product of min(M, N) Householder vectors:

\[Q = H(0) * H(1) * . . . * H(min(M, N) - 1).\]

Each Householder vector has the form \(H(i) = I - tau[i] * v * v^H\), where:

  • tau is an array of size min(M, N) for each batch, and

  • v is a vector of size M for each batch, with v[0 : i - 1] = 0, v[i] = 1, and v[i+1 : M] is stored on exit in A[i+1 : M, i].

The functions support A being either column- or row-major memory layout, see Arrangement operator.