PLASMA
Parallel Linear Algebra Software for Multicore Architectures

\( C = op(A)^{-1} B \) or \( C = B \;op(A)^{-1} \) where \( A \) is triangular More...

Functions

int plasma_ctrsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, int m, int n, plasma_complex32_t alpha, plasma_complex32_t *pA, int lda, plasma_complex32_t *pB, int ldb)
 
void plasma_omp_ctrsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, plasma_complex32_t alpha, plasma_desc_t A, plasma_desc_t B, plasma_sequence_t *sequence, plasma_request_t *request)
 
int plasma_dtrsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, int m, int n, double alpha, double *pA, int lda, double *pB, int ldb)
 
void plasma_omp_dtrsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, double alpha, plasma_desc_t A, plasma_desc_t B, plasma_sequence_t *sequence, plasma_request_t *request)
 
int plasma_strsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, int m, int n, float alpha, float *pA, int lda, float *pB, int ldb)
 
void plasma_omp_strsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, float alpha, plasma_desc_t A, plasma_desc_t B, plasma_sequence_t *sequence, plasma_request_t *request)
 
int plasma_ztrsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, int m, int n, plasma_complex64_t alpha, plasma_complex64_t *pA, int lda, plasma_complex64_t *pB, int ldb)
 
void plasma_omp_ztrsm (plasma_enum_t side, plasma_enum_t uplo, plasma_enum_t transa, plasma_enum_t diag, plasma_complex64_t alpha, plasma_desc_t A, plasma_desc_t B, plasma_sequence_t *sequence, plasma_request_t *request)
 

Detailed Description

\( C = op(A)^{-1} B \) or \( C = B \;op(A)^{-1} \) where \( A \) is triangular

Function Documentation

int plasma_ctrsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
int  m,
int  n,
plasma_complex32_t  alpha,
plasma_complex32_t *  pA,
int  lda,
plasma_complex32_t *  pB,
int  ldb 
)

Solves one of the matrix equations

\[ op( A ) \times X = \alpha B, \]

or

\[ X \times op( A ) = \alpha B, \]

where op( A ) is one of:

\[ op( A ) = A, \]

\[ op( A ) = A^T, \]

\[ op( A ) = A^H, \]

alpha is a scalar, X and B are m-by-n matrices, and A is a unit or non-unit, upper or lower triangular matrix. The matrix X overwrites B.

Parameters
[in]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]mThe number of rows of the matrix B. m >= 0.
[in]nThe number of columns of the matrix B. n >= 0.
[in]alphaThe scalar alpha.
[in]pAThe k-by-k triangular matrix, where k = m if side = PlasmaLeft, and k = n if side = PlasmaRight. If uplo = PlasmaUpper, the leading k-by-k upper triangular part of the array A contains the upper triangular matrix, and the strictly lower triangular part of A is not referenced. If uplo = PlasmaLower, the leading k-by-k lower triangular part of the array A contains the lower triangular matrix, and the strictly upper triangular part of A is not referenced. If diag = PlasmaUnit, the diagonal elements of A are also not referenced and are assumed to be 1.
[in]ldaThe leading dimension of the array A. lda >= max(1,k).
[in,out]pBOn entry, the m-by-n right hand side matrix B. On exit, if return value = 0, the m-by-n solution matrix X.
[in]ldbThe leading dimension of the array B. ldb >= max(1,m).
Return values
PlasmaSuccesssuccessful exit
See also
plasma_omp_ctrsm
plasma_ctrsm
plasma_dtrsm
plasma_strsm
void plasma_omp_ctrsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
plasma_complex32_t  alpha,
plasma_desc_t  A,
plasma_desc_t  B,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Computes triangular solve. Non-blocking tile version of plasma_ctrsm(). 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]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]alphaThe scalar alpha.
[in]ADescriptor of matrix A.
[in]BDescriptor of matrix B.
[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_ctrsm
plasma_omp_ctrsm
plasma_omp_dtrsm
plasma_omp_strsm
int plasma_dtrsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
int  m,
int  n,
double  alpha,
double *  pA,
int  lda,
double *  pB,
int  ldb 
)

Solves one of the matrix equations

\[ op( A ) \times X = \alpha B, \]

or

\[ X \times op( A ) = \alpha B, \]

where op( A ) is one of:

\[ op( A ) = A, \]

\[ op( A ) = A^T, \]

\[ op( A ) = A^T, \]

alpha is a scalar, X and B are m-by-n matrices, and A is a unit or non-unit, upper or lower triangular matrix. The matrix X overwrites B.

Parameters
[in]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]mThe number of rows of the matrix B. m >= 0.
[in]nThe number of columns of the matrix B. n >= 0.
[in]alphaThe scalar alpha.
[in]pAThe k-by-k triangular matrix, where k = m if side = PlasmaLeft, and k = n if side = PlasmaRight. If uplo = PlasmaUpper, the leading k-by-k upper triangular part of the array A contains the upper triangular matrix, and the strictly lower triangular part of A is not referenced. If uplo = PlasmaLower, the leading k-by-k lower triangular part of the array A contains the lower triangular matrix, and the strictly upper triangular part of A is not referenced. If diag = PlasmaUnit, the diagonal elements of A are also not referenced and are assumed to be 1.
[in]ldaThe leading dimension of the array A. lda >= max(1,k).
[in,out]pBOn entry, the m-by-n right hand side matrix B. On exit, if return value = 0, the m-by-n solution matrix X.
[in]ldbThe leading dimension of the array B. ldb >= max(1,m).
Return values
PlasmaSuccesssuccessful exit
See also
plasma_omp_dtrsm
plasma_ctrsm
plasma_dtrsm
plasma_strsm
void plasma_omp_dtrsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
double  alpha,
plasma_desc_t  A,
plasma_desc_t  B,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Computes triangular solve. Non-blocking tile version of plasma_dtrsm(). 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]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]alphaThe scalar alpha.
[in]ADescriptor of matrix A.
[in]BDescriptor of matrix B.
[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_dtrsm
plasma_omp_ctrsm
plasma_omp_dtrsm
plasma_omp_strsm
int plasma_strsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
int  m,
int  n,
float  alpha,
float *  pA,
int  lda,
float *  pB,
int  ldb 
)

