|
208 | 208 | # BLAS overrides
|
209 | 209 | #############
|
210 | 210 |
|
211 |
| - |
212 |
| -function materialize!(M::MatMulVecAdd{<:AbstractBlockLayout,<:AbstractStridedLayout,<:AbstractStridedLayout}) |
213 |
| - α, A, x_in, β, y_in = M.α, M.A, M.B, M.β, M.C |
214 |
| - if length(x_in) != size(A,2) || length(y_in) != size(A,1) |
215 |
| - throw(DimensionMismatch()) |
216 |
| - end |
217 |
| - |
218 |
| - # impose block structure |
219 |
| - y = PseudoBlockArray(y_in, (axes(A,1),)) |
220 |
| - x = PseudoBlockArray(x_in, (axes(A,2),)) |
221 |
| - |
222 |
| - _fill_lmul!(β, y) |
223 |
| - |
224 |
| - for J = blockaxes(A,2) |
225 |
| - for K = blockcolsupport(A,J) |
226 |
| - muladd!(α, view(A,K,J), view(x,J), one(α), view(y,K)) |
227 |
| - end |
228 |
| - end |
229 |
| - y_in |
230 |
| -end |
231 |
| - |
232 | 211 | @inline function _block_muladd!(α, A, X::AbstractVector, β, Y::AbstractVector)
|
233 | 212 | _fill_lmul!(β, Y)
|
234 | 213 | for N = blockcolsupport(X), K = blockcolsupport(A,N)
|
|
245 | 224 | Y
|
246 | 225 | end
|
247 | 226 |
|
| 227 | +function materialize!(M::MatMulVecAdd{<:AbstractBlockLayout,<:AbstractStridedLayout,<:AbstractStridedLayout}) |
| 228 | + α, A, x_in, β, y_in = M.α, M.A, M.B, M.β, M.C |
| 229 | + if length(x_in) != size(A,2) || length(y_in) != size(A,1) |
| 230 | + throw(DimensionMismatch()) |
| 231 | + end |
| 232 | + |
| 233 | + # impose block structure |
| 234 | + y = PseudoBlockArray(y_in, (axes(A,1),)) |
| 235 | + x = PseudoBlockArray(x_in, (axes(A,2),)) |
| 236 | + _block_muladd!(α, A, x, β, y) |
| 237 | + y_in |
| 238 | +end |
| 239 | + |
248 | 240 | mul_blockscompatible(A, B, C) = blockisequal(axes(A,2), axes(B,1)) &&
|
249 | 241 | blockisequal(axes(A,1), axes(C,1)) &&
|
250 | 242 | blockisequal(axes(B,2), axes(C,2))
|
@@ -308,7 +300,6 @@ _triangular_matrix(::Val{'L'}, ::Val{'U'}, A) = UnitLowerTriangular(A)
|
308 | 300 | function _matchingblocks_triangular_mul!(::Val{'U'}, UNIT, A::AbstractMatrix{T}, dest) where T
|
309 | 301 | # impose block structure
|
310 | 302 | b = PseudoBlockArray(dest, (axes(A,1),))
|
311 |
| - |
312 | 303 | for K = blockaxes(A,1)
|
313 | 304 | b_2 = view(b, K)
|
314 | 305 | Ũ = _triangular_matrix(Val('U'), UNIT, view(A, K,K))
|
|
0 commit comments