.. meta:: :description: rocALUTION functionality table :keywords: rocALUTION, ROCm, library, API, functionality table .. _functionality-table: ******************* Functionality table ******************* The following tables list the rocALUTION routines along with the information about the implementation location i.e. host backend, accelerator backend, or both. LocalMatrix and LocalVector classes =================================== All matrix operations (except SpMV) require a CSR matrix. .. note:: If the input matrix is not a CSR matrix, an internal conversion is performed to CSR format, followed by a back conversion to the previous format after the operation. In this case, a warning message on verbosity level 2 is printed. ==================================================================================== =============================================================================== ======== ======= **LocalMatrix function** **Comment** **Host** **HIP** ==================================================================================== =============================================================================== ======== ======= :cpp:func:`GetFormat ` Obtain the matrix format Yes Yes :cpp:func:`Check ` Check the matrix for structure and value validity Yes No :cpp:func:`AllocateCSR ` Allocate CSR matrix Yes Yes :cpp:func:`AllocateBCSR ` Allocate BCSR matrix Yes Yes :cpp:func:`AllocateMCSR ` Allocate MCSR matrix Yes Yes :cpp:func:`AllocateCOO ` Allocate COO matrix Yes Yes :cpp:func:`AllocateDIA ` Allocate DIA matrix Yes Yes :cpp:func:`AllocateELL ` Allocate ELL matrix Yes Yes :cpp:func:`AllocateHYB ` Allocate HYB matrix Yes Yes :cpp:func:`AllocateDENSE ` Allocate DENSE matrix Yes Yes :cpp:func:`SetDataPtrCSR ` Initialize matrix with externally allocated CSR data Yes Yes :cpp:func:`SetDataPtrMCSR ` Initialize matrix with externally allocated MCSR data Yes Yes :cpp:func:`SetDataPtrCOO ` Initialize matrix with externally allocated COO data Yes Yes :cpp:func:`SetDataPtrDIA ` Initialize matrix with externally allocated DIA data Yes Yes :cpp:func:`SetDataPtrELL ` Initialize matrix with externally allocated ELL data Yes Yes :cpp:func:`SetDataPtrDENSE ` Initialize matrix with externally allocated DENSE data Yes Yes :cpp:func:`LeaveDataPtrCSR ` Direct Memory access Yes Yes :cpp:func:`LeaveDataPtrMCSR ` Direct Memory access Yes Yes :cpp:func:`LeaveDataPtrCOO ` Direct Memory access Yes Yes :cpp:func:`LeaveDataPtrDIA ` Direct Memory access Yes Yes :cpp:func:`LeaveDataPtrELL ` Direct Memory access Yes Yes :cpp:func:`LeaveDataPtrDENSE ` Direct Memory access Yes Yes :cpp:func:`Zeros ` Set all matrix entries to zero Yes Yes :cpp:func:`Scale ` Scale all matrix non-zeros Yes Yes :cpp:func:`ScaleDiagonal ` Scale matrix diagonal Yes Yes :cpp:func:`ScaleOffDiagonal ` Scale matrix off-diagonal entries Yes Yes :cpp:func:`AddScalar ` Add scalar to all matrix non-zeros Yes Yes :cpp:func:`AddScalarDiagonal ` Add scalar to matrix diagonal Yes Yes :cpp:func:`AddScalarOffDiagonal ` Add scalar to matrix off-diagonal entries Yes Yes :cpp:func:`ExtractSubMatrix ` Extract sub-matrix Yes Yes :cpp:func:`ExtractSubMatrices ` Extract array of non-overlapping sub-matrices Yes Yes :cpp:func:`ExtractDiagonal ` Extract matrix diagonal Yes Yes :cpp:func:`ExtractInverseDiagonal ` Extract inverse matrix diagonal Yes Yes :cpp:func:`ExtractL ` Extract lower triangular matrix Yes Yes :cpp:func:`ExtractU ` Extract upper triangular matrix Yes Yes :cpp:func:`Permute ` (Forward) permute the matrix Yes Yes :cpp:func:`PermuteBackward ` (Backward) permute the matrix Yes Yes :cpp:func:`CMK ` Create CMK permutation vector Yes No :cpp:func:`RCMK ` Create reverse CMK permutation vector Yes No :cpp:func:`ConnectivityOrder ` Create connectivity (increasing nnz per row) permutation vector Yes No :cpp:func:`MultiColoring ` Create multi-coloring decomposition of the matrix Yes No :cpp:func:`MaximalIndependentSet ` Create maximal independent set decomposition of the matrix Yes No :cpp:func:`ZeroBlockPermutation ` Create permutation where zero diagonal entries are mapped to the last block Yes No :cpp:func:`ILU0Factorize ` Create ILU(0) factorization Yes No :cpp:func:`LUFactorize ` Create LU factorization Yes No :cpp:func:`ILUTFactorize ` Create ILU(t,m) factorization Yes No :cpp:func:`ILUpFactorize ` Create ILU(p) factorization Yes No :cpp:func:`ICFactorize ` Create IC factorization Yes No :cpp:func:`QRDecompose ` Create QR decomposition Yes No :cpp:func:`ReadFileMTX ` Read matrix from matrix market file Yes No :cpp:func:`WriteFileMTX ` Write matrix to matrix market file Yes No :cpp:func:`ReadFileCSR ` Read matrix from binary file Yes No :cpp:func:`WriteFileCSR ` Write matrix to binary file Yes No :cpp:func:`CopyFrom ` Copy matrix (values and structure) from another LocalMatrix Yes Yes :cpp:func:`CopyFromAsync ` Copy matrix asynchronously Yes Yes :cpp:func:`CloneFrom ` Clone an entire matrix (values, structure and backend) from another LocalMatrix Yes Yes :cpp:func:`UpdateValuesCSR ` Update CSR matrix values (structure remains identical) Yes Yes :cpp:func:`CopyFromCSR ` Copy (import) CSR matrix Yes Yes :cpp:func:`CopyToCSR ` Copy (export) CSR matrix Yes Yes :cpp:func:`CopyFromCOO ` Copy (import) COO matrix Yes Yes :cpp:func:`CopyToCOO ` Copy (export) COO matrix Yes Yes :cpp:func:`CopyFromHostCSR ` Allocate and copy (import) a CSR matrix from host Yes No :cpp:func:`ConvertToCSR ` Convert a matrix to CSR format Yes No :cpp:func:`ConvertToMCSR ` Convert a matrix to MCSR format Yes No :cpp:func:`ConvertToBCSR ` Convert a matrix to BCSR format Yes No :cpp:func:`ConvertToCOO ` Convert a matrix to COO format Yes Yes :cpp:func:`ConvertToELL ` Convert a matrix to ELL format Yes Yes :cpp:func:`ConvertToDIA ` Convert a matrix to DIA format Yes Yes :cpp:func:`ConvertToHYB ` Convert a matrix to HYB format Yes Yes :cpp:func:`ConvertToDENSE ` Convert a matrix to DENSE format Yes No :cpp:func:`ConvertTo ` Convert a matrix Yes :cpp:func:`SymbolicPower ` Perform symbolic power computation (structure only) Yes No :cpp:func:`MatrixAdd ` Matrix addition Yes No :cpp:func:`MatrixMult ` Multiply two matrices Yes No :cpp:func:`DiagonalMatrixMult ` Multiply matrix with diagonal matrix (stored in LocalVector) Yes Yes :cpp:func:`DiagonalMatrixMultL ` Multiply matrix with diagonal matrix (stored in LocalVector) from left Yes Yes :cpp:func:`DiagonalMatrixMultR ` Multiply matrix with diagonal matrix (stored in LocalVector) from right Yes Yes :cpp:func:`Gershgorin ` Compute the spectrum approximation with Gershgorin circles theorem Yes No :cpp:func:`Compess ` Delete all entries where `abs(a_ij) <= drop_off` Yes Yes :cpp:func:`Transpose ` Transpose the matrix Yes No :cpp:func:`Sort ` Sort the matrix indices Yes No :cpp:func:`Key ` Compute a unique matrix key Yes No :cpp:func:`ReplaceColumnVector ` Replace a column vector of a matrix Yes No :cpp:func:`ReplaceRowVector ` Replace a row vector of a matrix Yes No :cpp:func:`ExtractColumnVector ` Extract a column vector of a matrix Yes No :cpp:func:`ExtractRowVector ` Extract a row vector of a matrix Yes No ==================================================================================== =============================================================================== ======== ======= ====================================================================================== ===================================================================== ======== ======= **LocalVector function** **Comment** **Host** **HIP** ====================================================================================== ===================================================================== ======== ======= :cpp:func:`GetSize ` Obtain vector size Yes Yes :cpp:func:`Check ` Check vector for valid entries Yes No :cpp:func:`Allocate ` Allocate vector Yes Yes :cpp:func:`Sync ` Synchronize Yes Yes :cpp:func:`SetDataPtr ` Initialize vector with external data Yes Yes :cpp:func:`LeaveDataPtr ` Direct Memory Access Yes Yes :cpp:func:`Zeros ` Set vector entries to zero Yes Yes :cpp:func:`Ones ` Set vector entries to one Yes Yes :cpp:func:`SetValues ` Set vector entries to scalar Yes Yes :cpp:func:`SetRandomUniform ` Initialize vector with uniformly distributed random numbers Yes No :cpp:func:`SetRandomNormal ` Initialize vector with normally distributed random numbers Yes No :cpp:func:`ReadFileASCII ` Read vector for ASCII file Yes No :cpp:func:`WriteFileASCII ` Write vector to ASCII file Yes No :cpp:func:`ReadFileBinary ` Read vector from binary file Yes No :cpp:func:`WriteFileBinary ` Write vector to binary file Yes No :cpp:func:`CopyFrom ` Copy vector (values) from another LocalVector Yes Yes :cpp:func:`CopyFromAsync ` Copy vector asynchronously Yes Yes :cpp:func:`CopyFromFloat ` Copy vector from another LocalVector Yes Yes :cpp:func:`CopyFromDouble ` Copy vector from another LocalVector Yes Yes :cpp:func:`CopyFromPermute ` Copy vector under specified (forward) permutation Yes Yes :cpp:func:`CopyFromPermuteBackward ` Copy vector under specified (backward) permutation Yes Yes :cpp:func:`CloneFrom ` Clone vector (values and backend descriptor) from another LocalVector Yes Yes :cpp:func:`CopyFromData ` Copy (import) vector from array Yes Yes :cpp:func:`CopyToData ` Copy (export) vector to array Yes Yes :cpp:func:`Permute ` (Foward) permute vector in-place Yes Yes :cpp:func:`PermuteBackward ` (Backward) permute vector in-place Yes Yes :cpp:func:`AddScale ` `y = a * x + y` Yes Yes :cpp:func:`ScaleAdd ` `y = x + a * y` Yes Yes :cpp:func:`ScaleAddScale ` `y = b * x + a * y` Yes Yes :cpp:func:`ScaleAdd2 ` `z = a * x + b * y + c * z` Yes Yes :cpp:func:`Scale ` `x = a * x` Yes Yes :cpp:func:`ExclusiveScan ` Compute exclusive sum Yes No :cpp:func:`Dot ` Compute dot product Yes Yes :cpp:func:`DotNonConj ` Compute non-conjugated dot product Yes Yes :cpp:func:`Norm ` Compute L2 norm Yes Yes :cpp:func:`Reduce ` Obtain the sum of all vector entries Yes Yes :cpp:func:`Asum ` Obtain the absolute sum of all vector entries Yes Yes :cpp:func:`Amax ` Obtain the absolute maximum entry of the vector Yes Yes :cpp:func:`PointWiseMult ` Perform point wise multiplication of two vectors Yes Yes :cpp:func:`Power ` Compute vector power Yes Yes ====================================================================================== ===================================================================== ======== ======= Solver and preconditioner classes ================================= .. note:: The building phase of the iterative solver also depends on the selected preconditioner. ================================================================= ================= ======== ======= **Solver** **Functionality** **Host** **HIP** ================================================================= ================= ======== ======= :cpp:class:`CG ` Building Yes Yes :cpp:class:`CG ` Solving Yes Yes :cpp:class:`FCG ` Building Yes Yes :cpp:class:`FCG ` Solving Yes Yes :cpp:class:`CR ` Building Yes Yes :cpp:class:`CR ` Solving Yes Yes :cpp:class:`BiCGStab ` Building Yes Yes :cpp:class:`BiCGStab ` Solving Yes Yes :cpp:class:`BiCGStab(l) ` Building Yes Yes :cpp:class:`BiCGStab(l) ` Solving Yes Yes :cpp:class:`QMRCGStab ` Building Yes Yes :cpp:class:`QMRCGStab ` Solving Yes Yes :cpp:class:`GMRES ` Building Yes Yes :cpp:class:`GMRES ` Solving Yes Yes :cpp:class:`FGMRES ` Building Yes Yes :cpp:class:`FGMRES ` Solving Yes Yes :cpp:class:`Chebyshev ` Building Yes Yes :cpp:class:`Chebyshev ` Solving Yes Yes :cpp:class:`Mixed-Precision ` Building Yes Yes :cpp:class:`Mixed-Precision ` Solving Yes Yes :cpp:class:`Fixed-Point Iteration ` Building Yes Yes :cpp:class:`Fixed-Point Iteration ` Solving Yes Yes :cpp:class:`AMG (Plain Aggregation) ` Building Yes No :cpp:class:`AMG (Plain Aggregation) ` Solving Yes Yes :cpp:class:`AMG (Smoothed Aggregation) ` Building Yes No :cpp:class:`AMG (Smoothed Aggregation) ` Solving Yes Yes :cpp:class:`AMG (Ruge Stueben) ` Building Yes No :cpp:class:`AMG (Ruge Stueben) ` Solving Yes Yes :cpp:class:`AMG (Pairwise Aggregation) ` Building Yes No :cpp:class:`AMG (Pairwise Aggregation) ` Solving Yes Yes :cpp:class:`LU ` Building Yes No :cpp:class:`LU ` Solving Yes No :cpp:class:`QR ` Building Yes No :cpp:class:`QR ` Solving Yes No :cpp:class:`Inversion ` Building Yes No :cpp:class:`Inversion ` Solving Yes Yes ================================================================= ================= ======== ======= =================================================================== ================= ======== ======= **Preconditioner** **Functionality** **Host** **HIP** =================================================================== ================= ======== ======= :cpp:class:`Jacobi ` Building Yes Yes :cpp:class:`Jacobi ` Solving Yes Yes :cpp:class:`BlockJacobi ` Building Yes Yes :cpp:class:`BlockJacobi ` Solving Yes Yes :cpp:class:`MultiColoredILU(0,1) ` Building Yes Yes :cpp:class:`MultiColoredILU(0,1) ` Solving Yes Yes :cpp:class:`MultiColoredILU(>0, >1) ` Building Yes No :cpp:class:`MultiColoredILU(>0, >1) ` Solving Yes Yes :cpp:class:`MultiElimination(I)LU ` Building Yes No :cpp:class:`MultiElimination(I)LU ` Solving Yes Yes :cpp:class:`ILU(0) ` Building Yes Yes :cpp:class:`ILU(0) ` Solving Yes Yes :cpp:class:`ILU(>0) ` Building Yes No :cpp:class:`ILU(>0) ` Solving Yes No :cpp:class:`ILUT ` Building Yes No :cpp:class:`ILUT ` Solving Yes No :cpp:class:`IC(0) ` Building Yes No :cpp:class:`IC(0) ` Solving Yes No :cpp:class:`FSAI ` Building Yes No :cpp:class:`FSAI ` Solving Yes Yes :cpp:class:`SPAI ` Building Yes No :cpp:class:`SPAI ` Solving Yes Yes :cpp:class:`Chebyshev ` Building Yes No :cpp:class:`Chebyshev ` Solving Yes Yes :cpp:class:`MultiColored(S)GS ` Building Yes No :cpp:class:`MultiColored(S)GS ` Solving Yes Yes :cpp:class:`(S)GS ` Building Yes No :cpp:class:`(S)GS ` Solving Yes No :cpp:class:`(R)AS ` Building Yes Yes :cpp:class:`(R)AS ` Solving Yes Yes :cpp:class:`BlockPreconditioner ` Building Yes Yes :cpp:class:`BlockPreconditioner ` Solving Yes Yes :cpp:class:`SaddlePoint ` Building Yes No :cpp:class:`SaddlePoint ` Solving Yes Yes =================================================================== ================= ======== =======