LAMA
|
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) |
Implementations of methods for lama::BLAS3Interface with OpenMP.
Move all method documentations to LAMAInterface and make references here
Add information here about use of native BLAS1 libraries
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 | ||
) |
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] |
OpenMP implementation for BLAS3Interface<T>::gemm.
Referenced by lama::LUSolver::lama_gemm< T >::__gemm(), and lama::LUSolver::computeLUFactorization().
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 | ||
) |
lama::OpenMPBLAS3::LAMA_LOG_DECL_STATIC_LOGGER | ( | logger | ) | [private] |
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.
[in] | side | specifies 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] | uplo | specifies 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] | m | specifies 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] | n | specifies 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] | alpha | scalar multiplier applied to A * B or B * A |
[in] | A | array 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] | lda | leading dimension of A. When side == 'L' or 'l', it must be at least max(1, m) and at least max(1, n) otherwise. |
[in] | B | array of dimensions (ldb, n). On entry, the leading m×n part of the array contains the matrix B. |
[in] | ldb | leading dimension of B; ldb must be at least max(1,m). |
[in] | beta | scalar multiplier applied to C. If beta is zero, C does not have to be a valid input |
[in] | C | array of dimensions (ldc,n); |
[in] | ldc | leading dimension of C. ldc must be at least max(1,m) |
[out] | C | updated according to C = alpha * A * B + beta * C or C = alpha * B * A + beta * C |
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 | ||
) |
symm
References lama::CblasColMajor, lama::CblasLeft, lama::CblasLower, lama::CblasRight, lama::CblasRowMajor, lama::CblasUpper, F77_lda, F77_ldb, F77_ldc, F77_M, F77_N, F77_SD, F77_ssymm(), F77_UL, and lama::BLASHelper::XERBLA_cpu().
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 | ||
) |
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.
[in] | uplo | specifies 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] | trans | specifies 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] | n | specifies 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] | k | If 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] | alpha | scalar multiplier applied to A * AT or AT * A |
[in] | A | array 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] | lda | leading 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] | beta | scalar multiplier applied to C. If beta is zero, C is not read. |
[in] | C | array 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] | ldc | leading dimension of C. ldc must be at least max(1,n) |
[out] | C | updated according to C = alpha * A * AT + beta * C or C = alpha * AT * A + beta * C |
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 | ||
) |
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 | ||
) |
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.
[in] | uplo | specifies 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] | trans | specifies 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] | n | specifies 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] | k | If 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] | alpha | scalar multiplier applied to A * AT or AT * A |
[in] | A | array 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] | lda | leading 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] | beta | scalar multiplier applied to C. If beta is zero, C does not have to be a valid input. |
[in] | C | array 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] | ldc | leading dimension of C. ldc must be at least max(1,n) |
[out] | C | updated according to alpha * A * BT + alpha * B * AT + beta * C or C = alpha * AT * B + alpha * BT * A + beta * C |
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 | ||
) |
syrk2
References lama::CblasColMajor, lama::CblasConjTrans, lama::CblasLower, lama::CblasNoTrans, lama::CblasRowMajor, lama::CblasTrans, lama::CblasUpper, F77_K, F77_lda, F77_ldb, F77_ldc, F77_N, F77_ssyr2k(), F77_TA, F77_TR, F77_UL, and lama::BLASHelper::XERBLA_cpu().
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 | ||
) |
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.
[in] | side | specifies 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] | uplo | specifies 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] | transa | specifies 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] | diag | specifies 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] | m | the number of rows of matrix B; m must be at least zero. |
[in] | n | the number of columns of matrix B; n must be at least zero. |
[in] | alpha | scalar 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] | A | array 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] | lda | leading dimension of A. When side == 'L' or 'l', it must be at least max(1, m) and at least max(1, n) otherwise. |
[in] | B | array 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] | ldb | leading dimension of B; ldb must be at least max(1,m). |
[out] | B | updated according to B = alpha * op(A) * B or B = alpha * B * op(A) |
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 | ||
) |
trmm
References lama::CblasColMajor, lama::CblasConjTrans, lama::CblasLeft, lama::CblasLower, lama::CblasNonUnit, lama::CblasNoTrans, lama::CblasRight, lama::CblasRowMajor, lama::CblasTrans, lama::CblasUnit, lama::CblasUpper, F77_DI, F77_lda, F77_ldb, F77_M, F77_N, F77_SD, F77_strmm(), F77_TA, F77_UL, and lama::BLASHelper::XERBLA_cpu().
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 | ||
) |
References lama::CblasColMajor, lama::CblasConjTrans, lama::CblasLeft, lama::CblasLower, lama::CblasNonUnit, lama::CblasNoTrans, lama::CblasRight, lama::CblasRowMajor, lama::CblasTrans, lama::CblasUnit, lama::CblasUpper, F77_DI, F77_dtrmm(), F77_lda, F77_ldb, F77_M, F77_N, F77_SD, F77_TA, F77_UL, and lama::BLASHelper::XERBLA_cpu().
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.
[in] | side | specifies 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] | uplo | specifies 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] | transa | specifies 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] | diag | specifies 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] | m | the number of rows of matrix B; m must be at least zero. |
[in] | n | the number of columns of matrix B; n must be at least zero. |
[in] | alpha | scalar multiplier applied to B. When alpha is zero, A is not referenced and B does not have to be a valid input. |
[in] | A | array 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] | lda | leading 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] | B | array 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] | ldb | leading dimension of the two-dimensional array containing B; ldb must be at least max(1, m). |
[out] | B | contains 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().
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 | ||
) |
trsm
References lama::CblasColMajor, lama::CblasConjTrans, lama::CblasLeft, lama::CblasLower, lama::CblasNonUnit, lama::CblasNoTrans, lama::CblasRight, lama::CblasRowMajor, lama::CblasTrans, lama::CblasUnit, lama::CblasUpper, F77_DI, F77_lda, F77_ldb, F77_M, F77_N, F77_SD, F77_strsm(), F77_TA, F77_UL, and lama::BLASHelper::XERBLA_cpu().
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 | ||
) |
References lama::CblasColMajor, lama::CblasConjTrans, lama::CblasLeft, lama::CblasLower, lama::CblasNonUnit, lama::CblasNoTrans, lama::CblasRight, lama::CblasRowMajor, lama::CblasTrans, lama::CblasUnit, lama::CblasUpper, F77_DI, F77_dtrsm(), F77_lda, F77_ldb, F77_M, F77_N, F77_SD, F77_TA, F77_UL, and lama::BLASHelper::XERBLA_cpu().