Solves one of the matrix equations

\[ op( A ) \times X = \alpha B, \]

or

\[ X \times op( A ) = \alpha B, \]

where op( A ) is one of:

\[ op( A ) = A, \]

\[ op( A ) = A^T, \]

\[ op( A ) = A^T, \]

alpha is a scalar, X and B are m-by-n matrices, and A is a unit or non-unit, upper or lower triangular matrix. The matrix X overwrites B.

Parameters
[in]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]mThe number of rows of the matrix B. m >= 0.
[in]nThe number of columns of the matrix B. n >= 0.
[in]alphaThe scalar alpha.
[in]pAThe k-by-k triangular matrix, where k = m if side = PlasmaLeft, and k = n if side = PlasmaRight. If uplo = PlasmaUpper, the leading k-by-k upper triangular part of the array A contains the upper triangular matrix, and the strictly lower triangular part of A is not referenced. If uplo = PlasmaLower, the leading k-by-k lower triangular part of the array A contains the lower triangular matrix, and the strictly upper triangular part of A is not referenced. If diag = PlasmaUnit, the diagonal elements of A are also not referenced and are assumed to be 1.
[in]ldaThe leading dimension of the array A. lda >= max(1,k).
[in,out]pBOn entry, the m-by-n right hand side matrix B. On exit, if return value = 0, the m-by-n solution matrix X.
[in]ldbThe leading dimension of the array B. ldb >= max(1,m).
Return values
PlasmaSuccesssuccessful exit
See also
plasma_omp_strsm
plasma_ctrsm
plasma_dtrsm
plasma_strsm
void plasma_omp_strsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
float  alpha,
plasma_desc_t  A,
plasma_desc_t  B,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Computes triangular solve. Non-blocking tile version of plasma_strsm(). 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]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]alphaThe scalar alpha.
[in]ADescriptor of matrix A.
[in]BDescriptor of matrix B.
[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_strsm
plasma_omp_ctrsm
plasma_omp_dtrsm
plasma_omp_strsm
int plasma_ztrsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
int  m,
int  n,
plasma_complex64_t  alpha,
plasma_complex64_t *  pA,
int  lda,
plasma_complex64_t *  pB,
int  ldb 
)

Solves one of the matrix equations

\[ op( A ) \times X = \alpha B, \]

or

\[ X \times op( A ) = \alpha B, \]

where op( A ) is one of:

\[ op( A ) = A, \]

\[ op( A ) = A^T, \]

\[ op( A ) = A^H, \]

alpha is a scalar, X and B are m-by-n matrices, and A is a unit or non-unit, upper or lower triangular matrix. The matrix X overwrites B.

Parameters
[in]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]mThe number of rows of the matrix B. m >= 0.
[in]nThe number of columns of the matrix B. n >= 0.
[in]alphaThe scalar alpha.
[in]pAThe k-by-k triangular matrix, where k = m if side = PlasmaLeft, and k = n if side = PlasmaRight. If uplo = PlasmaUpper, the leading k-by-k upper triangular part of the array A contains the upper triangular matrix, and the strictly lower triangular part of A is not referenced. If uplo = PlasmaLower, the leading k-by-k lower triangular part of the array A contains the lower triangular matrix, and the strictly upper triangular part of A is not referenced. If diag = PlasmaUnit, the diagonal elements of A are also not referenced and are assumed to be 1.
[in]ldaThe leading dimension of the array A. lda >= max(1,k).
[in,out]pBOn entry, the m-by-n right hand side matrix B. On exit, if return value = 0, the m-by-n solution matrix X.
[in]ldbThe leading dimension of the array B. ldb >= max(1,m).
Return values
PlasmaSuccesssuccessful exit
See also
plasma_omp_ztrsm
plasma_ctrsm
plasma_dtrsm
plasma_strsm
void plasma_omp_ztrsm ( plasma_enum_t  side,
plasma_enum_t  uplo,
plasma_enum_t  transa,
plasma_enum_t  diag,
plasma_complex64_t  alpha,
plasma_desc_t  A,
plasma_desc_t  B,
plasma_sequence_t *  sequence,
plasma_request_t *  request 
)

Computes triangular solve. Non-blocking tile version of plasma_ztrsm(). 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]side
  • PlasmaLeft: op(A)*X = B,
  • PlasmaRight: X*op(A) = B.
[in]uplo
  • PlasmaUpper: A is upper triangular,
  • PlasmaLower: A is lower triangular.
[in]transa
  • PlasmaNoTrans: A is not transposed,
  • PlasmaTrans: A is transposed,
  • PlasmaConjTrans: A is conjugate transposed.
[in]diag
  • PlasmaNonUnit: A has non-unit diagonal,
  • PlasmaUnit: A has unit diagonal.
[in]alphaThe scalar alpha.
[in]ADescriptor of matrix A.
[in]BDescriptor of matrix B.
[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_ztrsm
plasma_omp_ctrsm
plasma_omp_dtrsm
plasma_omp_strsm