# trsm¶

Solves a triangular matrix equation (forward or backward solve).

Syntax

void `trsm`(queue &exec_queue, side left_right, uplo upper_lower, transpose transa, diag unit_diag, std::int64_t m, std::int64_t n, T alpha, buffer<T, 1> &a, std::int64_t lda, buffer<T, 1> &b, std::int64_t ldb)

trsm 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 trsm routines solve one of the following matrix equations:

```op(A)*X = alpha*B,
```

or

```X*op(A) = alpha*B,
```

where:

op(`A`) is one of op(`A`) = `A`, or op(`A`) = `A`T, or op(`A`) = `A`H,

`alpha` is a scalar,

`A` is a triangular matrix, and

`B` and `X` are `m` x `n` general matrices.

`A` is either `m` x `m` or `n` x `n`, depending on whether it multiplies `X` on the left or right. On return, the matrix `B` is overwritten by the solution matrix `X`.

Input Parameters

exec_queue

The queue where the routine should be executed.

left_right

Specifies whether `A` multiplies `X` on the left (`side::left`) or on the right (`side::right`). See Data Types for more details.

uplo

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

trans

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

unit_diag

Specifies whether `A` is assumed to be unit triangular (all diagonal elements are 1). See Data Types for more details.

m

Specifies the number of rows of `B`. The value of `m` must be at least zero.

n

Specifies the number of columns of `B`. The value of `n` must be at least zero.

alpha

Scaling factor for the solution.

a

Buffer holding input matrix `A`. Must have size at least `lda`*`m` if `left_right` = `side::left`, or `lda`*`n` if `left_right` = `side::right`. See Matrix and Vector Storage for more details.

lda

Leading dimension of `A`. Must be at least `m` if `left_right` = `side::left`, and at least `n` if `left_right` = `side::right`. Must be positive.

b

Buffer holding input/output matrix `B`. It must have size 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.

Output Parameters

b

Output buffer. Overwritten by the solution matrix `X`.

Notes

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