Class CuSolverNative
- Namespace
- NVMathNet.Interop
- Assembly
- NVMath.Net.dll
Raw P/Invoke bindings for cuSOLVER dense (cusolverDn).
public static class CuSolverNativeInheritance
Inherited Members
Methods
Check(CuSolverStatus, string?)
Throws NVMathNet.Interop.CuSolverException if status is not
NVMathNet.Interop.CuSolverStatus.Success.
public static void Check(CuSolverStatus status, string? context = null)Parameters
statusCuSolverStatuscontextstring?
Create()
Creates a cuSOLVER dense handle.
public static nint Create()Returns
CreateGesvdjInfo()
Creates a gesvdjInfo_t parameter object (Jacobi tolerance, sweeps, residual).
public static nint CreateGesvdjInfo()Returns
Destroy(nint)
Destroys a cuSOLVER dense handle.
public static void Destroy(nint handle)Parameters
handlenint
DestroyGesvdjInfo(nint)
Destroys a gesvdjInfo_t parameter object.
public static void DestroyGesvdjInfo(nint info)Parameters
infonint
Dgeqrf(nint, int, int, double*, int, double*, double*, int, int*)
Double-precision QR factorisation: A = Q*R.
public static void Dgeqrf(nint handle, int m, int n, double* A, int lda, double* TAU, double* workspace, int lwork, int* devInfo)Parameters
DgeqrfBufferSize(nint, int, int, double*, int)
Queries workspace size for double-precision QR factorisation.
public static int DgeqrfBufferSize(nint handle, int m, int n, double* A, int lda)Parameters
Returns
Dgesvd(nint, byte, byte, int, int, double*, int, double*, double*, int, double*, int, double*, int, double*, int*)
Double-precision SVD: A = USVT.
public static void Dgesvd(nint handle, byte jobu, byte jobvt, int m, int n, double* A, int lda, double* S, double* U, int ldu, double* VT, int ldvt, double* work, int lwork, double* rwork, int* info)Parameters
handlenintjobubytejobvtbytemintnintAdouble*ldaintSdouble*Udouble*lduintVTdouble*ldvtintworkdouble*lworkintrworkdouble*infoint*
DgesvdBufferSize(nint, int, int)
Queries workspace size for double-precision SVD.
public static int DgesvdBufferSize(nint handle, int m, int n)Parameters
Returns
DgesvdjBatched(nint, CuSolverEigMode, int, int, double*, int, double*, double*, int, double*, int, double*, int, int*, nint, int)
Double-precision batched Jacobi SVD (m, n ≤ 32): A = U·diag(S)·V^T per matrix.
public static void DgesvdjBatched(nint handle, CuSolverEigMode jobz, int m, int n, double* A, int lda, double* S, double* U, int ldu, double* V, int ldv, double* work, int lwork, int* info, nint gesvdjParams, int batchSize)Parameters
handlenintjobzCuSolverEigModemintnintAdouble*ldaintSdouble*Udouble*lduintVdouble*ldvintworkdouble*lworkintinfoint*gesvdjParamsnintbatchSizeint
DgesvdjBatchedBufferSize(nint, CuSolverEigMode, int, int, double*, int, double*, double*, int, double*, int, nint, int)
Queries workspace size for double-precision batched Jacobi SVD.
public static int DgesvdjBatchedBufferSize(nint handle, CuSolverEigMode jobz, int m, int n, double* A, int lda, double* S, double* U, int ldu, double* V, int ldv, nint gesvdjParams, int batchSize)Parameters
handlenintjobzCuSolverEigModemintnintAdouble*ldaintSdouble*Udouble*lduintVdouble*ldvintgesvdjParamsnintbatchSizeint
Returns
Dgetrf(nint, int, int, double*, int, double*, int*, int*)
Double-precision LU factorisation: PA = LU.
public static void Dgetrf(nint handle, int m, int n, double* A, int lda, double* workspace, int* devIpiv, int* devInfo)Parameters
DgetrfBufferSize(nint, int, int, double*, int)
Queries workspace size for double-precision LU factorisation.
public static int DgetrfBufferSize(nint handle, int m, int n, double* A, int lda)Parameters
Returns
Dgetrs(nint, int, int, int, double*, int, int*, double*, int, int*)
Double-precision LU solve: solves A*X = B given factorised A and pivots.
public static void Dgetrs(nint handle, int trans, int n, int nrhs, double* A, int lda, int* devIpiv, double* B, int ldb, int* devInfo)Parameters
Dorgqr(nint, int, int, int, double*, int, double*, double*, int, int*)
Overwrites A (holding Householder vectors from geqrf) with the first n columns of Q.
public static void Dorgqr(nint handle, int m, int n, int k, double* A, int lda, double* tau, double* work, int lwork, int* info)Parameters
DorgqrBufferSize(nint, int, int, int, double*, int, double*)
Queries workspace size for double-precision orgqr.
public static int DorgqrBufferSize(nint handle, int m, int n, int k, double* A, int lda, double* tau)Parameters
Returns
Dormqr(nint, CuBlasSideMode, CuBlasOperation, int, int, int, double*, int, double*, double*, int, double*, int, int*)
Applies Q (or Q^T) from geqrf to C: C = op(Q) C or C op(Q).
public static void Dormqr(nint handle, CuBlasSideMode side, CuBlasOperation trans, int m, int n, int k, double* A, int lda, double* tau, double* C, int ldc, double* work, int lwork, int* info)Parameters
handlenintsideCuBlasSideModetransCuBlasOperationmintnintkintAdouble*ldainttaudouble*Cdouble*ldcintworkdouble*lworkintinfoint*
DormqrBufferSize(nint, CuBlasSideMode, CuBlasOperation, int, int, int, double*, int, double*, double*, int)
Queries workspace size for double-precision ormqr.
public static int DormqrBufferSize(nint handle, CuBlasSideMode side, CuBlasOperation trans, int m, int n, int k, double* A, int lda, double* tau, double* C, int ldc)Parameters
handlenintsideCuBlasSideModetransCuBlasOperationmintnintkintAdouble*ldainttaudouble*Cdouble*ldcint
Returns
Dpotrf(nint, CuBlasFillMode, int, double*, int, double*, int, int*)
Double-precision Cholesky factorisation: A = LL^T or U^TU.
public static void Dpotrf(nint handle, CuBlasFillMode uplo, int n, double* A, int lda, double* workspace, int lwork, int* devInfo)Parameters
DpotrfBatched(nint, CuBlasFillMode, int, double**, int, int*, int)
Batched double-precision Cholesky. aArray is a device array of
batchSize device pointers, each to an n×n matrix.
public static void DpotrfBatched(nint handle, CuBlasFillMode uplo, int n, double** aArray, int lda, int* infoArray, int batchSize)Parameters
DpotrfBufferSize(nint, CuBlasFillMode, int, double*, int)
Queries workspace size for double-precision Cholesky factorisation.
public static int DpotrfBufferSize(nint handle, CuBlasFillMode uplo, int n, double* A, int lda)Parameters
handlenintuploCuBlasFillModenintAdouble*ldaint
Returns
Dsyevd(nint, CuSolverEigMode, CuBlasFillMode, int, double*, int, double*, double*, int, int*)
Double-precision symmetric eigenvalue decomposition.
public static void Dsyevd(nint handle, CuSolverEigMode jobz, CuBlasFillMode uplo, int n, double* A, int lda, double* W, double* work, int lwork, int* info)Parameters
handlenintjobzCuSolverEigModeuploCuBlasFillModenintAdouble*ldaintWdouble*workdouble*lworkintinfoint*
DsyevdBufferSize(nint, CuSolverEigMode, CuBlasFillMode, int, double*, int, double*)
Queries workspace size for double-precision symmetric eigenvalue decomposition.
public static int DsyevdBufferSize(nint handle, CuSolverEigMode jobz, CuBlasFillMode uplo, int n, double* A, int lda, double* W)Parameters
handlenintjobzCuSolverEigModeuploCuBlasFillModenintAdouble*ldaintWdouble*
Returns
SetStream(nint, nint)
Associates a CUDA stream with the handle.
public static void SetStream(nint handle, nint stream)Parameters
Sgeqrf(nint, int, int, float*, int, float*, float*, int, int*)
Single-precision QR factorisation: A = Q*R.
public static void Sgeqrf(nint handle, int m, int n, float* A, int lda, float* TAU, float* workspace, int lwork, int* devInfo)Parameters
SgeqrfBufferSize(nint, int, int, float*, int)
Queries workspace size for single-precision QR factorisation.
public static int SgeqrfBufferSize(nint handle, int m, int n, float* A, int lda)Parameters
Returns
Sgesvd(nint, byte, byte, int, int, float*, int, float*, float*, int, float*, int, float*, int, float*, int*)
Single-precision SVD: A = USVT.
public static void Sgesvd(nint handle, byte jobu, byte jobvt, int m, int n, float* A, int lda, float* S, float* U, int ldu, float* VT, int ldvt, float* work, int lwork, float* rwork, int* info)Parameters
handlenintjobubytejobvtbytemintnintAfloat*ldaintSfloat*Ufloat*lduintVTfloat*ldvtintworkfloat*lworkintrworkfloat*infoint*
SgesvdBufferSize(nint, int, int)
Queries workspace size for single-precision SVD.
public static int SgesvdBufferSize(nint handle, int m, int n)Parameters
Returns
SgesvdjBatched(nint, CuSolverEigMode, int, int, float*, int, float*, float*, int, float*, int, float*, int, int*, nint, int)
Single-precision batched Jacobi SVD (m, n ≤ 32): A = U·diag(S)·V^T per matrix.
public static void SgesvdjBatched(nint handle, CuSolverEigMode jobz, int m, int n, float* A, int lda, float* S, float* U, int ldu, float* V, int ldv, float* work, int lwork, int* info, nint gesvdjParams, int batchSize)Parameters
handlenintjobzCuSolverEigModemintnintAfloat*ldaintSfloat*Ufloat*lduintVfloat*ldvintworkfloat*lworkintinfoint*gesvdjParamsnintbatchSizeint
SgesvdjBatchedBufferSize(nint, CuSolverEigMode, int, int, float*, int, float*, float*, int, float*, int, nint, int)
Queries workspace size for single-precision batched Jacobi SVD.
public static int SgesvdjBatchedBufferSize(nint handle, CuSolverEigMode jobz, int m, int n, float* A, int lda, float* S, float* U, int ldu, float* V, int ldv, nint gesvdjParams, int batchSize)Parameters
handlenintjobzCuSolverEigModemintnintAfloat*ldaintSfloat*Ufloat*lduintVfloat*ldvintgesvdjParamsnintbatchSizeint
Returns
Sgetrf(nint, int, int, float*, int, float*, int*, int*)
Single-precision LU factorisation: PA = LU.
public static void Sgetrf(nint handle, int m, int n, float* A, int lda, float* workspace, int* devIpiv, int* devInfo)Parameters
SgetrfBufferSize(nint, int, int, float*, int)
Queries workspace size for single-precision LU factorisation.
public static int SgetrfBufferSize(nint handle, int m, int n, float* A, int lda)Parameters
Returns
Sgetrs(nint, int, int, int, float*, int, int*, float*, int, int*)
Single-precision LU solve: solves A*X = B given factorised A and pivots.
public static void Sgetrs(nint handle, int trans, int n, int nrhs, float* A, int lda, int* devIpiv, float* B, int ldb, int* devInfo)Parameters
Sorgqr(nint, int, int, int, float*, int, float*, float*, int, int*)
Overwrites A (holding Householder vectors from geqrf) with the first n columns of Q.
public static void Sorgqr(nint handle, int m, int n, int k, float* A, int lda, float* tau, float* work, int lwork, int* info)Parameters
SorgqrBufferSize(nint, int, int, int, float*, int, float*)
Queries workspace size for single-precision orgqr.
public static int SorgqrBufferSize(nint handle, int m, int n, int k, float* A, int lda, float* tau)Parameters
Returns
Sormqr(nint, CuBlasSideMode, CuBlasOperation, int, int, int, float*, int, float*, float*, int, float*, int, int*)
Applies Q (or Q^T) from geqrf to C: C = op(Q) C or C op(Q).
public static void Sormqr(nint handle, CuBlasSideMode side, CuBlasOperation trans, int m, int n, int k, float* A, int lda, float* tau, float* C, int ldc, float* work, int lwork, int* info)Parameters
handlenintsideCuBlasSideModetransCuBlasOperationmintnintkintAfloat*ldainttaufloat*Cfloat*ldcintworkfloat*lworkintinfoint*
SormqrBufferSize(nint, CuBlasSideMode, CuBlasOperation, int, int, int, float*, int, float*, float*, int)
Queries workspace size for single-precision ormqr.
public static int SormqrBufferSize(nint handle, CuBlasSideMode side, CuBlasOperation trans, int m, int n, int k, float* A, int lda, float* tau, float* C, int ldc)Parameters
handlenintsideCuBlasSideModetransCuBlasOperationmintnintkintAfloat*ldainttaufloat*Cfloat*ldcint
Returns
Spotrf(nint, CuBlasFillMode, int, float*, int, float*, int, int*)
Single-precision Cholesky factorisation: A = LL^T or U^TU.
public static void Spotrf(nint handle, CuBlasFillMode uplo, int n, float* A, int lda, float* workspace, int lwork, int* devInfo)Parameters
SpotrfBatched(nint, CuBlasFillMode, int, float**, int, int*, int)
Batched single-precision Cholesky. aArray is a device array of
batchSize device pointers, each to an n×n matrix.
public static void SpotrfBatched(nint handle, CuBlasFillMode uplo, int n, float** aArray, int lda, int* infoArray, int batchSize)Parameters
SpotrfBufferSize(nint, CuBlasFillMode, int, float*, int)
Queries workspace size for single-precision Cholesky factorisation.
public static int SpotrfBufferSize(nint handle, CuBlasFillMode uplo, int n, float* A, int lda)Parameters
handlenintuploCuBlasFillModenintAfloat*ldaint
Returns
Ssyevd(nint, CuSolverEigMode, CuBlasFillMode, int, float*, int, float*, float*, int, int*)
Single-precision symmetric eigenvalue decomposition.
public static void Ssyevd(nint handle, CuSolverEigMode jobz, CuBlasFillMode uplo, int n, float* A, int lda, float* W, float* work, int lwork, int* info)Parameters
handlenintjobzCuSolverEigModeuploCuBlasFillModenintAfloat*ldaintWfloat*workfloat*lworkintinfoint*
SsyevdBufferSize(nint, CuSolverEigMode, CuBlasFillMode, int, float*, int, float*)
Queries workspace size for single-precision symmetric eigenvalue decomposition.
public static int SsyevdBufferSize(nint handle, CuSolverEigMode jobz, CuBlasFillMode uplo, int n, float* A, int lda, float* W)Parameters
handlenintjobzCuSolverEigModeuploCuBlasFillModenintAfloat*ldaintWfloat*
Returns
Zgeqrf(nint, int, int, Complex*, int, Complex*, Complex*, int, int*)
Complex QR factorisation.
public static void Zgeqrf(nint handle, int m, int n, Complex* A, int lda, Complex* tau, Complex* workspace, int lwork, int* devInfo)Parameters
ZgeqrfBufferSize(nint, int, int, Complex*, int)
Queries workspace size for complex QR factorisation.
public static int ZgeqrfBufferSize(nint handle, int m, int n, Complex* A, int lda)Parameters
Returns
Zgesvd(nint, byte, byte, int, int, Complex*, int, double*, Complex*, int, Complex*, int, Complex*, int, double*, int*)
Complex SVD: A = U·diag(S)·V^H (VT holds V^H). Requires m ≥ n.
public static void Zgesvd(nint handle, byte jobu, byte jobvt, int m, int n, Complex* A, int lda, double* S, Complex* U, int ldu, Complex* VT, int ldvt, Complex* work, int lwork, double* rwork, int* info)Parameters
handlenintjobubytejobvtbytemintnintAComplex*ldaintSdouble*UComplex*lduintVTComplex*ldvtintworkComplex*lworkintrworkdouble*infoint*
ZgesvdBufferSize(nint, int, int)
Queries workspace size for complex SVD (NVMathNet.Interop.CuSolverNative.Zgesvd(System.IntPtr,System.Byte,System.Byte,System.Int32,System.Int32,System.Numerics.Complex*,System.Int32,System.Double*,System.Numerics.Complex*,System.Int32,System.Numerics.Complex*,System.Int32,System.Numerics.Complex*,System.Int32,System.Double*,System.Int32*)).
public static int ZgesvdBufferSize(nint handle, int m, int n)Parameters
Returns
ZgesvdjBatched(nint, CuSolverEigMode, int, int, Complex*, int, double*, Complex*, int, Complex*, int, Complex*, int, int*, nint, int)
Batched complex Jacobi SVD (m, n ≤ 32): A = U·diag(S)·V^H per matrix.
public static void ZgesvdjBatched(nint handle, CuSolverEigMode jobz, int m, int n, Complex* A, int lda, double* S, Complex* U, int ldu, Complex* V, int ldv, Complex* work, int lwork, int* info, nint gesvdjParams, int batchSize)Parameters
handlenintjobzCuSolverEigModemintnintAComplex*ldaintSdouble*UComplex*lduintVComplex*ldvintworkComplex*lworkintinfoint*gesvdjParamsnintbatchSizeint
ZgesvdjBatchedBufferSize(nint, CuSolverEigMode, int, int, Complex*, int, double*, Complex*, int, Complex*, int, nint, int)
Queries workspace size for batched complex Jacobi SVD.
public static int ZgesvdjBatchedBufferSize(nint handle, CuSolverEigMode jobz, int m, int n, Complex* A, int lda, double* S, Complex* U, int ldu, Complex* V, int ldv, nint gesvdjParams, int batchSize)Parameters
handlenintjobzCuSolverEigModemintnintAComplex*ldaintSdouble*UComplex*lduintVComplex*ldvintgesvdjParamsnintbatchSizeint
Returns
Zgetrf(nint, int, int, Complex*, int, Complex*, int*, int*)
Complex LU factorisation with partial pivoting.
public static void Zgetrf(nint handle, int m, int n, Complex* A, int lda, Complex* workspace, int* devIpiv, int* devInfo)Parameters
ZgetrfBufferSize(nint, int, int, Complex*, int)
Queries workspace size for complex LU factorisation.
public static int ZgetrfBufferSize(nint handle, int m, int n, Complex* A, int lda)Parameters
Returns
Zgetrs(nint, int, int, int, Complex*, int, int*, Complex*, int, int*)
Complex LU solve from the factors of NVMathNet.Interop.CuSolverNative.Zgetrf(System.IntPtr,System.Int32,System.Int32,System.Numerics.Complex*,System.Int32,System.Numerics.Complex*,System.Int32*,System.Int32*).
public static void Zgetrs(nint handle, int trans, int n, int nrhs, Complex* A, int lda, int* devIpiv, Complex* B, int ldb, int* devInfo)Parameters
handleninttransintnintnrhsintAComplex*ldaintdevIpivint*BComplex*ldbintdevInfoint*
Zheevd(nint, CuSolverEigMode, CuBlasFillMode, int, Complex*, int, double*, Complex*, int, int*)
Eigenvalues (and optionally eigenvectors) of a Hermitian matrix; W holds real eigenvalues.
public static void Zheevd(nint handle, CuSolverEigMode jobz, CuBlasFillMode uplo, int n, Complex* A, int lda, double* W, Complex* work, int lwork, int* info)Parameters
handlenintjobzCuSolverEigModeuploCuBlasFillModenintAComplex*ldaintWdouble*workComplex*lworkintinfoint*
ZheevdBufferSize(nint, CuSolverEigMode, CuBlasFillMode, int, Complex*, int, double*)
Queries workspace size for NVMathNet.Interop.CuSolverNative.Zheevd(System.IntPtr,NVMathNet.Interop.CuSolverEigMode,NVMathNet.Interop.CuBlasFillMode,System.Int32,System.Numerics.Complex*,System.Int32,System.Double*,System.Numerics.Complex*,System.Int32,System.Int32*).
public static int ZheevdBufferSize(nint handle, CuSolverEigMode jobz, CuBlasFillMode uplo, int n, Complex* A, int lda, double* W)Parameters
handlenintjobzCuSolverEigModeuploCuBlasFillModenintAComplex*ldaintWdouble*
Returns
Zpotrf(nint, CuBlasFillMode, int, Complex*, int, Complex*, int, int*)
Cholesky factorisation of a Hermitian positive-definite matrix.
public static void Zpotrf(nint handle, CuBlasFillMode uplo, int n, Complex* A, int lda, Complex* workspace, int lwork, int* devInfo)Parameters
ZpotrfBatched(nint, CuBlasFillMode, int, Complex**, int, int*, int)
Batched complex Cholesky. aArray is a device array of device pointers.
public static void ZpotrfBatched(nint handle, CuBlasFillMode uplo, int n, Complex** aArray, int lda, int* infoArray, int batchSize)Parameters
ZpotrfBufferSize(nint, CuBlasFillMode, int, Complex*, int)
Queries workspace size for complex Cholesky factorisation.
public static int ZpotrfBufferSize(nint handle, CuBlasFillMode uplo, int n, Complex* A, int lda)Parameters
handlenintuploCuBlasFillModenintAComplex*ldaint
Returns
Zungqr(nint, int, int, int, Complex*, int, Complex*, Complex*, int, int*)
Forms the first n columns of the unitary factor Q from a complex QR factorisation.
public static void Zungqr(nint handle, int m, int n, int k, Complex* A, int lda, Complex* tau, Complex* work, int lwork, int* info)Parameters
ZungqrBufferSize(nint, int, int, int, Complex*, int, Complex*)
Queries workspace size for NVMathNet.Interop.CuSolverNative.Zungqr(System.IntPtr,System.Int32,System.Int32,System.Int32,System.Numerics.Complex*,System.Int32,System.Numerics.Complex*,System.Numerics.Complex*,System.Int32,System.Int32*).
public static int ZungqrBufferSize(nint handle, int m, int n, int k, Complex* A, int lda, Complex* tau)Parameters
Returns
Zunmqr(nint, CuBlasSideMode, CuBlasOperation, int, int, int, Complex*, int, Complex*, Complex*, int, Complex*, int, int*)
Applies Q (or Q^H) from a complex QR factorisation to C.
public static void Zunmqr(nint handle, CuBlasSideMode side, CuBlasOperation trans, int m, int n, int k, Complex* A, int lda, Complex* tau, Complex* C, int ldc, Complex* work, int lwork, int* info)Parameters
handlenintsideCuBlasSideModetransCuBlasOperationmintnintkintAComplex*ldainttauComplex*CComplex*ldcintworkComplex*lworkintinfoint*
ZunmqrBufferSize(nint, CuBlasSideMode, CuBlasOperation, int, int, int, Complex*, int, Complex*, Complex*, int)
Queries workspace size for NVMathNet.Interop.CuSolverNative.Zunmqr(System.IntPtr,NVMathNet.Interop.CuBlasSideMode,NVMathNet.Interop.CuBlasOperation,System.Int32,System.Int32,System.Int32,System.Numerics.Complex*,System.Int32,System.Numerics.Complex*,System.Numerics.Complex*,System.Int32,System.Numerics.Complex*,System.Int32,System.Int32*).
public static int ZunmqrBufferSize(nint handle, CuBlasSideMode side, CuBlasOperation trans, int m, int n, int k, Complex* A, int lda, Complex* tau, Complex* C, int ldc)Parameters
handlenintsideCuBlasSideModetransCuBlasOperationmintnintkintAComplex*ldainttauComplex*CComplex*ldcint