PLASMA
Parallel Linear Algebra Software for Multicore Architectures
sy/hetrf: Symmetric indefinite factorization

Functions

int plasma_chetrf (plasma_enum_t uplo, int n, plasma_complex32_t *pA, int lda, int *ipiv, plasma_complex32_t *pT, int ldt, int *ipiv2)
 
void plasma_omp_chetrf (plasma_enum_t uplo, plasma_desc_t A, int *ipiv, plasma_desc_t T, int *ipiv2, plasma_desc_t W, plasma_sequence_t *sequence, plasma_request_t *request)
 
int plasma_dsytrf (plasma_enum_t uplo, int n, double *pA, int lda, int *ipiv, double *pT, int ldt, int *ipiv2)
 
void plasma_omp_dsytrf (plasma_enum_t uplo, plasma_desc_t A, int *ipiv, plasma_desc_t T, int *ipiv2, plasma_desc_t W, plasma_sequence_t *sequence, plasma_request_t *request)
 
int plasma_ssytrf (plasma_enum_t uplo, int n, float *pA, int lda, int *ipiv, float *pT, int ldt, int *ipiv2)
 
void plasma_omp_ssytrf (plasma_enum_t uplo, plasma_desc_t A, int *ipiv, plasma_desc_t T, int *ipiv2, plasma_desc_t W, plasma_sequence_t *sequence, plasma_request_t *request)
 
int plasma_zhetrf (plasma_enum_t uplo, int n, plasma_complex64_t *pA, int lda, int *ipiv, plasma_complex64_t *pT, int ldt, int *ipiv2)
 
void plasma_omp_zhetrf (plasma_enum_t uplo, plasma_desc_t A, int *ipiv, plasma_desc_t T, int *ipiv2, plasma_desc_t W, plasma_sequence_t *sequence, plasma_request_t *request)
 

Detailed Description

Function Documentation

int plasma_chetrf ( plasma_enum_t  uplo,
int  n,
plasma_complex32_t *  pA,
int  lda,
int *  ipiv,
plasma_complex32_t *  pT,
int  ldt,
int *  ipiv2 
)

Factorize a Hermitian matrix A using a 'communication avoiding' Aasen's algorithm, followed by band LU factorization. The factorization has the form

\[ A = P \times L \times T \times L^H \times P^H, \]

or

\[ A = P \times U^H \times T \times U \times P^H, \]

