Skip to main content

cusolverDnXsyevdx

Function cusolverDnXsyevdx 

Source
pub unsafe extern "C" fn cusolverDnXsyevdx(
    handle: cusolverDnHandle_t,
    params: cusolverDnParams_t,
    jobz: cusolverEigMode_t,
    range: cusolverEigRange_t,
    uplo: cublasFillMode_t,
    n: i64,
    dataTypeA: cudaDataType,
    A: *mut c_void,
    lda: i64,
    vl: *mut c_void,
    vu: *mut c_void,
    il: i64,
    iu: i64,
    meig64: *mut i64,
    dataTypeW: cudaDataType,
    W: *mut c_void,
    computeType: cudaDataType,
    bufferOnDevice: *mut c_void,
    workspaceInBytesOnDevice: size_t,
    bufferOnHost: *mut c_void,
    workspaceInBytesOnHost: size_t,
    info: *mut c_int,
) -> cusolverStatus_t
Expand description

The helper functions below can calculate the sizes needed for pre-allocated buffer.

The following routine:

computes all or selection of the eigenvalues and optionally eigenvectors of a symmetric (Hermitian) $n \times n$ matrix A using the generic API interface. The standard symmetric eigenvalue problem is: $$ A\V = V\\Lambda $$

where Λ is a real n×h_meig diagonal matrix. V is an n×h_meig unitary matrix. h_meig is the number of eigenvalues/eigenvectors computed by the routine, h_meig is equal to n when the whole spectrum (e.g., range = cusolverEigRange_t::CUSOLVER_EIG_RANGE_ALL) is requested. The diagonal elements of Λ are the eigenvalues of A in ascending order.

The user has to provide device and host working spaces which are pointed by input parameters bufferOnDevice and bufferOnHost. The input parameters workspaceInBytesOnDevice (and workspaceInBytesOnHost) is size in bytes of the device (and host) working space, and it is returned by cusolverDnXsyevdx_bufferSize.

If output parameter info = -i (less than zero), the i-th parameter is wrong (not counting handle). If info = i (greater than zero), i off-diagonal elements of an intermediate tridiagonal form did not converge to zero.

if jobz = cusolverEigMode_t::CUSOLVER_EIG_MODE_VECTOR, A contains the orthonormal eigenvectors of the matrix A. The eigenvectors are computed by a divide and conquer algorithm.

Currently, cusolverDnXsyevdx supports only the default algorithm.

Please visit cuSOLVER Library Samples - Xsyevdx for a code example.

Algorithms supported by cusolverDnXsyevdx

cusolverAlgMode_t::CUSOLVER_ALG_0 or NULLDefault algorithm.

List of input arguments for cusolverDnXsyevdx_bufferSize and cusolverDnXsyevdx:

The generic API has three different types, dataTypeA is data type of the matrix A, dataTypeW is data type of the matrix W and computeType is compute type of the operation. cusolverDnXsyevdx only supports the following four combinations:

Valid combination of data type and compute type

DataTypeADataTypeWComputeTypeMeaning
CUDA_R_32FCUDA_R_32FCUDA_R_32FSSYEVDX
CUDA_R_64FCUDA_R_64FCUDA_R_64FDSYEVDX
CUDA_C_32FCUDA_R_32FCUDA_C_32FCHEEVDX
CUDA_C_64FCUDA_R_64FCUDA_C_64FZHEEVDX

§Parameters

§Return value