LAMA
lama::OpenMPBLAS3 Class Reference

Implementations of methods for lama::BLAS3Interface with OpenMP. More...

#include <OpenMPBLAS3.hpp>

Public Member Functions

template<>
void gemm (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const IndexType m, const IndexType n, const IndexType k, const float alpha, const float *A, const IndexType lda, const float *B, const IndexType ldb, const float beta, float *C, const IndexType ldc, SyncToken *syncToken)
template<>
void gemm (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const IndexType m, const IndexType n, const IndexType k, const double alpha, const double *A, const IndexType lda, const double *B, const IndexType ldb, const double beta, double *C, const IndexType ldc, SyncToken *syncToken)
template<>
void symm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const IndexType m, const IndexType n, const float alpha, const float *A, const IndexType lda, const float *B, const IndexType ldb, const float beta, float *C, const IndexType ldc, SyncToken *syncToken)
 symm
template<>
void symm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const IndexType m, const IndexType n, const double alpha, const double *A, const IndexType lda, const double *B, const IndexType ldb, const double beta, double *C, const IndexType ldc, SyncToken *syncToken)
template<>
void trmm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const IndexType m, const IndexType n, const float alpha, const float *A, const IndexType lda, float *B, const IndexType ldb, SyncToken *syncToken)
 trmm
template<>
void trmm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const IndexType m, const IndexType n, const double alpha, const double *A, const IndexType lda, double *B, const IndexType ldb, SyncToken *syncToken)
template<>
void trsm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const IndexType m, const IndexType n, const float alpha, const float *A, const IndexType lda, float *B, const IndexType ldb, SyncToken *syncToken)
 trsm
template<>
void trsm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const IndexType m, const IndexType n, const double alpha, const double *A, const IndexType lda, double *B, const IndexType ldb, SyncToken *syncToken)
template<>
void syrk (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const IndexType n, const IndexType k, const float alpha, const float *A, const IndexType lda, const float beta, float *C, const IndexType ldc, SyncToken *syncToken)
 syrk
template<>
void syrk (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const IndexType n, const IndexType k, const double alpha, const double *A, const IndexType lda, const double beta, double *C, const IndexType ldc, SyncToken *syncToken)
template<>
void syrk2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const IndexType n, const IndexType k, const float alpha, const float *A, const IndexType lda, const float *B, const IndexType ldb, const float beta, float *C, const IndexType ldc, SyncToken *syncToken)
 syrk2
template<>
void syrk2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE Trans, const IndexType n, const IndexType k, const double alpha, const double *A, const IndexType lda, const double *B, const IndexType ldb, const double beta, double *C, const IndexType ldc, SyncToken *syncToken)

Static Public Member Functions

template<typename T >
static void gemm (const enum CBLAS_ORDER order, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_TRANSPOSE TransB, const IndexType M, const IndexType N, const IndexType K, const T alpha, const T *A, const IndexType lda, const T *B, const IndexType ldb, const T beta, T *C, const IndexType ldc, SyncToken *syncToken)
 OpenMP implementation for BLAS3Interface<T>::gemm.
template<typename T >
static void symm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE side, const enum CBLAS_UPLO uplo, const IndexType m, const IndexType n, const T alpha, const T *A, const IndexType lda, const T *B, const IndexType ldb, const T beta, T *C, const IndexType ldc, SyncToken *syncToken)
 symm performs one of the matrix-matrix operations
template<typename T >
static void trmm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const IndexType M, const IndexType N, const T alpha, const T *A, const IndexType lda, T *B, const IndexType ldb, SyncToken *syncToken)
 trmm performs one of the matrix-matrix operations
template<typename T >
static void trsm (const enum CBLAS_ORDER order, const enum CBLAS_SIDE Side, const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, const IndexType M, const IndexType N, const T alpha, const T *A, const IndexType lda, T *B, const IndexType ldb, SyncToken *syncToken)
 trsm solves one of the matrix equations
