From Jason Turner

[linalg.algs.blas3.xxmm]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpcz64zlb_/{from.md → to.md} +200 -0
tmp/tmpcz64zlb_/{from.md → to.md} RENAMED
@@ -0,0 +1,200 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Symmetric, Hermitian, and triangular matrix-matrix product <a id="linalg.algs.blas3.xxmm">[[linalg.algs.blas3.xxmm]]</a>
2
+
3
+ [*Note 1*: These functions correspond to the BLAS functions `xSYMM`,
4
+ `xHEMM`, and `xTRMM`. — *end note*]
5
+
6
+ The following elements apply to all functions in
7
+ [[linalg.algs.blas3.xxmm]] in addition to function-specific elements.
8
+
9
+ *Mandates:*
10
+
11
+ - `possibly-multipliable<decltype(A), decltype(B), decltype(C)>()` is
12
+ `true`, and
13
+ - `possibly-addable<decltype(E), decltype(E), decltype(C)>()` is `true`
14
+ for those overloads that take an `E` parameter.
15
+
16
+ *Preconditions:*
17
+
18
+ - `multipliable(A, B, C)` is `true`, and
19
+ - `addable(E, E, C)` is `true` for those overloads that take an `E`
20
+ parameter.
21
+
22
+ *Complexity:* 𝑂(`A.extent(0)` × `A.extent(1)` × `B.extent(1)`).
23
+
24
+ ``` cpp
25
+ template<in-matrix InMat1, class Triangle, in-matrix InMat2, out-matrix OutMat>
26
+ void symmetric_matrix_product(InMat1 A, Triangle t, InMat2 B, OutMat C);
27
+ template<class ExecutionPolicy,
28
+ in-matrix InMat1, class Triangle, in-matrix InMat2, out-matrix OutMat>
29
+ void symmetric_matrix_product(ExecutionPolicy&& exec, InMat1 A, Triangle t, InMat2 B, OutMat C);
30
+
31
+ template<in-matrix InMat1, class Triangle, in-matrix InMat2, out-matrix OutMat>
32
+ void hermitian_matrix_product(InMat1 A, Triangle t, InMat2 B, OutMat C);
33
+ template<class ExecutionPolicy,
34
+ in-matrix InMat1, class Triangle, in-matrix InMat2, out-matrix OutMat>
35
+ void hermitian_matrix_product(ExecutionPolicy&& exec, InMat1 A, Triangle t, InMat2 B, OutMat C);
36
+
37
+ template<in-matrix InMat1, class Triangle, class DiagonalStorage,
38
+ in-matrix InMat2, out-matrix OutMat>
39
+ void triangular_matrix_product(InMat1 A, Triangle t, DiagonalStorage d, InMat2 B, OutMat C);
40
+ template<class ExecutionPolicy, in-matrix InMat1, class Triangle, class DiagonalStorage,
41
+ in-matrix InMat2, out-matrix OutMat>
42
+ void triangular_matrix_product(ExecutionPolicy&& exec,
43
+ InMat1 A, Triangle t, DiagonalStorage d, InMat2 B, OutMat C);
44
+ ```
45
+
46
+ These functions perform a matrix-matrix multiply, taking into account
47
+ the `Triangle` and `DiagonalStorage` (if applicable) parameters that
48
+ apply to the symmetric, Hermitian, or triangular (respectively) matrix
49
+ `A` [[linalg.general]].
50
+
51
+ *Mandates:*
52
+
53
+ - If `InMat1` has `layout_blas_packed` layout, then the layout’s
54
+ `Triangle` template argument has the same type as the function’s
55
+ `Triangle` template argument; and
56
+ - *`compatible-static-extents`*`<InMat1, InMat1>(0, 1)` is `true`.
57
+
58
+ *Preconditions:* `A.extent(0) == A.extent(1)` is `true`.
59
+
60
+ *Effects:* Computes C = A B.
61
+
62
+ ``` cpp
63
+ template<in-matrix InMat1, in-matrix InMat2, class Triangle, out-matrix OutMat>
64
+ void symmetric_matrix_product(InMat1 A, InMat2 B, Triangle t, OutMat C);
65
+ template<class ExecutionPolicy,
66
+ in-matrix InMat1, in-matrix InMat2, class Triangle, out-matrix OutMat>
67
+ void symmetric_matrix_product(ExecutionPolicy&& exec,
68
+ InMat1 A, InMat2 B, Triangle t, OutMat C);
69
+
70
+ template<in-matrix InMat1, in-matrix InMat2, class Triangle, out-matrix OutMat>
71
+ void hermitian_matrix_product(InMat1 A, InMat2 B, Triangle t, OutMat C);
72
+ template<class ExecutionPolicy,
73
+ in-matrix InMat1, in-matrix InMat2, class Triangle, out-matrix OutMat>
74
+ void hermitian_matrix_product(ExecutionPolicy&& exec,
75
+ InMat1 A, InMat2 B, Triangle t, OutMat C);
76
+
77
+ template<in-matrix InMat1, in-matrix InMat2, class Triangle, class DiagonalStorage,
78
+ out-matrix OutMat>
79
+ void triangular_matrix_product(InMat1 A, InMat2 B, Triangle t, DiagonalStorage d, OutMat C);
80
+ template<class ExecutionPolicy,
81
+ in-matrix InMat1, in-matrix InMat2, class Triangle, class DiagonalStorage,
82
+ out-matrix OutMat>
83
+ void triangular_matrix_product(ExecutionPolicy&& exec,
84
+ InMat1 A, InMat2 B, Triangle t, DiagonalStorage d, OutMat C);
85
+ ```
86
+
87
+ These functions perform a matrix-matrix multiply, taking into account
88
+ the `Triangle` and `DiagonalStorage` (if applicable) parameters that
89
+ apply to the symmetric, Hermitian, or triangular (respectively) matrix
90
+ `B` [[linalg.general]].
91
+
92
+ *Mandates:*
93
+
94
+ - If `InMat2` has `layout_blas_packed` layout, then the layout’s
95
+ `Triangle` template argument has the same type as the function’s
96
+ `Triangle` template argument; and
97
+ - *`compatible-static-extents`*`<InMat2, InMat2>(0, 1)` is `true`.
98
+
99
+ *Preconditions:* `B.extent(0) == B.extent(1)` is `true`.
100
+
101
+ *Effects:* Computes C = A B.
102
+
103
+ ``` cpp
104
+ template<in-matrix InMat1, class Triangle, in-matrix InMat2, in-matrix InMat3,
105
+ out-matrix OutMat>
106
+ void symmetric_matrix_product(InMat1 A, Triangle t, InMat2 B, InMat3 E, OutMat C);
107
+ template<class ExecutionPolicy,
108
+ in-matrix InMat1, class Triangle, in-matrix InMat2, in-matrix InMat3,
109
+ out-matrix OutMat>
110
+ void symmetric_matrix_product(ExecutionPolicy&& exec,
111
+ InMat1 A, Triangle t, InMat2 B, InMat3 E, OutMat C);
112
+
113
+ template<in-matrix InMat1, class Triangle, in-matrix InMat2, in-matrix InMat3,
114
+ out-matrix OutMat>
115
+ void hermitian_matrix_product(InMat1 A, Triangle t, InMat2 B, InMat3 E, OutMat C);
116
+ template<class ExecutionPolicy,
117
+ in-matrix InMat1, class Triangle, in-matrix InMat2, in-matrix InMat3,
118
+ out-matrix OutMat>
119
+ void hermitian_matrix_product(ExecutionPolicy&& exec,
120
+ InMat1 A, Triangle t, InMat2 B, InMat3 E, OutMat C);
121
+
122
+ template<in-matrix InMat1, class Triangle, class DiagonalStorage,
123
+ in-matrix InMat2, in-matrix InMat3, out-matrix OutMat>
124
+ void triangular_matrix_product(InMat1 A, Triangle t, DiagonalStorage d, InMat2 B, InMat3 E,
125
+ OutMat C);
126
+ template<class ExecutionPolicy,
127
+ in-matrix InMat1, class Triangle, class DiagonalStorage,
128
+ in-matrix InMat2, in-matrix InMat3, out-matrix OutMat>
129
+ void triangular_matrix_product(ExecutionPolicy&& exec,
130
+ InMat1 A, Triangle t, DiagonalStorage d, InMat2 B, InMat3 E,
131
+ OutMat C);
132
+ ```
133
+
134
+ These functions perform a potentially overwriting matrix-matrix
135
+ multiply-add, taking into account the `Triangle` and `DiagonalStorage`
136
+ (if applicable) parameters that apply to the symmetric, Hermitian, or
137
+ triangular (respectively) matrix `A` [[linalg.general]].
138
+
139
+ *Mandates:*
140
+
141
+ - If `InMat1` has `layout_blas_packed` layout, then the layout’s
142
+ `Triangle` template argument has the same type as the function’s
143
+ `Triangle` template argument; and
144
+ - *`compatible-static-extents`*`<InMat1, InMat1>(0, 1)` is `true`.
145
+
146
+ *Preconditions:* `A.extent(0) == A.extent(1)` is `true`.
147
+
148
+ *Effects:* Computes C = E + A B.
149
+
150
+ *Remarks:* `C` may alias `E`.
151
+
152
+ ``` cpp
153
+ template<in-matrix InMat1, in-matrix InMat2, class Triangle, in-matrix InMat3,
154
+ out-matrix OutMat>
155
+ void symmetric_matrix_product(InMat1 A, InMat2 B, Triangle t, InMat3 E, OutMat C);
156
+ template<class ExecutionPolicy,
157
+ in-matrix InMat1, in-matrix InMat2, class Triangle, in-matrix InMat3,
158
+ out-matrix OutMat>
159
+ void symmetric_matrix_product(ExecutionPolicy&& exec,
160
+ InMat1 A, InMat2 B, Triangle t, InMat3 E, OutMat C);
161
+
162
+ template<in-matrix InMat1, in-matrix InMat2, class Triangle, in-matrix InMat3,
163
+ out-matrix OutMat>
164
+ void hermitian_matrix_product(InMat1 A, InMat2 B, Triangle t, InMat3 E, OutMat C);
165
+ template<class ExecutionPolicy,
166
+ in-matrix InMat1, in-matrix InMat2, class Triangle, in-matrix InMat3,
167
+ out-matrix OutMat>
168
+ void hermitian_matrix_product(ExecutionPolicy&& exec,
169
+ InMat1 A, InMat2 B, Triangle t, InMat3 E, OutMat C);
170
+
171
+ template<in-matrix InMat1, in-matrix InMat2, class Triangle, class DiagonalStorage,
172
+ in-matrix InMat3, out-matrix OutMat>
173
+ void triangular_matrix_product(InMat1 A, InMat2 B, Triangle t, DiagonalStorage d, InMat3 E,
174
+ OutMat C);
175
+ template<class ExecutionPolicy,
176
+ in-matrix InMat1, in-matrix InMat2, class Triangle, class DiagonalStorage,
177
+ in-matrix InMat3, out-matrix OutMat>
178
+ void triangular_matrix_product(ExecutionPolicy&& exec,
179
+ InMat1 A, InMat2 B, Triangle t, DiagonalStorage d, InMat3 E,
180
+ OutMat C);
181
+ ```
182
+
183
+ These functions perform a potentially overwriting matrix-matrix
184
+ multiply-add, taking into account the `Triangle` and `DiagonalStorage`
185
+ (if applicable) parameters that apply to the symmetric, Hermitian, or
186
+ triangular (respectively) matrix `B` [[linalg.general]].
187
+
188
+ *Mandates:*
189
+
190
+ - If `InMat2` has `layout_blas_packed` layout, then the layout’s
191
+ `Triangle` template argument has the same type as the function’s
192
+ `Triangle` template argument; and
193
+ - *`compatible-static-extents`*`<InMat2, InMat2>(0, 1)` is `true`.
194
+
195
+ *Preconditions:* `B.extent(0) == B.extent(1)` is `true`.
196
+
197
+ *Effects:* Computes C = E + A B.
198
+
199
+ *Remarks:* `C` may alias `E`.
200
+