symm (USM Version)¶

Computes a matrix-matrix product where one input matrix is symmetrica nd one matrix is general.

Syntax

event `symm`(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 = {})

symm supports the following precisions and devices:

T

Devices Supported

`float`

Host, CPU, and GPU

`double`

Host, CPU, and GPU

`std::complex<float>`

Host, CPU, and GPU

`std::complex<double>`

Host, CPU, and GPU

Description

The symm 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 symmetric. The argument `left_right` determines if the symmetric 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 symmetric matrix, either `m`-by-`m` or `n`-by-`n`,

`B` and `C` are `m`-by-`n` matrices.

Input Parameters

exec_queue

The queue where the routine should be executed.

left_right

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.

upper_lower

Specifies whether A’s data is stored in its upper or lower triangle. See Data Types for more details.

m

Number of rows of `B` and `C`. The value of `m` must be at least zero.

n

Number of columns of `B` and `C`. The value of `n` must be at least zero.

alpha

Scaling factor for the matrix-matrix product.

a

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.

lda

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.

b

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.

ldb

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.

beta

Scaling factor for matrix `C`.

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.

ldc

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.

dependencies

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

Output Parameters

c

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`).

Notes

If `beta` = 0, matrix `C` does not need to be initialized before calling `symm`.

Return Values

Output event to wait on to ensure computation is complete.