@@ -39,7 +39,7 @@ function materialize!(M::MatMulVecAdd{<:AbstractBlockBandedLayout,<:AbstractStri
39
39
40
40
for J = Block .(1 : nblocks (A,2 ))
41
41
for K = blockcolrange (A,J)
42
- view (y,K) . = α .* Mul ( view (A,K,J), view (x,J)) .+ view (y,K)
42
+ muladd! (α, view (A,K,J), view (x,J), one (α), view (y,K) )
43
43
end
44
44
end
45
45
y_in
48
48
function materialize! (M:: MatMulMatAdd{<:AbstractBlockBandedLayout,<:AbstractBlockBandedLayout,<:AbstractBlockBandedLayout} )
49
49
α, A, X, β, Y = M. α, M. A, M. B, M. β, M. C
50
50
_fill_lmul! (β, Y)
51
- for J= Block (1 ): Block (nblocks (X,2 )),
52
- N= blockcolrange (X,J), K= blockcolrange (A,N)
53
- view (Y,K,J) .= α .* Mul ( view (A,K,N), view (X,N,J)) .+ view (Y,K,J)
51
+ for J= Block (1 ): Block (nblocks (X,2 )), N= blockcolrange (X,J), K= blockcolrange (A,N)
52
+ muladd! (α, view (A,K,N), view (X,N,J), one (α), view (Y,K,J))
54
53
end
55
54
Y
56
55
end
@@ -61,7 +60,7 @@ function materialize!(M::MatMulMatAdd{<:AbstractBlockBandedLayout,<:AbstractColu
61
60
X = PseudoBlockArray (X_in, BlockSizes ((cumulsizes (blocksizes (A),2 ),[1 ,size (X_in,2 )+ 1 ])))
62
61
Y = PseudoBlockArray (Y_in, BlockSizes ((cumulsizes (blocksizes (A),1 ), [1 ,size (Y_in,2 )+ 1 ])))
63
62
for N= Block .(1 : nblocks (X,1 )), K= blockcolrange (A,N)
64
- view (Y,K, Block ( 1 )) . = α .* Mul ( view (A,K,N), view (X,N,Block (1 ))) .+ view (Y,K,Block (1 ))
63
+ muladd! (α, view (A,K,N), view (X,N,Block (1 )), one (α), view (Y,K,Block (1 ) ))
65
64
end
66
65
Y_in
67
66
end
@@ -72,7 +71,7 @@ function materialize!(M::MatMulMatAdd{<:AbstractColumnMajor,<:AbstractBlockBande
72
71
A = PseudoBlockArray (A_in, BlockSizes (([1 ,size (A_in,1 )+ 1 ],cumulsizes (blocksizes (X),1 ))))
73
72
Y = PseudoBlockArray (Y_in, BlockSizes (([1 ,size (Y_in,1 )+ 1 ],cumulsizes (blocksizes (X),2 ))))
74
73
for J= Block (1 ): Block (nblocks (X,2 )), N= blockcolrange (X,J)
75
- view (Y, Block ( 1 ),J) . = α .* Mul ( view (A,Block (1 ),N), view (X,N,J)) .+ view (Y,Block (1 ),J)
74
+ muladd! (α, view (A,Block (1 ),N), view (X,N,J), one (α), view (Y,Block (1 ),J) )
76
75
end
77
76
Y_in
78
77
end
84
83
# * overrides
85
84
# ############
86
85
87
- * (A:: BlockBandedMatrix , B:: BlockBandedMatrix ) = materialize ( Mul ( A,B) )
88
- * (A:: BlockBandedMatrix , B:: BandedBlockBandedMatrix ) = materialize ( Mul ( A,B) )
89
- * (A:: BandedBlockBandedMatrix , B:: BlockBandedMatrix ) = materialize ( Mul ( A,B) )
90
- * (A:: BandedBlockBandedMatrix , B:: BandedBlockBandedMatrix ) = materialize ( Mul ( A,B) )
91
- * (A:: Matrix , B:: BlockBandedMatrix ) = materialize ( Mul ( A,B) )
92
- * (A:: BlockBandedMatrix , B:: Matrix ) = materialize ( Mul ( A,B) )
93
- * (A:: BandedBlockBandedMatrix , B:: Matrix ) = materialize ( Mul ( A,B) )
94
- * (A:: Matrix , B:: BandedBlockBandedMatrix ) = materialize ( Mul ( A,B) )
86
+ * (A:: BlockBandedMatrix , B:: BlockBandedMatrix ) = mul ( A,B)
87
+ * (A:: BlockBandedMatrix , B:: BandedBlockBandedMatrix ) = mul ( A,B)
88
+ * (A:: BandedBlockBandedMatrix , B:: BlockBandedMatrix ) = mul ( A,B)
89
+ * (A:: BandedBlockBandedMatrix , B:: BandedBlockBandedMatrix ) = mul ( A,B)
90
+ * (A:: Matrix , B:: BlockBandedMatrix ) = mul ( A,B)
91
+ * (A:: BlockBandedMatrix , B:: Matrix ) = mul ( A,B)
92
+ * (A:: BandedBlockBandedMatrix , B:: Matrix ) = mul ( A,B)
93
+ * (A:: Matrix , B:: BandedBlockBandedMatrix ) = mul ( A,B)
95
94
96
95
97
96
function add_bandwidths (A:: AbstractBlockBandedMatrix ,B:: AbstractBlockBandedMatrix )
165
164
similar (M:: MulAdd{<:DiagonalLayout,<:AbstractBlockBandedLayout} , :: Type{T} ) where T = similar (M. B,T)
166
165
similar (M:: MulAdd{<:AbstractBlockBandedLayout,<:DiagonalLayout} , :: Type{T} ) where T = similar (M. A,T)
167
166
168
- mulapplystyle (:: DiagonalLayout , :: AbstractBlockBandedLayout ) = MulAddStyle ()
169
- mulapplystyle (:: AbstractBlockBandedLayout , :: DiagonalLayout ) = MulAddStyle ()
170
-
171
167
172
168
173
169
function blocksizes (V:: SubBlockSkylineMatrix{<:Any,LL,UU,BlockRange1,BlockRange1} ) where {LL,UU}
@@ -202,17 +198,17 @@ end
202
198
# ###
203
199
204
200
205
- subarraylayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}} ) = BlockBandedColumnMajor ()
206
- subarraylayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}} ) = ColumnMajor ()
207
- subarraylayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}} ) = ColumnMajor ()
208
- subarraylayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}} ) = ColumnMajor ()
201
+ sublayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}} ) = BlockBandedColumnMajor ()
202
+ sublayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}} ) = ColumnMajor ()
203
+ sublayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}} ) = ColumnMajor ()
204
+ sublayout (:: BlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}} ) = ColumnMajor ()
209
205
210
- subarraylayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{Block1}, BlockSlice{Block1}}} ) = BandedColumnMajor ()
211
- subarraylayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}} ) = BandedBlockBandedColumnMajor ()
212
- subarraylayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{Block1}, BlockSlice{BlockRange1}}} ) = BandedBlockBandedColumnMajor ()
213
- subarraylayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}} ) = BandedBlockBandedColumnMajor ()
214
- subarraylayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}} ) = BandedBlockBandedColumnMajor ()
215
- subarraylayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}} ) = BandedBlockBandedColumnMajor ()
206
+ sublayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{Block1}, BlockSlice{Block1}}} ) = BandedColumnMajor ()
207
+ sublayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockRange1}}} ) = BandedBlockBandedColumnMajor ()
208
+ sublayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{Block1}, BlockSlice{BlockRange1}}} ) = BandedBlockBandedColumnMajor ()
209
+ sublayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{Block1}}} ) = BandedBlockBandedColumnMajor ()
210
+ sublayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockRange1}, BlockSlice{BlockIndexRange1}}} ) = BandedBlockBandedColumnMajor ()
211
+ sublayout (:: BandedBlockBandedColumnMajor , :: Type{Tuple{BlockSlice{BlockIndexRange1}, BlockSlice{BlockIndexRange1}}} ) = BandedBlockBandedColumnMajor ()
216
212
217
213
isbanded (A:: SubArray{<:Any,2,<:BandedBlockBandedMatrix} ) = MemoryLayout (typeof (A)) == BandedColumnMajor ()
218
214
isbandedblockbanded (A:: SubArray{<:Any,2,<:BandedBlockBandedMatrix} ) = MemoryLayout (typeof (A)) == BandedBlockBandedColumnMajor ()
0 commit comments