where U is a unit-diagonal upper triangular matrix and L is a unit-diagonal lower triangular matrix, T is a band matrix, and P is a permutation matrix.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored. TODO: only support Lower for now
[in]nThe order of the matrix A. n >= 0.
[in,out]pAOn entry, the Hermitian 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Aasen's factorization A = (P*U^H)*T*(P*U^H)^H or A = (P*L)*T*(P*L)^H.
[in]ldaThe leading dimension of the array A. lda >= max(1,n).
[out]pTOn exit, if return value = 0, the LU factors of the band matrix T.
[in]ldtThe leading dimension of the array T.
[out]ipivThe pivot indices used by the Aasen's algorithm; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[out]ipiv2The pivot indices used by the band LU; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
Return values
PlasmaSuccesssuccessful 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.
See also
plasma_omp_chetrf
plasma_chetrf
plasma_dhetrf
plasma_shetrf
void plasma_omp_chetrf ( plasma_enum_t  uplo,
plasma_desc_t  A,
int *  ipiv,
plasma_desc_t  T,
int *  ipiv2,
plasma_desc_t  W,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Factorize a Hermitian matrix. Non-blocking tile version of plasma_chetrf(). May return before the computation is finished. Operates on matrices stored by tiles. All matrices are passed through descriptors. All dimensions are taken from the descriptors. Allows for pipelining of operations at runtime.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored.
[in]AOn entry, the Hermitian 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Cholesky factorization A = (P*U^H)*T(P*U^H)^H or A = (P*L)*T(P*L)^H.
[out]TOn exit, if return value = 0, the band matrix T of the factorization factorization A = (P*U^H)*T*(P*U^H)^H or A = (P*L)*T*(P*L)^H.
[out]ipivThe pivot indices; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[in]sequenceIdentifies the sequence of function calls that this call belongs to (for completion checks and exception handling purposes). Check the sequence->status for errors.
[out]requestIdentifies this function call (for exception handling purposes).
Return values
voidErrors are returned by setting sequence->status and request->status to error values. The sequence->status and request->status should never be set to PlasmaSuccess (the initial values) since another async call may be setting a failure value at the same time.
See also
plasma_chetrf
plasma_omp_chetrf
plasma_omp_chetrf
plasma_omp_dhetrf
plasma_omp_shetrf
int plasma_dsytrf ( plasma_enum_t  uplo,
int  n,
double *  pA,
int  lda,
int *  ipiv,
double *  pT,
int  ldt,
int *  ipiv2 
)

Factorize a symmetric matrix A using a 'communication avoiding' Aasen's algorithm, followed by band LU factorization. The factorization has the form

\[ A = P \times L \times T \times L^T \times P^T, \]

or

\[ A = P \times U^T \times T \times U \times P^T, \]

where U is a unit-diagonal upper triangular matrix and L is a unit-diagonal lower triangular matrix, T is a band matrix, and P is a permutation matrix.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored. TODO: only support Lower for now
[in]nThe order of the matrix A. n >= 0.
[in,out]pAOn entry, the symmetric 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Aasen's factorization A = (P*U^T)*T*(P*U^T)^T or A = (P*L)*T*(P*L)^T.
[in]ldaThe leading dimension of the array A. lda >= max(1,n).
[out]pTOn exit, if return value = 0, the LU factors of the band matrix T.
[in]ldtThe leading dimension of the array T.
[out]ipivThe pivot indices used by the Aasen's algorithm; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[out]ipiv2The pivot indices used by the band LU; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
Return values
PlasmaSuccesssuccessful 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.
See also
plasma_omp_dsytrf
plasma_chetrf
plasma_dhetrf
plasma_shetrf
void plasma_omp_dsytrf ( plasma_enum_t  uplo,
plasma_desc_t  A,
int *  ipiv,
plasma_desc_t  T,
int *  ipiv2,
plasma_desc_t  W,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Factorize a symmetric matrix. Non-blocking tile version of plasma_dsytrf(). May return before the computation is finished. Operates on matrices stored by tiles. All matrices are passed through descriptors. All dimensions are taken from the descriptors. Allows for pipelining of operations at runtime.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored.
[in]AOn entry, the symmetric 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Cholesky factorization A = (P*U^T)*T(P*U^T)^T or A = (P*L)*T(P*L)^T.
[out]TOn exit, if return value = 0, the band matrix T of the factorization factorization A = (P*U^T)*T*(P*U^T)^T or A = (P*L)*T*(P*L)^T.
[out]ipivThe pivot indices; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[in]sequenceIdentifies the sequence of function calls that this call belongs to (for completion checks and exception handling purposes). Check the sequence->status for errors.
[out]requestIdentifies this function call (for exception handling purposes).
Return values
voidErrors are returned by setting sequence->status and request->status to error values. The sequence->status and request->status should never be set to PlasmaSuccess (the initial values) since another async call may be setting a failure value at the same time.
See also
plasma_dsytrf
plasma_omp_dsytrf
plasma_omp_chetrf
plasma_omp_dhetrf
plasma_omp_shetrf
int plasma_ssytrf ( plasma_enum_t  uplo,
int  n,
float *  pA,
int  lda,
int *  ipiv,
float *  pT,
int  ldt,
int *  ipiv2 
)

Factorize a symmetric matrix A using a 'communication avoiding' Aasen's algorithm, followed by band LU factorization. The factorization has the form

\[ A = P \times L \times T \times L^T \times P^T, \]

or

\[ A = P \times U^T \times T \times U \times P^T, \]

where U is a unit-diagonal upper triangular matrix and L is a unit-diagonal lower triangular matrix, T is a band matrix, and P is a permutation matrix.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored. TODO: only support Lower for now
[in]nThe order of the matrix A. n >= 0.
[in,out]pAOn entry, the symmetric 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Aasen's factorization A = (P*U^T)*T*(P*U^T)^T or A = (P*L)*T*(P*L)^T.
[in]ldaThe leading dimension of the array A. lda >= max(1,n).
[out]pTOn exit, if return value = 0, the LU factors of the band matrix T.
[in]ldtThe leading dimension of the array T.
[out]ipivThe pivot indices used by the Aasen's algorithm; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[out]ipiv2The pivot indices used by the band LU; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
Return values
PlasmaSuccesssuccessful 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.
See also
plasma_omp_ssytrf
plasma_chetrf
plasma_dhetrf
plasma_shetrf
void plasma_omp_ssytrf ( plasma_enum_t  uplo,
plasma_desc_t  A,
int *  ipiv,
plasma_desc_t  T,
int *  ipiv2,
plasma_desc_t  W,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Factorize a symmetric matrix. Non-blocking tile version of plasma_ssytrf(). May return before the computation is finished. Operates on matrices stored by tiles. All matrices are passed through descriptors. All dimensions are taken from the descriptors. Allows for pipelining of operations at runtime.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored.
[in]AOn entry, the symmetric 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Cholesky factorization A = (P*U^T)*T(P*U^T)^T or A = (P*L)*T(P*L)^T.
[out]TOn exit, if return value = 0, the band matrix T of the factorization factorization A = (P*U^T)*T*(P*U^T)^T or A = (P*L)*T*(P*L)^T.
[out]ipivThe pivot indices; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[in]sequenceIdentifies the sequence of function calls that this call belongs to (for completion checks and exception handling purposes). Check the sequence->status for errors.
[out]requestIdentifies this function call (for exception handling purposes).
Return values
voidErrors are returned by setting sequence->status and request->status to error values. The sequence->status and request->status should never be set to PlasmaSuccess (the initial values) since another async call may be setting a failure value at the same time.
See also
plasma_ssytrf
plasma_omp_ssytrf
plasma_omp_chetrf
plasma_omp_dhetrf
plasma_omp_shetrf
int plasma_zhetrf ( plasma_enum_t  uplo,
int  n,
plasma_complex64_t *  pA,
int  lda,
int *  ipiv,
plasma_complex64_t *  pT,
int  ldt,
int *  ipiv2 
)

Factorize a Hermitian matrix A using a 'communication avoiding' Aasen's algorithm, followed by band LU factorization. The factorization has the form

\[ A = P \times L \times T \times L^H \times P^H, \]

or

\[ A = P \times U^H \times T \times U \times P^H, \]

where U is a unit-diagonal upper triangular matrix and L is a unit-diagonal lower triangular matrix, T is a band matrix, and P is a permutation matrix.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored. TODO: only support Lower for now
[in]nThe order of the matrix A. n >= 0.
[in,out]pAOn entry, the Hermitian 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Aasen's factorization A = (P*U^H)*T*(P*U^H)^H or A = (P*L)*T*(P*L)^H.
[in]ldaThe leading dimension of the array A. lda >= max(1,n).
[out]pTOn exit, if return value = 0, the LU factors of the band matrix T.
[in]ldtThe leading dimension of the array T.
[out]ipivThe pivot indices used by the Aasen's algorithm; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[out]ipiv2The pivot indices used by the band LU; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
Return values
PlasmaSuccesssuccessful 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.
See also
plasma_omp_zhetrf
plasma_chetrf
plasma_dhetrf
plasma_shetrf
void plasma_omp_zhetrf ( plasma_enum_t  uplo,
plasma_desc_t  A,
int *  ipiv,
plasma_desc_t  T,
int *  ipiv2,
plasma_desc_t  W,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Factorize a Hermitian matrix. Non-blocking tile version of plasma_zhetrf(). May return before the computation is finished. Operates on matrices stored by tiles. All matrices are passed through descriptors. All dimensions are taken from the descriptors. Allows for pipelining of operations at runtime.

Parameters
[in]uplo
  • PlasmaUpper: Upper triangle of A is stored;
  • PlasmaLower: Lower triangle of A is stored.
[in]AOn entry, the Hermitian 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 = PlasmaLower, 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. On exit, if return value = 0, the factor U or L from the Cholesky factorization A = (P*U^H)*T(P*U^H)^H or A = (P*L)*T(P*L)^H.
[out]TOn exit, if return value = 0, the band matrix T of the factorization factorization A = (P*U^H)*T*(P*U^H)^H or A = (P*L)*T*(P*L)^H.
[out]ipivThe pivot indices; for 1 <= i <= min(m,n), row and column i of the matrix was interchanged with row and column ipiv(i).
[in]sequenceIdentifies the sequence of function calls that this call belongs to (for completion checks and exception handling purposes). Check the sequence->status for errors.
[out]requestIdentifies this function call (for exception handling purposes).
Return values
voidErrors are returned by setting sequence->status and request->status to error values. The sequence->status and request->status should never be set to PlasmaSuccess (the initial values) since another async call may be setting a failure value at the same time.
See also
plasma_zhetrf
plasma_omp_zhetrf
plasma_omp_chetrf
plasma_omp_dhetrf
plasma_omp_shetrf