template<typename T >
static void syrk (const enum CBLAS_ORDER order, const enum CBLAS_UPLO uplo, const enum CBLAS_TRANSPOSE trans, const IndexType n, const IndexType k, const T alpha, const T *A, const IndexType lda, const T beta, T *C, const IndexType ldc, SyncToken *syncToken)
 syrk performs one of the symmetric rank k operations
template<typename T >
static void syrk2 (const enum CBLAS_ORDER order, const enum CBLAS_UPLO uplo, const enum CBLAS_TRANSPOSE trans, const IndexType n, const IndexType k, const T alpha, const T *A, const IndexType lda, const T *B, const IndexType ldb, const T beta, T *C, const IndexType ldc, SyncToken *syncToken)
 syrk2 performs one of the symmetric rank 2k operations

Private Member Functions

 LAMA_LOG_DECL_STATIC_LOGGER (logger)

Detailed Description

Implementations of methods for lama::BLAS3Interface with OpenMP.

Todo:

Move all method documentations to LAMAInterface and make references here

Add information here about use of native BLAS1 libraries


Member Function Documentation

template<>
void lama::OpenMPBLAS3::gemm ( const enum CBLAS_ORDER  order,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_TRANSPOSE  TransB,
const IndexType  m,
const IndexType  n,
const IndexType  k,
const float  alpha,
const float *  A,
const IndexType  lda,
const float *  B,
const IndexType  ldb,
const float  beta,
float *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<typename T >
static void lama::OpenMPBLAS3::gemm ( const enum CBLAS_ORDER  order,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_TRANSPOSE  TransB,
const IndexType  M,
const IndexType  N,
const IndexType  K,
const T  alpha,
const T *  A,
const IndexType  lda,
const T *  B,
const IndexType  ldb,
const T  beta,
T *  C,
const IndexType  ldc,
SyncToken syncToken 
) [static]
template<>
void lama::OpenMPBLAS3::gemm ( const enum CBLAS_ORDER  order,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_TRANSPOSE  TransB,
const IndexType  m,
const IndexType  n,
const IndexType  k,
const double  alpha,
const double *  A,
const IndexType  lda,
const double *  B,
const IndexType  ldb,
const double  beta,
double *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<typename T >
static void lama::OpenMPBLAS3::symm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  side,
const enum CBLAS_UPLO  uplo,
const IndexType  m,
const IndexType  n,
const T  alpha,
const T *  A,
const IndexType  lda,
const T *  B,
const IndexType  ldb,
const T  beta,
T *  C,
const IndexType  ldc,
SyncToken syncToken 
) [static]

symm performs one of the matrix-matrix operations

C = alpha * A * B + beta * C or C = alpha * B * A + beta * C,

where alpha and beta are scalars, A is a symmetric matrix consisting of single‐precision elements and is stored in either lower or upper storage mode. B and C are m×n matrices consisting of elements.

Parameters:
[in]sidespecifies whether the symmetric matrix A appears on the left-hand side or right-hand side of Matrix B. If side == 'L' or 'l', C = alpha * A * B + beta * C. If side == 'R' or 'R', C = alpha * B * A + beta * C.
[in]uplospecifies whether the symmetric matrix A is stored in upper or lower storage mode. If uplo == 'U' or 'u', only the upper triangular part of the symmetric matrix is referenced, and the elements of the strictly lower triangular part are inferred from those in the upper triangular part. If uplo == 'L' or 'l', only the lower triangular part of the symmetric matrix is referenced, and the elements of the strictly upper triangular part are inferred from those in the lower triangular part.
[in]mspecifies the number of rows of matrix C, and the number of rows of matrix B. It also specifies the dimensions of symmetric matrix A when side == 'L' or 'l'; m must be at least zero.
[in]nspecifies the number of columns of matrix C, and the number of columns of matrix B. It also specifies the dimensions of symmetric matrix A when side == 'R' or 'r''; n must be at least zero.
[in]alphascalar multiplier applied to A * B or B * A
[in]Aarray of dimensions (lda, ka), where ka is m when side == 'L' or 'l' and is n otherwise. If side == 'L' or 'l', the leading m×m part of array A must contain the symmetric matrix such that when uplo == 'U' or 'u', the leading m×m part stores the upper triangular part of the symmetric matrix, and the strictly lower triangular part of A is not referenced; and when uplo == 'L' or 'l', the leading m×m part stores the lower triangular part of the symmetric matrix, and the strictly upper triangular part is not referenced. If side == 'R' or 'r', the leading n×n part of array A must contain the symmetric matrix such that when uplo == 'U' or 'u', the leading n×n part stores the upper triangular part of the symmetric matrix, and the strictly lower triangular part of A is not referenced; and when uplo == 'L' or 'l', the leading n×n part stores the lower triangular part of the symmetric matrix, and the strictly upper triangular part is not referenced.
[in]ldaleading dimension of A. When side == 'L' or 'l', it must be at least max(1, m) and at least max(1, n) otherwise.
[in]Barray of dimensions (ldb, n). On entry, the leading m×n part of the array contains the matrix B.
[in]ldbleading dimension of B; ldb must be at least max(1,m).
[in]betascalar multiplier applied to C. If beta is zero, C does not have to be a valid input
[in]Carray of dimensions (ldc,n);
[in]ldcleading dimension of C. ldc must be at least max(1,m)
[out]Cupdated according to C = alpha * A * B + beta * C or C = alpha * B * A + beta * C
template<>
void lama::OpenMPBLAS3::symm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const IndexType  m,
const IndexType  n,
const float  alpha,
const float *  A,
const IndexType  lda,
const float *  B,
const IndexType  ldb,
const float  beta,
float *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<>
void lama::OpenMPBLAS3::symm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const IndexType  m,
const IndexType  n,
const double  alpha,
const double *  A,
const IndexType  lda,
const double *  B,
const IndexType  ldb,
const double  beta,
double *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<typename T >
static void lama::OpenMPBLAS3::syrk ( const enum CBLAS_ORDER  order,
const enum CBLAS_UPLO  uplo,
const enum CBLAS_TRANSPOSE  trans,
const IndexType  n,
const IndexType  k,
const T  alpha,
const T *  A,
const IndexType  lda,
const T  beta,
T *  C,
const IndexType  ldc,
SyncToken syncToken 
) [static]

syrk performs one of the symmetric rank k operations

C = alpha * A * AT + beta * C or C = alpha * AT * A + beta * C

where alpha and beta are scalars. C is an n×n symmetric matrix consisting of elements and is stored in either lower or upper storage mode. A is a matrix consisting of elements with dimensions of n×k in the first case and k×n in the second case.

Parameters:
[in]uplospecifies whether the symmetric matrix C is stored in upper or lower storage mode. If uplo == 'U' or 'u', only the upper triangular part of the symmetric matrix is referenced, and the elements of the strictly lower triangular part are inferred from those in the upper triangular part. If uplo == 'L' or 'l', only the lower triangular part of the symmetric matrix is referenced, and the elements of the strictly upper triangular part are inferred from those in the lower triangular part.
[in]transspecifies the operation to be performed. If trans == 'N', or 'n' C = alpha * A * AT + beta * C. If trans == 'T','t','C','c' C = alpha * AT * A + beta * C.
[in]nspecifies the number of rows and the number columns of matrix C. If trans == 'N' or 'n', n specifies the number of rows of matrix A. If trans == 'T', 't', 'C', or 'c', n specifies the number of columns of matrix A; n must be at least zero.
[in]kIf trans == 'N' or 'n', k specifies the number of columns of matrix A. If trans == 'T', 't', 'C', or 'c', k specifies the number of rows of matrix A; k must be at least zero.
[in]alphascalar multiplier applied to A * AT or AT * A
[in]Aarray of dimensions (lda, ka), where ka is k when trans == 'N' or 'n' and is n otherwise. When trans == 'N' or 'n', the leading n×k part of array A contains the matrix A; otherwise, the leading k×n part of the array contains the matrix A.
[in]ldaleading dimension of A. When trans == 'N' or 'n', lda must be at least max(1, n). Otherwise lda must be at least max(1, k).
[in]betascalar multiplier applied to C. If beta is zero, C is not read.
[in]Carray of dimensions (ldc, n). If uplo == 'U' or 'u', the leading n×n triangular part of the array C must contain the upper triangular part of the symmetric matrix C, and the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of C is overwritten by the upper triangular part of the updated matrix. If uplo == 'L' or 'l', the leading n×n triangular part of the array C must contain the lower triangular part of the symmetric matrix C, and the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of C is overwritten by the lower triangular part of the updated matrix.
[in]ldcleading dimension of C. ldc must be at least max(1,n)
[out]Cupdated according to C = alpha * A * AT + beta * C or C = alpha * AT * A + beta * C
template<>
void lama::OpenMPBLAS3::syrk ( const enum CBLAS_ORDER  order,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  Trans,
const IndexType  n,
const IndexType  k,
const float  alpha,
const float *  A,
const IndexType  lda,
const float  beta,
float *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<>
void lama::OpenMPBLAS3::syrk ( const enum CBLAS_ORDER  order,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  Trans,
const IndexType  n,
const IndexType  k,
const double  alpha,
const double *  A,
const IndexType  lda,
const double  beta,
double *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<typename T >
static void lama::OpenMPBLAS3::syrk2 ( const enum CBLAS_ORDER  order,
const enum CBLAS_UPLO  uplo,
const enum CBLAS_TRANSPOSE  trans,
const IndexType  n,
const IndexType  k,
const T  alpha,
const T *  A,
const IndexType  lda,
const T *  B,
const IndexType  ldb,
const T  beta,
T *  C,
const IndexType  ldc,
SyncToken syncToken 
) [static]

syrk2 performs one of the symmetric rank 2k operations

C = alpha * A * BT + alpha * B * AT + beta * C or C = alpha * AT * B + alpha * BT * A + beta * C

where alpha and beta are sscalars. C is an n×n symmetric matrix consisting of elements and is stored in either lower or upper storage mode. A and B are matrices consisting of elements with dimension of n×k in the first case and k×n in the second case.

Parameters:
[in]uplospecifies whether the symmetric matrix C is stored in upper or lower storage mode. If uplo == 'U' or 'u', only the upper triangular part of the symmetric matrix is referenced, and the elements of the strictly lower triangular part are inferred from those in the upper triangular part. If uplo == 'L' or 'l', only the lower triangular part of the symmetric matrix is referenced, and the elements of the strictly upper triangular part are inferred from those in the lower triangular part.
[in]transspecifies the operation to be performed. If trans = 'N' or 'n' C = alpha * A * BT + alpha * B * AT + beta * C If trans == 'T','t','C','c' alpha * AT * B + alpha * BT * A + beta * C
[in]nspecifies the number of rows and the number columns of matrix C. If trans == 'N', or 'n' n specifies the number of rows of matrix A. If trans == 'T','t','C','c' n specifies the number of columns of matrix A; n must be at least zero.
[in]kIf trans == 'N', or 'n' k specifies the number of columns of matrix A. If trans == 'T','t','C','c' k specifies the number of rows of matrix A; k must be at least zero.
[in]alphascalar multiplier applied to A * AT or AT * A
[in]Aarray of dimensions (lda, ka), where ka is k when trans == 'N' or 'n' and is n otherwise. When trans == 'N' or 'n', the leading n×k part of array A must contain the matrix A, otherwise, the leading k×n part of the array must contain the matrix A.
[in]ldaleading dimension of A. When trans == 'N' or 'n', lda must be at least max(1, n). Otherwise lda must be at least max(1, k).
[in]betascalar multiplier applied to C. If beta is zero, C does not have to be a valid input.
[in]Carray of dimensions (ldc, n). If uplo == 'U' or 'u', the leading n×n triangular part of the array C must contain the upper triangular part of the symmetric matrix C, and the strictly lower triangular part of C is not referenced. On exit, the upper triangular part of C is overwritten by the upper triangular part of the updated matrix. If uplo == 'L' or 'l', the leading n×n triangular part of the array C must contain the lower triangular part of the symmetric matrix C, and the strictly upper triangular part of C is not referenced. On exit, the lower triangular part of C is overwritten by the lower triangular part of the updated matrix.
[in]ldcleading dimension of C. ldc must be at least max(1,n)
[out]Cupdated according to alpha * A * BT + alpha * B * AT + beta * C or C = alpha * AT * B + alpha * BT * A + beta * C
template<>
void lama::OpenMPBLAS3::syrk2 ( const enum CBLAS_ORDER  order,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  Trans,
const IndexType  n,
const IndexType  k,
const float  alpha,
const float *  A,
const IndexType  lda,
const float *  B,
const IndexType  ldb,
const float  beta,
float *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<>
void lama::OpenMPBLAS3::syrk2 ( const enum CBLAS_ORDER  order,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  Trans,
const IndexType  n,
const IndexType  k,
const double  alpha,
const double *  A,
const IndexType  lda,
const double *  B,
const IndexType  ldb,
const double  beta,
double *  C,
const IndexType  ldc,
SyncToken syncToken 
)
template<typename T >
static void lama::OpenMPBLAS3::trmm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_DIAG  Diag,
const IndexType  M,
const IndexType  N,
const T  alpha,
const T *  A,
const IndexType  lda,
T *  B,
const IndexType  ldb,
SyncToken syncToken 
) [static]

trmm performs one of the matrix-matrix operations

B = alpha * op(A) * B or B = alpha * B * op(A) where op(A) = A or op(A) = AT

alpha is a scalar, B is an m×n matrix consisting of double‐precision elements, A is a unit or non‐unit, upper or lower triangular matrix consisting of double‐precision elements. matrix A and B are stored in column‐major format, lda and ldb are the leading dimensions of the two‐dimensional arrays that contain A and B, respectively.

Parameters:
[in]sidespecifies whether op(A) multiplies B from the left or right. If side == 'L' or 'l', C = alpha * op(A) * B If side == 'R' or 'r', C = alpha * B * op(A)
[in]uplospecifies whether the matrix A is an upper or lower triangular matrix. If uplo == 'U' or 'u', A is an upper triangular matrix. If uplo == 'L' or 'l', A is a lower triangular matrix.
[in]transaspecifies the form of op(A) to be used in the matrix multiplication. If transa == 'N' or 'n', op(A) = A. If transa == 'T','t','C','c', op(A) = AT.
[in]diagspecifies whether or not A is a unit triangular matrix. If diag == 'U' or 'u', A is assumed to be unit triangular. If diag == 'N' or 'n', A is not assumed to be unit triangular.
[in]mthe number of rows of matrix B; m must be at least zero.
[in]nthe number of columns of matrix B; n must be at least zero.
[in]alphascalar multiplier applied to op(A) * B or B * op(A), respectively. If alpha is zero, no accesses are made to matrix A and no read accesses are made to matrix B.
[in]Aarray of dimensions (lda, k). If side == 'L' or 'l', k = m. If side == 'R' or 'r', k = n. If uplo == 'U' or 'u', the leading k×k upper triangular part of the array A must contain the upper triangular matrix, and the strictly lower triangular part of A is not referenced. If uplo == 'L' or 'l', the leading k×k lower triangular part of the array A must contain the lower triangular matrix, and the strictly upper triangular part of A is not referenced. When diag == 'U' or 'u', the diagonal elements of A are not referenced and are assumed to be unity.
[in]ldaleading dimension of A. When side == 'L' or 'l', it must be at least max(1, m) and at least max(1, n) otherwise.
[in]Barray of dimensions (ldb, n). On entry, the leading m×n part of the array contains the matrix B. It is overwritten with the transformed matrix on exit
[in]ldbleading dimension of B; ldb must be at least max(1,m).
[out]Bupdated according to B = alpha * op(A) * B or B = alpha * B * op(A)
template<>
void lama::OpenMPBLAS3::trmm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_DIAG  Diag,
const IndexType  m,
const IndexType  n,
const float  alpha,
const float *  A,
const IndexType  lda,
float *  B,
const IndexType  ldb,
SyncToken syncToken 
)
template<>
void lama::OpenMPBLAS3::trmm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_DIAG  Diag,
const IndexType  m,
const IndexType  n,
const double  alpha,
const double *  A,
const IndexType  lda,
double *  B,
const IndexType  ldb,
SyncToken syncToken 
)
template<typename T >
static void lama::OpenMPBLAS3::trsm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_DIAG  Diag,
const IndexType  M,
const IndexType  N,
const T  alpha,
const T *  A,
const IndexType  lda,
T *  B,
const IndexType  ldb,
SyncToken syncToken 
) [static]

