Computes a matrix-matrix product where one input matrix is Hermitian and one is general.
event hemm(queue &exec_queue, side left_right, uplo upper_lower, std::int64_t m, std::int64_t n, T alpha, const T* a, std::int64_t lda, const T* b, std::int64_t ldb, T beta, T* c, std::int64_t ldc, const vector_class<event> &dependencies = {});
The USM version of hemm supports the following precisions and devices:
T | Devices Supported |
---|---|
std::complex<float> | Host, CPU, and GPU |
std::complex<double> | Host, CPU, and GPU |
The hemm routines compute a scalar-matrix-matrix product and add the result to a scalar-matrix product, where one of the matrices in the multiplication is Hermitian. The argument left_right determines if the Hermitian matrix, A, is on the left of the multiplication (left_right = side::left) or on the right (left_right = side::right). Depending on left_right, the operation is defined as
C <- alpha*A*B + beta*C
or
C <- alpha*B*A + beta*C
where:
alpha and beta are scalars,
A is a Hermitian matrix, either m-by-m or n-by-n matrices,
B and C are m-by-n matrices.
The queue where the routine should be executed.
Specifies whether A is on the left side of the multiplication (side::left) or on the right side (side::right). See Data Types for more details.
Specifies whether A's data is stored in its upper or lower triangle. See Data Types for more details.
Specifies the number of rows of the matrix B and C.
The value of m must be at least zero.
Specifies the number of columns of the matrix B and C.
The value of n must be at least zero.
Scaling factor for the matrix-matrix product.
Pointer to input matrix A. Must have size at least lda*m if A is on the left of the multiplication, or lda*n if A is on the right. See Matrix and Vector Storage for more details.
Leading dimension of A. Must be at least m if A is on the left of the multiplication, or at least n if A is on the right. Must be positive.
Pointer to input matrix B. It must have a size of at least ldb*n if column major layout is used to store matrices or at least ldb*m if row major layout is used to store matrices. See Matrix and Vector Storage for more details.
Leading dimension of B. It must be positive and at least m if column major layout is used to store matrices or at least n if column major layout is used to store matrices.
Scaling factor for matrix C.
Pointer to input/output matrix C. It must have a size of at least ldc*n if column major layout is used to store matrices or at least ldc*m if row major layout is used to store matrices. See Matrix and Vector Storage for more details.
Leading dimension of C. It must be positive and at least m if column major layout is used to store matrices or at least n if column major layout is used to store matrices.
List of events to wait for before starting computation, if any. If omitted, defaults to no dependencies.
Pointer to the output matrix, overwritten by alpha*A*B + beta*C (left_right = side::left) or alpha*B*A + beta*C (left_right = side::right).
If beta = 0, matrix C does not need to be initialized before calling hemm.
Output event to wait on to ensure computation is complete.