Files
cppdraft_translate/cppdraft/linalg/algs/blas3/trmm.md
2025-10-25 03:02:53 +03:00

5.0 KiB
Raw Blame History

[linalg.algs.blas3.trmm]

29 Numerics library [numerics]

29.9 Basic linear algebra algorithms [linalg]

29.9.15 BLAS 3 algorithms [linalg.algs.blas3]

29.9.15.3 In-place triangular matrix-matrix product [linalg.algs.blas3.trmm]

1

#

These functions perform an in-place matrix-matrix multiply, taking into account the Triangle and DiagonalStorage parameters that apply to the triangular matrix A ([linalg.general]).

[Note 1:

These functions correspond to the BLAS function xTRMM[bib].

— end note]

🔗

template<[in-matrix](linalg.helpers.concepts#concept:in-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InMat, class Triangle, class DiagonalStorage, [inout-matrix](linalg.helpers.concepts#concept:inout-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InOutMat> void triangular_matrix_left_product(InMat A, Triangle t, DiagonalStorage d, InOutMat C); template<class ExecutionPolicy, [in-matrix](linalg.helpers.concepts#concept:in-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InMat, class Triangle, class DiagonalStorage, [inout-matrix](linalg.helpers.concepts#concept:inout-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InOutMat> void triangular_matrix_left_product(ExecutionPolicy&& exec, InMat A, Triangle t, DiagonalStorage d, InOutMat C);

2

#

Mandates:

If InMat has layout_blas_packed layout, then the layout's Triangle template argument has the same type as the function's Triangle template argument;

possibly-multipliable<InMat, InOutMat, InOutMat>() is true; and

compatible-static-extents<InMat, InMat>(0, 1) is true.

3

#

Preconditions:

multipliable(A, C, C) is true, and

A.extent(0) == A.extent(1) is true.

4

#

Effects: Computes a matrix C′ such that C′=AC and assigns each element of C′ to the corresponding element of C.

5

#

Complexity: O(A.extent(0)×A.extent(1)×C.extent(0)).

🔗

template<[in-matrix](linalg.helpers.concepts#concept:in-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InMat, class Triangle, class DiagonalStorage, [inout-matrix](linalg.helpers.concepts#concept:inout-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InOutMat> void triangular_matrix_right_product(InMat A, Triangle t, DiagonalStorage d, InOutMat C); template<class ExecutionPolicy, [in-matrix](linalg.helpers.concepts#concept:in-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InMat, class Triangle, class DiagonalStorage, [inout-matrix](linalg.helpers.concepts#concept:inout-matrix "29.9.7.5Argument concepts[linalg.helpers.concepts]") InOutMat> void triangular_matrix_right_product(ExecutionPolicy&& exec, InMat A, Triangle t, DiagonalStorage d, InOutMat C);

6

#

Mandates:

If InMat has layout_blas_packed layout, then the layout's Triangle template argument has the same type as the function's Triangle template argument;

possibly-multipliable<InOutMat, InMat, InOutMat>() is true; and

compatible-static-extents<InMat, InMat>(0, 1) is true.

7

#

Preconditions:

multipliable(C, A, C) is true, and

A.extent(0) == A.extent(1) is true.

8

#

Effects: Computes a matrix C′ such that C′=CA and assigns each element of C′ to the corresponding element of C.

9

#

Complexity: O(A.extent(0)×A.extent(1)×C.extent(0)).