PLASMA
2.8.0
PLASMA - Parallel Linear Algebra for Scalable Multi-core Architectures
|
int PLASMA_dsposv | ( | PLASMA_enum | uplo, |
int | N, | ||
int | NRHS, | ||
double * | A, | ||
int | LDA, | ||
double * | B, | ||
int | LDB, | ||
double * | X, | ||
int | LDX, | ||
int * | ITER | ||
) |
PLASMA_dsposv - Computes the solution to a system of linear equations A * X = B, where A is an N-by-N symmetric positive definite (or Hermitian positive definite in the complex case) matrix and X and B are N-by-NRHS matrices. The Cholesky decomposition is used to factor A as
A = U**H * U, if uplo = PlasmaUpper, or A = L * L**H, if uplo = PlasmaLower,
where U is an upper triangular matrix and L is a lower triangular matrix. The factored form of A is then used to solve the system of equations A * X = B.
PLASMA_dsposv first attempts to factorize the matrix in COMPLEX and use this factorization within an iterative refinement procedure to produce a solution with COMPLEX*16 normwise backward error quality (see below). If the approach fails the method switches to a COMPLEX*16 factorization and solve.
The iterative refinement is not going to be a winning strategy if the ratio COMPLEX performance over COMPLEX*16 performance is too small. A reasonable strategy should take the number of right-hand sides and the size of the matrix into account. This might be done with a call to ILAENV in the future. Up to now, we always try iterative refinement.
The iterative refinement process is stopped if ITER > ITERMAX or for all the RHS we have: RNRM < N*XNRM*ANRM*EPS*BWDMAX where:
Actually, in its current state (PLASMA 2.1.0), the test is slightly relaxed.
The values ITERMAX and BWDMAX are fixed to 30 and 1.0D+00 respectively.
[in] | uplo | Specifies whether the matrix A is upper triangular or lower triangular: = PlasmaUpper: Upper triangle of A is stored; = PlasmaLower: Lower triangle of A is stored. |
[in] | N | The number of linear equations, i.e., the order of the matrix A. N >= 0. |
[in] | NRHS | The number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0. |
[in] | A | The N-by-N symmetric positive definite (or Hermitian) coefficient matrix A. If uplo = PlasmaUpper, the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. If UPLO = 'L', the leading N-by-N lower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. This matrix is not modified. |
[in] | LDA | The leading dimension of the array A. LDA >= max(1,N). |
[in] | B | The N-by-NRHS matrix of right hand side matrix B. |
[in] | LDB | The leading dimension of the array B. LDB >= max(1,N). |
[out] | X | If return value = 0, the N-by-NRHS solution matrix X. |
[in] | LDX | The leading dimension of the array B. LDX >= max(1,N). |
[out] | ITER | The number of the current iteration in the iterative refinement process |
PLASMA_SUCCESS | successful exit |
<0 | if -i, the i-th argument had an illegal value |
>0 | if i, the leading minor of order i of A is not positive definite, so the factorization could not be completed, and the solution has not been computed. |