Introduction#

Library overview#

hipSOLVER is an open-source marshalling library for LAPACK routines on the GPU. It sits between the backend library and the user application, marshalling inputs to and outputs from the backend library. Currently, two backend libraries are supported by hipSOLVER: NVIDIA’s cuSOLVER library and AMD’s open-source rocSOLVER library.

Currently implemented functionality#

The hipSOLVER library remains in active development. New features are being continuously added, with new functionality documented at each release of the ROCm platform.

The following tables summarize the wrapper functions that are implemented for the different supported precisions in hipSOLVER’s latest release.

LAPACK auxiliary functions#

LAPACK main functions#

Table 3 Triangular factorizations#

Function

single

double

single complex

double complex

hipsolverXpotrf_bufferSize

x

x

x

x

hipsolverXpotrf

x

x

x

x

hipsolverXpotrfBatched_bufferSize

x

x

x

x

hipsolverXpotrfBatched

x

x

x

x

hipsolverXgetrf_bufferSize

x

x

x

x

hipsolverXgetrf

x

x

x

x

hipsolverXsytrf_bufferSize

x

x

x

x

hipsolverXsytrf

x

x

x

x

Table 4 Orthogonal factorizations#

Function

single

double

single complex

double complex

hipsolverXgeqrf_bufferSize

x

x

x

x

hipsolverXgeqrf

x

x

x

x

Table 5 Problem and matrix reductions#

Function

single

double

single complex

double complex

hipsolverXsytrd_bufferSize

x

x

hipsolverXsytrd

x

x

hipsolverXhetrd_bufferSize

x

x

hipsolverXhetrd

x

x

hipsolverXgebrd_bufferSize

x

x

x

x

hipsolverXgebrd

x

x

x

x

Table 6 Linear-systems solvers#

Function

single

double

single complex

double complex

hipsolverXpotri_bufferSize

x

x

x

x

hipsolverXpotri

x

x

x

x

hipsolverXpotrs_bufferSize

x

x

x

x

hipsolverXpotrs

x

x

x

x

hipsolverXpotrsBatched_bufferSize

x

x

x

x

hipsolverXpotrsBatched

x

x

x

x

hipsolverXgetrs_bufferSize

x

x

x

x

hipsolverXgetrs

x

x

x

x

hipsolverXXgesv_bufferSize

x

x

x

x

hipsolverXXgesv

x

x

x

x

Table 7 Symmetric eigensolvers#

Function

single

double

single complex

double complex

hipsolverXsyevd_bufferSize

x

x

hipsolverXsyevd

x

x

hipsolverXsygvd_bufferSize

x

x

hipsolverXsygvd

x

x

hipsolverXheevd_bufferSize

x

x

hipsolverXheevd

x

x

hipsolverXhegvd_bufferSize

x

x

hipsolverXhegvd

x

x

Table 8 Singular value decomposition#

Function

single

double

single complex

double complex

hipsolverXgesvd_bufferSize

x

x

x

x

hipsolverXgesvd

x

x

x

x

Differences with the cuSOLVER API#

While the API of hipSOLVER is similar to that of cuSOLVER, there are some notable differences. In particular:

In order to support these changes, hipSOLVER adds the following functions as well:

Furthermore, due to differences in implementation and API design between rocSOLVER and cuSOLVER, not all arguments are handled identically between the two backends. When using the rocSOLVER backend, keep in mind the following differences:

  • While many cuSOLVER and hipSOLVER functions take a workspace pointer and size as arguments, rocSOLVER maintains its own internal device workspace by default. In order to take advantage of this feature, users may pass a null pointer for the work argument of any function when using the rocSOLVER backend, and the workspace will be automatically managed behind-the-scenes. It is recommended to use a consistent strategy for workspace management, as performance issues may arise if the internal workspace is made to flip-flop between user-provided and automatically allocated workspaces.

  • Additionally, unlike cuSOLVER, rocSOLVER does not provide information on invalid arguments in its info arguments, though it will provide info on singularities and algorithm convergence. As a result, the info argument of many functions will not be referenced or altered by the rocSOLVER backend, excepting those that provide info on singularities or convergence.

  • The niters argument of hipsolverXXgesv is not referenced by the rocSOLVER backend.