gesvd (USM Version)¶
Computes the singular value decomposition of a general rectangular
matrix. This routine belongs to the oneapi::mkl::lapack
namespace.
Description¶
The routine computes the singular value decomposition (SVD) of a
real/complex m
-by-n
matrix A
, optionally computing the
left and/or right singular vectors. The SVD is written as:
A = U*Σ*VT
for real routinesA = U*Σ*VH
for complex routines
where Σ is an m
-by-n
diagonal matrix, U
is an
m
-by-m
orthogonal/unitary matrix, and V
is an
n
-by-n
orthogonal/unitary matrix. The diagonal elements of Σ
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
.
API¶
Syntax¶
namespace oneapi::mkl::lapack {
cl::sycl::event gesvd(cl::sycl::queue &queue,
mkl::jobsvd jobu,
mkl::jobsvd 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<cl::sycl::event> &events = {})
}
gesvd
(USM version) supports the following precision and
devices.
T |
Devices Supported |
---|---|
|
Host and CPU |
|
Host and CPU |
|
Host and CPU |
|
Host and CPU |
Input Parameters¶
- queue
Device queue where calculations will be performed.
- jobu
Must be
jobsvd::vectors
,job::somevec
,jobsvd::vectorsina
, orjob::novec
. Specifies options for computing all or part of the matrixU
.If
jobu = jobsvd::vectors
, allm
columns ofU
are returned in the array u;if
jobu = job::somevec
, the firstmin(m, n)
columns ofU
(the left singular vectors) are returned in the array u;if
jobu = jobsvd::vectorsina
, the firstmin(m, n)
columns ofU
(the left singular vectors) are overwritten on the array a;if
jobu = job::novec
, no columns ofU
(no left singular vectors) are computed.- jobvt
Must be
jobsvd::vectors, job::somevec
,jobsvd::vectorsina
, orjob::novec
. Specifies options for computing all or part of the matrix VT/VH.If
jobvt = jobsvd::vectors
, all n columns of VT/VH are returned in the array vt;if
jobvt = job::somevec
, the firstmin(m, n)
columns of VT/VH (the left singular vectors) are returned in the array vt;if
jobvt = jobsvd::vectorsina
, the firstmin(m, n)
columns of VT/VH (the left singular vectors) are overwritten on the array a;if
jobvt = job::novec
, no columns of VT/VH (no left singular vectors) are computed.jobvt and jobu cannot both be
jobsvd::vectorsina
.- m
The number of rows in the matrix
A
(0≤m
).- n
The number of columns in the matrix
A
(0≤n
).- a
Pointer to array a, size
(lda,*)
. The second dimension ofa
must be at leastmax(1, m)
.- lda
The leading dimension of a.
- ldu
The leading dimension of u.
- ldvt
The leading dimension of vt.
- scratchpad
Pointer to scratchpad memory to be used by the routine for storing intermediate results.
- 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 the 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 = jobsvd::vectorsina
, a is overwritten with the firstmin(m,n)
columns ofU
(the left singular vectors stored columnwise);If
jobvt = jobsvd::vectorsina
, a is overwritten with the firstmin(m, n)
rows ofV
T/V
H (the right singular vectors stored rowwise);If
jobu ≠ jobsvd::vectorsina
andjobvt ≠ jobsvd::vectorsina
, the contents of a are destroyed.- s
Array containing the singular values, size at least
max(1, min(m,n))
. Contains the singular values ofA
sorted so thats(i) ≥ s(i+1)
.- u
Array containing
U
; the second dimension of u must be at leastmax(1, m)
ifjobu = jobsvd::vectors
, and at leastmax(1, min(m, n))
ifjobu = job::somevec
.If
jobu = jobsvd::vectors
, u contains the m-by-m orthogonal/unitary matrixU
.If
jobu = job::somevec
, u contains the firstmin(m, n)
columns ofU
(the left singular vectors stored column-wise).If
jobu = job::novec
orjobsvd::vectorsina
, u is not referenced.- vt
Array containing
V
T; the second dimension of vt must be at leastmax(1, n)
.If
jobvt = jobsvd::vectors
, vt contains the n-by-n orthogonal/unitary matrixV
T/V
H.If
jobvt = job::somevec
, vt contains the firstmin(m, n)
rows ofV
T/V
H (the right singular vectors stored row-wise).If
jobvt = job::novec
orjobsvd::vectorsina
, vt is not referenced.
Exceptions¶
Exception |
Description |
---|---|
|
This exception is thrown when problems occur during calculations. You can obtain the info code of the problem using the get_info() method of the exception object: If If If |
Return Values¶
Output event to wait on to ensure computation is complete.