gesvd#
Computes the singular value decomposition of a general rectangular matrix.
Description
gesvd
supports the following precisions.
T
float
double
std::complex<float>
std::complex<double>
gesvd (Buffer Version)#
Description
The routine computes the singular value decomposition (SVD) of a real/complex \(m \times n\) matrix \(A\), optionally computing the left and/or right singular vectors. The SVD is written as
\(A = U\Sigma V^T\) for real routines
\(A = U\Sigma V^H\) for complex routines
where \(\Sigma\) is an \(m \times n\) diagonal matrix, \(U\) is an \(m \times m\) orthogonal/unitary matrix, and \(V\) is an \(n \times n\) orthogonal/unitary matrix. The diagonal elements of \(\Sigma\) are the singular values of \(A\); they are real and non-negative, and are returned in descending order. The first \(\min(m, n)\) columns of \(U\) and \(V\) are the left and right singular vectors of \(A\).
Syntax
namespace oneapi::mkl::lapack {
void gesvd(sycl::queue &queue, oneapi::mkl::job jobu, oneapi::mkl::job jobvt, std::int64_t m, std::int64_t n, sycl::buffer<T,1> &a, std::int64_t lda, sycl::buffer<realT,1> &s, sycl::buffer<T,1> &u, std::int64_t ldu, sycl::buffer<T,1> &vt, std::int64_t ldvt, sycl::buffer<T,1> &scratchpad, std::int64_t scratchpad_size)
}
Input Parameters
- queue
The queue where the routine should be executed.
- jobu
Must be
job::allvec
,job::somevec
,job::overwritevec
, orjob::novec
. Specifies options for computing all or part of the matrix \(U\).If
jobu = job::allvec
, all \(m\) columns of \(U\) are returned in the bufferu
;if
jobu = job::somevec
, the first \(\min(m, n)\) columns of \(U\) (the left singular vectors) are returned in the bufferu
;if
jobu = job::overwritevec
, the first \(\min(m, n)\) columns of \(U\) (the left singular vectors) are overwritten on the buffer a;if
jobu = job::novec
, no columns of \(U\) (no left singular vectors) are computed.- jobvt
Must be
job::allvec, job::somevec
,job::overwritevec
, orjob::novec
. Specifies options for computing all or part of the matrix \(V^T/V^H\).If
jobvt = job::allvec
, all \(n\) columns of \(V^T/V^H\) are returned in the buffer vt;if
jobvt = job::somevec
, the first \(\min(m, n)\) columns of \(V^T/V^H\) (the left singular vectors) are returned in the buffer vt;if
jobvt = job::overwritevec
, the first \(\min(m, n)\) columns of \(V^T/V^H\) (the left singular vectors) are overwritten on the buffera
;if
jobvt = job::novec
, no columns of \(V^T/V^H\) (no left singular vectors) are computed.jobvt
andjobu
cannot both bejob::overwritevec
.- m
The number of rows in the matrix \(A\) (\(0 \le m\)).
- a
The buffer
a
, size(lda,*)
. The buffera
contains the matrix \(A\). The second dimension ofa
must be at least \(\max(1, m)\).- lda
The leading dimension of
a
.- ldu
The leading dimension of
u
.- ldvt
The leading dimension of
vt
.- scratchpad_size
Size of scratchpad memory as a number of floating point elements of type
T
. Size should not be less than the value returned by gesvd_scratchpad_size function.
Output Parameters
- a
On exit,
If
jobu = job::overwritevec
,a
is overwritten with the first \(\min(m,n)\) columns of \(U\) (the left singular vectors stored columnwise);If
jobvt = job::overwritevec
,a
is overwritten with the first \(\min(m, n)\) rows of \(V^{T}\)/\(V^{H}\) (the right singular vectors stored rowwise);If
jobu
\(\ne\)job::overwritevec
andjobvt
\(\ne\)job::overwritevec
, the contents of a are destroyed.- s
Buffer containing the singular values, size at least \(\max(1, \min(m,n))\). Contains the singular values of \(A\) sorted so that \(s(i) \ge s(i+1)\).
- u
Buffer containing \(U\); the second dimension of
u
must be at least \(\max(1, m)\) ifjobu = job::allvec
, and at least \(\max(1, \min(m, n))\) ifjobu = job::somevec
.If
jobu = job::allvec
,u
contains the \(m \times m\) orthogonal/unitary matrix \(U\).If
jobu = job::somevec
,u
contains the first \(\min(m, n)\) columns of \(U\) (the left singular vectors stored column-wise).If
jobu = job::novec
orjob::overwritevec
,u
is not referenced.- vt
Buffer containing \(V^{T}\); the second dimension of
vt
must be at least \(\max(1, n)\).If
jobvt = job::allvec
,vt
contains the \(n \times n\) orthogonal/unitary matrix \(V^{T}\)/\(V^{H}\).If
jobvt = job::somevec
,vt
contains the first \(\min(m, n)\) rows of \(V^{T}\)/\(V^{H}\) (the right singular vectors stored row-wise).If
jobvt = job::novec
orjob::overwritevec
,vt
is not referenced.- scratchpad
Buffer holding scratchpad memory to be used by routine for storing intermediate results.
gesvd (USM Version)#
Description
The routine computes the singular value decomposition (SVD) of a real/complex \(m \times n\) matrix \(A\), optionally computing the left and/or right singular vectors. The SVD is written as
\(A = U\Sigma V^T\) for real routines
\(A = U\Sigma V^H\) for complex routines
where \(\Sigma\) is an \(m \times n\) diagonal matrix, \(U\) is an \(m \times m\) orthogonal/unitary matrix, and \(V\) is an \(n \times n\) orthogonal/unitary matrix. The diagonal elements of \(\Sigma\) are the singular values of \(A\); they are real and non-negative, and are returned in descending order. The first \(\min(m, n)\) columns of \(U\) and \(V\) are the left and right singular vectors of \(A\).
Syntax
namespace oneapi::mkl::lapack {
sycl::event gesvd(sycl::queue &queue, oneapi::mkl::job jobu, oneapi::mkl::job jobvt, std::int64_t m, std::int64_t n, T *a, std::int64_t lda, RealT *s, T *u, std::int64_t ldu, T *vt, std::int64_t ldvt, T *scratchpad, std::int64_t scratchpad_size, const std::vector<sycl::event> &events = {})
}
Input Parameters
- queue
The queue where the routine should be executed.
- jobu
Must be
job::allvec
,job::somevec
,job::overwritevec
, orjob::novec
. Specifies options for computing all or part of the matrix \(U\).If
jobu = job::allvec
, all \(m\) columns of \(U\) are returned in the arrayu
;if
jobu = job::somevec
, the first \(\min(m, n)\) columns of \(U\) (the left singular vectors) are returned in the arrayu
;if
jobu = job::overwritevec
, the first \(\min(m, n)\) columns of \(U\) (the left singular vectors) are overwritten on the array a;if
jobu = job::novec
, no columns of \(U\) (no left singular vectors) are computed.- jobvt
Must be
job::allvec, job::somevec
,job::overwritevec
, orjob::novec
. Specifies options for computing all or part of the matrix \(V^T/V^H\).If
jobvt = job::allvec
, all \(n\) columns of \(V^T/V^H\) are returned in the arrayvt
;if
jobvt = job::somevec
, the first \(\min(m, n)\) columns of \(V^T/V^H\) (the left singular vectors) are returned in the array vt;if
jobvt = job::overwritevec
, the first \(\min(m, n)\) columns of \(V^T/V^H\) (the left singular vectors) are overwritten on the arraya
;if
jobvt = job::novec
, no columns of \(V^T/V^H\) (no left singular vectors) are computed.jobvt
andjobu
cannot both bejob::overwritevec
.- m
The number of rows in the matrix \(A\) (\(0 \le m\)).
- a
Pointer to array
a
, size(lda,*)
, containing the matrix \(A\). The second dimension ofa
must be at least \(\max(1, m)\).- lda
The leading dimension of
a
.- ldu
The leading dimension of
u
.- ldvt
The leading dimension of
vt
.- scratchpad_size
Size of scratchpad memory as a number of floating point elements of type
T
. Size should not be less than the value returned by gesvd_scratchpad_size function.- events
List of events to wait for before starting computation. Defaults to empty list.
Output Parameters
- a
On exit,
If
jobu = job::overwritevec
,a
is overwritten with the first \(\min(m,n)\) columns of \(U\) (the left singular vectors stored columnwise);If
jobvt = job::overwritevec
,a
is overwritten with the first \(\min(m, n)\) rows of \(V^{T}\)/\(V^{H}\) (the right singular vectors stored rowwise);If
jobu
\(\ne\)job::overwritevec
andjobvt
\(\ne\)job::overwritevec
, the contents of a are destroyed.- s
Array containing the singular values, size at least \(\max(1, \min(m,n))\). Contains the singular values of \(A\) sorted so that \(s(i) \ge s(i+1)\).
- u
Array containing \(U\); the second dimension of
u
must be at least \(\max(1, m)\) ifjobu = job::allvec
, and at least \(\max(1, \min(m, n))\) ifjobu = job::somevec
.If
jobu = job::allvec
,u
contains the \(m \times m\) orthogonal/unitary matrix \(U\).If
jobu = job::somevec
,u
contains the first \(\min(m, n)\) columns of \(U\) (the left singular vectors stored column-wise).If
jobu = job::novec
orjob::overwritevec
,u
is not referenced.- vt
Array containing \(V^{T}\); the second dimension of
vt
must be at least \(\max(1, n)\).If
jobvt = job::allvec
,vt
contains the \(n \times n\) orthogonal/unitary matrix \(V^{T}\)/\(V^{H}\).If
jobvt = job::somevec
,vt
contains the first \(\min(m, n)\) rows of \(V^{T}\)/\(V^{H}\) (the right singular vectors stored row-wise).If
jobvt = job::novec
orjob::overwritevec
,vt
is not referenced.- scratchpad
Pointer to scratchpad memory to be used by routine for storing intermediate results.
Return Values
Output event to wait on to ensure computation is complete.
Parent topic: LAPACK Singular Value and Eigenvalue Problem Routines