trsm solves one of the matrix equations

op(A) * X = alpha * B or X * op(A) = alpha * B where op(A) = A or op(A) = AT

alpha is a scalar, X and B are m×n matrices that consist of elements. A is a unit or non‐unit, upper or lower, triangular matrix. The result matrix X overwrites input matrix B; that is, on exit the result is stored in B. matrix A and B are stored in column‐major format, lda and ldb are the leading dimensions of the two‐dimensional arrays that contain A and B, respectively.

Parameters:
[in]sidespecifies whether op(A) appears on the left or right of X: If side == 'L' or 'l', op(A) * X = alpha * B If side == 'R' or 'R', X * op(A) = alpha * B
[in]uplospecifies whether the matrix A is an upper or lower triangular matrix. If uplo == 'U' or 'u', A is an upper triangular matrix. If uplo == 'L' or 'l', A is a lower triangular matrix.
[in]transaspecifies the form of op(A) to be used in the matrix multiplication. If transa == 'N' or 'n', op(A) = A. If transa == 'T','t','C','c', op(A) = AT.
[in]diagspecifies whether or not A is a unit triangular matrix. If diag == 'U' or 'u', A is assumed to be unit triangular. If diag == 'N' or 'n', A is not assumed to be unit triangular.
[in]mthe number of rows of matrix B; m must be at least zero.
[in]nthe number of columns of matrix B; n must be at least zero.
[in]alphascalar multiplier applied to B. When alpha is zero, A is not referenced and B does not have to be a valid input.
[in]Aarray of dimensions (lda, k), where k is m when side == 'L' or 'l' and is n when side == 'R' or 'r'. If uplo == 'U' or 'u', the leading k×k upper triangular part of the array A must contain the upper triangular matrix, and the strictly lower triangular matrix of A is not referenced. When uplo == 'L' or 'l', the leading k×k lower triangular part of the array A must contain the lower triangular matrix, and the strictly upper triangular part of A is not referenced. If diag == 'U' or 'u', the diagonal elements of A are not referenced and are assumed to be unity.
[in]ldaleading dimension of the two-dimensional array containing A. When side == 'L' or 'l', lda must be at least max(1, m). When side == 'R' or 'r', lda must be at least max(1, n).
[in]Barray of dimensions (ldb, n); ldb must be at least max(1, m). T he leading m×n part of the array B must contain the righthand side matrix B. On exit B is overwritten by the solution matrix X.
[in]ldbleading dimension of the two-dimensional array containing B; ldb must be at least max(1, m).
[out]Bcontains the solution matrix X satisfying op(A) * X = alpha * B or X * op(A) = alpha * B

Referenced by lama::LUSolver::computeLUFactorization(), and lama::LUSolver::ptrsm().

template<>
void lama::OpenMPBLAS3::trsm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_DIAG  Diag,
const IndexType  m,
const IndexType  n,
const float  alpha,
const float *  A,
const IndexType  lda,
float *  B,
const IndexType  ldb,
SyncToken syncToken 
)
template<>
void lama::OpenMPBLAS3::trsm ( const enum CBLAS_ORDER  order,
const enum CBLAS_SIDE  Side,
const enum CBLAS_UPLO  Uplo,
const enum CBLAS_TRANSPOSE  TransA,
const enum CBLAS_DIAG  Diag,
const IndexType  m,
const IndexType  n,
const double  alpha,
const double *  A,
const IndexType  lda,
double *  B,
const IndexType  ldb,
SyncToken syncToken 
)

The documentation for this class was generated from the following files: