trmm#

Computes a matrix-matrix product where one input matrix is triangular and other matrix is general.

Description#

The trmm routines compute a scalar-matrix-matrix product where one of the matrices in the multiplication is triangular. The argument left_right determines if the triangular matrix, A, is on the left of the multiplication (left_right = side::left) or on the right (left_right = side::right).

There are two operations available, an in-place operation and an out-of-place operation. The in-place operation is defined as:

If (left_right = side::left),

\[B \leftarrow alpha*op(A)*B\]

If (left_right = side::right),

\[B \leftarrow alpha*B*op(A)\]

The out-of-place operation is defined as:

If (left_right = side::left),

\[C \leftarrow alpha*op(A)*B + beta*C\]

If (left_right = side::right),

\[C \leftarrow alpha*B*op(A) + beta*C\]

where:

  • op(A) is one of op(A) = A, or op(A) = AT, or op(A) = AH

  • alpha and beta are scalars

  • A is either m x m or n x n triangular matrix

  • B is m x n general matrix

  • C is m x n general matrix

trmm supports the following precisions:

T

float

double

std::complex<float>

std::complex<double>

trmm (Buffer Version)#

In-place API#

Syntax#

namespace oneapi::mkl::blas::column_major {
    void trmm(sycl::queue &queue,
              oneapi::mkl::side left_right,
              oneapi::mkl::uplo upper_lower,
              oneapi::mkl::transpose trans,
              oneapi::mkl::diag unit_diag,
              std::int64_t m,
              std::int64_t n,
              T alpha,
              sycl::buffer<T,1> &a,
              std::int64_t lda,
              sycl::buffer<T,1> &b,
              std::int64_t ldb,
              compute_mode mode = compute_mode::unset)
}
namespace oneapi::mkl::blas::row_major {
    void trmm(sycl::queue &queue,
              oneapi::mkl::side left_right,
              oneapi::mkl::uplo upper_lower,
              oneapi::mkl::transpose trans,
              oneapi::mkl::diag unit_diag,
              std::int64_t m,
              std::int64_t n,
              T alpha,
              sycl::buffer<T,1> &a,
              std::int64_t lda,
              sycl::buffer<T,1> &b,
              std::int64_t ldb,
              compute_mode mode = compute_mode::unset)
}

Input Parameters#

queue

The queue where the routine will be executed.

left_right

Specifies whether matrix A is on the left side or right side of the multiplication. See Data Types for more details.

upper_lower

Specifies whether matrix A is upper or lower triangular. See Data Types for more details.

trans

Specifies op(A), the transposition operation applied to matrix A. See Data Types for more details.

unit_diag

Specifies whether matrix A is unit triangular or not. See Data Types for more details.

m

Number of rows of matrix B. Must be at least zero.

n

Number of columns of matrix B. Must be at least zero.

alpha

Scaling factor for matrix-matrix product.

a

Buffer holding input matrix A. Size of the buffer must be at least lda * m if left_right = side::left or lda * n if left_right = side::right. See Matrix Storage for more details.

lda

Leading dimension of matrix A. Must be at least m if left_right = side::left or at least n if left_right = side::right. Must be positive.

b

Buffer holding input matrix B. Size of the buffer must be at least ldb * n if column major layout or at least ldb * m if row major layout is used. See Matrix Storage for more details.

ldb

Leading dimension of matrix B. Must be at least m if column major layout or at least n if row major layout is used. Must be positive.

mode

Optional. Compute mode settings. See Compute Modes for more details.

Output Parameters#

b

Output buffer overwritten by alpha * op(A) * B if left_right = side::left or alpha * B * op(A) if left_right = side::right.

Note

If alpha = 0, matrix B is set to zero, and A and B do not need to be initialized at entry.

Out-of-place API#

Syntax#

namespace oneapi::mkl::blas::column_major {
    void trmm(sycl::queue &queue,
              oneapi::mkl::side left_right,
              oneapi::mkl::uplo upper_lower,
              oneapi::mkl::transpose trans,
              oneapi::mkl::diag unit_diag,
              std::int64_t m,
              std::int64_t n,
              T alpha,
              sycl::buffer<T,1> &a,
              std::int64_t lda,
              sycl::buffer<T,1> &b,
              std::int64_t ldb,
              T beta,
              sycl::buffer<T,1> &c,
              std::int64_t ldc,
              compute_mode mode = compute_mode::unset)
}
namespace oneapi::mkl::blas::row_major {
    void trmm(sycl::queue &queue,
              oneapi::mkl::side left_right,
              oneapi::mkl::uplo upper_lower,
              oneapi::mkl::transpose trans,
              oneapi::mkl::diag unit_diag,
              std::int64_t m,
              std::int64_t n,
              T alpha,
              sycl::buffer<T,1> &a,
              std::int64_t lda,
              sycl::buffer<T,1> &b,
              std::int64_t ldb,
              T beta,
              sycl::buffer<T,1> &c,
              std::int64_t ldc,
              compute_mode mode = compute_mode::unset)
}

Input Parameters#

queue

The queue where the routine will be executed.

left_right

Specifies whether matrix A is on the left side or right side of the multiplication. See Data Types for more details.

upper_lower

Specifies whether matrix A is upper or lower triangular. See Data Types for more details.

trans

Specifies op(A), the transposition operation applied to matrix A. See Data Types for more details.

unit_diag

Specifies whether matrix A is unit triangular or not. See Data Types for more details.

m

Number of rows of matrix B. Must be at least zero.

n

Number of columns of matrix B. Must be at least zero.

alpha

Scaling factor for matrix-matrix product.

a

Buffer holding input matrix A. Size of the buffer must be at least lda * m if left_right = side::left or lda * n if left_right = side::right. See Matrix Storage for more details.

lda

Leading dimension of matrix A. Must be at least m if left_right = side::left or at least n if left_right = side::right. Must be positive.

b

Buffer holding input matrix B. Size of the buffer must be at least ldb * n if column major layout or at least ldb * m if row major layout is used. See Matrix Storage for more details.

ldb

Leading dimension of matrix B. Must be at least m if column major layout or at least n if row major layout is used. Must be positive.

beta

Scaling factor for matrix C.

c

Buffer holding input/output matrix C. Size of the buffer must be at least ldc * n if column major layout or at least ldc * m if row major layout is used. See Matrix Storage for more details.

ldc

Leading dimension of matrix C. Must be at least m if column major layout or at least n if row major layout is used. Must be positive.

mode

Optional. Compute mode settings. See Compute Modes for more details.

Output Parameters#

c

Output buffer overwritten by alpha * op(A) * B + beta * C if left_right = side::left or alpha * B * op(A) + beta * C if left_right = side::right.

trmm (USM Version)#

In-place API#

Syntax#

namespace oneapi::mkl::blas::column_major {
    sycl::event trmm(sycl::queue &queue,
                     oneapi::mkl::side left_right,
                     oneapi::mkl::uplo upper_lower,
                     oneapi::mkl::transpose trans,
                     oneapi::mkl::diag unit_diag,
                     std::int64_t m,
                     std::int64_t n,
                     oneapi::mkl::value_or_pointer<T> alpha,
                     const T *a,
                     std::int64_t lda,
                     T *b,
                     std::int64_t ldb,
                     compute_mode mode = compute_mode::unset,
                     const std::vector<sycl::event> &dependencies = {})
}
namespace oneapi::mkl::blas::row_major {
    sycl::event trmm(sycl::queue &queue,
                     oneapi::mkl::side left_right,
                     oneapi::mkl::uplo upper_lower,
                     oneapi::mkl::transpose trans,
                     oneapi::mkl::diag unit_diag,
                     std::int64_t m,
                     std::int64_t n,
                     oneapi::mkl::value_or_pointer<T> alpha,
                     const T *a,
                     std::int64_t lda,
                     T *b,
                     std::int64_t ldb,
                     compute_mode mode = compute_mode::unset,
                     const std::vector<sycl::event> &dependencies = {})
}

Input Parameters#

queue

The queue where the routine will be executed.

left_right

Specifies whether matrix A is on the left side or right side of the multiplication. See Data Types for more details.

upper_lower

Specifies whether matrix A is upper or lower triangular. See Data Types for more details.

trans

Specifies op(A), the transposition operation applied to matrix A. See Data Types for more details.

unit_diag

Specifies whether matrix A is unit triangular or not. See Data Types for more details.

m

Number of rows of matrix B. Must be at least zero.

n

Number of columns of matrix B. Must be at least zero.

alpha

Scaling factor for matrix-matrix product. See Scalar Arguments for more information on the value_or_pointer data type.

a

Pointer to input matrix A. Size of the array must be at least lda * m if left_right = side::left or lda * n if left_right = side::right. See Matrix Storage for more details.

lda

Leading dimension of matrix A. Must be at least m if left_right = side::left or at least n if left_right = side::right. Must be positive.

b

Pointer to input matrix B. Size of the array must be at least ldb * n if column major layout or at least ldb * m if row major layout is used. See Matrix Storage for more details.

ldb

Leading dimension of matrix B. Must be at least m if column major layout or at least n if row major layout is used. Must be positive.

mode

Optional. Compute mode settings. See Compute Modes for more details.

dependencies

Optional. List of events to wait for before starting computation, if any. If omitted, defaults to no dependencies.

mode and dependencies may be omitted independently; it is not necessary to specify mode in order to provide dependencies.

Output Parameters#

b

Pointer to output matrix overwritten by alpha * op(A) * B if left_right = side::left or alpha * B * op(A) if left_right = side::right.

Note

If alpha = 0, matrix B is set to zero, and A and B do not need to be initialized at entry.

Return Values#

Output event to wait on to ensure computation is complete.

Out-of-place API#

Syntax#

namespace oneapi::mkl::blas::column_major {
    sycl::event trmm(sycl::queue &queue,
                     oneapi::mkl::side left_right,
                     oneapi::mkl::uplo upper_lower,
                     oneapi::mkl::transpose trans,
                     oneapi::mkl::diag unit_diag,
                     std::int64_t m,
                     std::int64_t n,
                     oneapi::mkl::value_or_pointer<T> alpha,
                     const T *a,
                     std::int64_t lda,
                     const T *b,
                     std::int64_t ldb,
                     oneapi::mkl::value_or_pointer<T> beta,
                     T *c,
                     std::int64_t ldc,
                     compute_mode mode = compute_mode::unset,
                     const std::vector<sycl::event> &dependencies = {})
}
namespace oneapi::mkl::blas::row_major {
    sycl::event trmm(sycl::queue &queue,
                     oneapi::mkl::side left_right,
                     oneapi::mkl::uplo upper_lower,
                     oneapi::mkl::transpose trans,
                     oneapi::mkl::diag unit_diag,
                     std::int64_t m,
                     std::int64_t n,
                     oneapi::mkl::value_or_pointer<T> alpha,
                     const T *a,
                     std::int64_t lda,
                     const T *b,
                     std::int64_t ldb,
                     oneapi::mkl::value_or_pointer<T> beta,
                     T *c,
                     std::int64_t ldc,
                     compute_mode mode = compute_mode::unset,
                     const std::vector<sycl::event> &dependencies = {})
}

Input Parameters#

queue

The queue where the routine will be executed.

left_right

Specifies whether matrix A is on the left side or right side of the multiplication. See Data Types for more details.

upper_lower

Specifies whether matrix A is upper or lower triangular. See Data Types for more details.

trans

Specifies op(A), the transposition operation applied to matrix A. See Data Types for more details.

unit_diag

Specifies whether matrix A is unit triangular or not. See Data Types for more details.

m

Number of rows of matrix B. Must be at least zero.

n

Number of columns of matrix B. Must be at least zero.

alpha

Scaling factor for matrix-matrix product. See Scalar Arguments for more information on the value_or_pointer data type.

a

Pointer to input matrix A. Size of the array must be at least lda * m if left_right = side::left or lda * n if left_right = side::right. See Matrix Storage for more details.

lda

Leading dimension of matrix A. Must be at least m if left_right = side::left or at least n if left_right = side::right. Must be positive.

b

Pointer to input matrix B. Size of the array must be at least ldb * n if column major layout or at least ldb * m if row major layout is used. See Matrix Storage for more details.

ldb

Leading dimension of matrix B. Must be at least m if column major layout or at least n if row major layout is used. Must be positive.

beta

Scaling factor for matrix C. See Scalar Arguments for more information on the value_or_pointer data type.

c

Pointer to input/output matrix C. Size of the array must be at least ldc * n if column major layout or at least ldc * m if row major layout is used. See Matrix Storage for more details.

ldc

Leading dimension of matrix C. Must be at least m if column major layout or at least n if row major layout is used. Must be positive.

mode

Optional. Compute mode settings. See Compute Modes for more details.

dependencies

Optional. List of events to wait for before starting computation, if any. If omitted, defaults to no dependencies.

mode and dependencies may be omitted independently; it is not necessary to specify mode in order to provide dependencies.

Output Parameters#

c

Pointer to output matrix overwritten by alpha * op(A) * B + beta * C if left_right = side::left or alpha * B * op(A) + beta * C if left_right = side::right.

Return Values#

Output event to wait on to ensure computation is complete.