PLASMA STATUS
=============

*****************************************************************************
Univ. of Tennessee, Univ. of California Berkeley and Univ. of Colorado Denver
                                     
     _____ __    _____ _____ _____ _____ 
    |  _  |  |  |  _  |   __|     |  _  |
    |   __|  |__|     |__   | | | |     |
    |__|  |_____|__|__|_____|_|_|_|__|__|


Parallel Linear Algebra Software for Multicore Architectures

http://icl.cs.utk.edu/plasma/
*****************************************************************************

Linear Systems
--------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgesv         g| | LU factorization and solve |
| zgetrf        g| | LU factorization |
| zgetrs        g| | LU solve |
||||
| zgesv_incpiv  g| | LU factorization and solve (incremental pivoting) |
| zgetrf_incpiv g| | LU factorization (incremental pivoting) |
| zgetrs_incpiv g| | LU solve (incremental pivoting) |
||||
| zgetrf_nopiv  y| | LU factorization (no pivoting) | no solve
| zgetrf_tntpiv y| | LU factorization (tournament pivoting) | no solve
|               y| | LU factorization (RBT) | in a branch
|               y| | LU factorization (RRQR) | in a branch
|               r| | LDLT factorization (Aasen) | not implemented
|               y| | LDLT factorization (RBT) | in a branch
||||
| zposv         g| | Cholesky factorization and solve |
| zpotrf        g| | Cholesky factorization |
| zpotrs        g| | Cholesky solve |
|=========================================================

Least Squares
-------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgels         g| | QR or LQ factorization and solve |
||||
| zgeqrf        g| | QR factorization |
| zgeqrs        g| | QR solve |
| zunmqr        g| | Q application from QR |
| zungqr        g| | Q generation from QR |
||||
| zgelqf        g| | LQ factorization |
| zgelqs        g| | LQ solve |
| zunmlq        g| | Q application from LQ |
| zunglq        g| | Q generation from LQ |
||||
| zgeqp3        g| | QR factorization with column pivoting |
|=========================================================

Mixed Precision
---------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zcgesv        g| | LU factorization and solve (mixed precision) |
| zcposv        g| | Cholesky factorization and solve (mixed precision) |
| zcungesv      g| | QR factorization and solve (mixed precision) | linear system
| zcgels        g| | QR/LQ factorization and solve (mixed precision) | least squares
|=========================================================

Matrix Inversion
----------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgetri        g| | matrix inversion using LU factorization |
| zpotri        g| | matrix inversion using Cholesky factorization |
|=========================================================

Singular Value Decomposition
----------------------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgebrd        g| | two-stage bidiagonal reduction |
| zgesdd        g| | SVD (D&C) | calls LAPACK D&C solver dbdsdc internally 
| zgesvd        g| | SVD (QR)  | calls LAPACK QR  solver dbdsqr internally
| zgesdd        r| | SVD (D&C) | multithreaded D&C to replace LAPACK D&C
|=========================================================


Eigenvalue Problems
-------------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zhetrd        g| | two-stage tridiagonal reduction |
| zheev         g| | symmetric EVP (QR) | calls LAPACK QR   solver zsteqr internally  
| zheevd        g| | symmetric EVP (D&C) | calls PLASMA multithreads D&C 
| zheevr        g| | symmetric EVP (MRRR) | calls LAPACK MRRR solver zstemr internally  
| zheevd_some   y| | symmetric EVP (D&C) for some vectors | calls PLASMA multithreads D&C 

| zhegv         g| | generalized symm EVP (QR) | potrf, gest, zheev, trsm, trmm
| zhegst        g| | transforms generalized EVP to symm EVP |
| zhegvd        g| | generalized symm EVP (D&C) | potrf, gest, zheevd, trsm, trmm

|=========================================================

Condition Estimation
--------------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgecon        g| | condition estimation using LU |
| zpocon        g| | condition estimation using Cholesky |
|=========================================================

BLAS
----
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgemm         g| | general matrix multiply |
| zhemm         g| | Hermitian matrix multiply |
| zher2k        g| | Hermitian rank 2 update |
| zherk         g| | Hermitian rank k update |
| zsymm         g| | symmetric matrix multiply |
| zsyr2k        g| | symmetric rank 2 update |
| zsyrk         g| | symmetric rank k update |
| ztrmm         g| | triangular matrix multiply |
| ztrsm         g| | triangular solve |
| ztrsmpl       g| | forward substitution for incremental LU |
| ztrsmrv       g| | reverse trsm (for LU inversion) | does not have LAPACK equivalent
| ztrtri        g| | triangular inverse |
|=========================================================

Layout Translation
------------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zgecfi        g| | general matrix format conversion in-place |
| zgecfi2       g| | LAPACK to PLASMA conversion |
| zgetmi        g| | matrix transposition in-place |
|=========================================================

Matrix Generation
-----------------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zplghe        g| | random Hermitian matrix generator |
| zplgsy        g| | random symmetric matrix generator |
| zplrnt        g| | random matrix generator |
| zpltmg        g| | test matrix generator (Cauchy, Vandermonde, etc.) |
|=========================================================

Auxiliary
---------
[cols="1,1,10,10",options="header"]
|=========================================================
| Routine | Status | Description | Comments

| zlacpy        g| | copy |
| zlange        g| | norm (general) |
| zlanhe        g| | norm (Hermitian) |
| zlansy        g| | norm (symmetric) |
| zlantr        g| | norm (triangular) |
| zlaset        g| | set diagonal and off-diagonal matrix elements |
| zlaswp        g| | swap rows |
| zlaswpc       g| | swap columns |
| zlauum        g| | UxU', LxL' |
|=========================================================

TODO
----
* Revisit ZCUNGESV / ZCGELS
* Revisit ZGECON / ZPOCON (?)

* Factor out layout translation (?)
* Native LAPACK layout support (?)

* QUARK overhaul
* OMP support

* Precision generation overhaul
* Revisit the build system
* Release script (?)

* Double check testing coverage
* Double check timing coverage
* Track static/dynamic coverage

* Comments overhaul
* Revisit Doxygen @ingroup assignment
* Macros on top of driver routines - consider factoring out

* Consider allowing different algorithmic variants with a switch (look at cuDNN)
   * Some already in place as for LU Tournament pivoting QR or LU to select the pivots.
* Revisit workspace allocation (look at cuDNN)
