@@ -7,6 +7,9 @@ function LinearAlgebra.lu!(A::DMatrix{T}, ::LinearAlgebra.NoPivot; check::Bool=t
7
7
mzone = - one (T)
8
8
Ac = A. chunks
9
9
mt, nt = size (Ac)
10
+ mb, nb = A. partitioning. blocksize
11
+
12
+ mb != nb && error (" Unequal block sizes are not supported: mb = $mb , nb = $nb " )
10
13
11
14
Dagger. spawn_datadeps () do
12
15
for k in range (1 , min (mt, nt))
@@ -39,7 +42,7 @@ function update_ipiv!(ipivl::AbstractVector{Int}, piv_idx::AbstractVector{Int},
39
42
max_piv_val = piv_val[max_piv_idx]
40
43
abs_max_piv_val = max_piv_val isa Real ? abs (max_piv_val) : abs (real (max_piv_val)) + abs (imag (max_piv_val))
41
44
isapprox (abs_max_piv_val, zero (T); atol= eps (real (T))) && throw (LinearAlgebra. SingularException (k))
42
- ipivl[1 ] = (max_piv_idx+ k- 2 )* nb + piv_idx[max_piv_idx]
45
+ ipivl[1 ] = (max_piv_idx+ k- 2 )* nb + piv_idx[max_piv_idx]
43
46
end
44
47
45
48
function swaprows_panel! (A:: AbstractMatrix{T} , M:: AbstractMatrix{T} , ipivl:: AbstractVector{Int} , m:: Int , p:: Int , nb:: Int ) where T
@@ -51,7 +54,7 @@ function swaprows_panel!(A::AbstractMatrix{T}, M::AbstractMatrix{T}, ipivl::Abst
51
54
end
52
55
53
56
function update_panel! (M:: AbstractMatrix{T} , A:: AbstractMatrix{T} , p:: Int ) where T
54
- Acinv = one (T) / A[p,p]
57
+ Acinv = one (T) / A[p,p]
55
58
LinearAlgebra. BLAS. scal! (Acinv, view (M, :, p))
56
59
LinearAlgebra. BLAS. ger! (- one (T), view (M, :, p), conj .(view (A, p, p+ 1 : size (A,2 ))), view (M, :, p+ 1 : size (M,2 )))
57
60
end
@@ -78,15 +81,15 @@ function LinearAlgebra.lu!(A::DMatrix{T}, ::LinearAlgebra.RowMaximum; check::Boo
78
81
mt, nt = size (Ac)
79
82
m, n = size (A)
80
83
mb, nb = A. partitioning. blocksize
81
-
84
+
82
85
mb != nb && error (" Unequal block sizes are not supported: mb = $mb , nb = $nb " )
83
86
84
87
ipiv = DVector (collect (1 : min (m, n)), Blocks (mb))
85
88
ipivc = ipiv. chunks
86
89
87
90
max_piv_idx = zeros (Int,mt)
88
91
max_piv_val = zeros (T, mt)
89
-
92
+
90
93
Dagger. spawn_datadeps () do
91
94
for k in 1 : min (mt, nt)
92
95
for p in 1 : min (nb, m- (k- 1 )* nb, n- (k- 1 )* nb)
@@ -96,17 +99,16 @@ function LinearAlgebra.lu!(A::DMatrix{T}, ::LinearAlgebra.RowMaximum; check::Boo
96
99
end
97
100
Dagger. @spawn update_ipiv! (InOut (view (ipivc[k],p: p)), In (view (max_piv_idx, k: mt)), In (view (max_piv_val, k: mt)), k, nb)
98
101
for i in k: mt
99
- Dagger. @spawn swaprows_panel! (InOut (Ac[k, k]), InOut (Ac[i, k]), InOut (view (ipivc[k],p: p)), i, p, nb)
102
+ Dagger. @spawn swaprows_panel! (InOut (Ac[k, k]), InOut (Ac[i, k]), In (view (ipivc[k],p: p)), i, p, nb)
100
103
end
101
104
Dagger. @spawn update_panel! (InOut (view (Ac[k,k],p+ 1 : min (nb,m- (k- 1 )* nb),:)), In (Ac[k,k]), p)
102
105
for i in k+ 1 : mt
103
106
Dagger. @spawn update_panel! (InOut (Ac[i, k]), In (Ac[k,k]), p)
104
107
end
105
-
106
108
end
107
109
for j in Iterators. flatten ((1 : k- 1 , k+ 1 : nt))
108
110
for i in k: mt
109
- Dagger. @spawn swaprows_trail! (InOut (Ac[k, j]), InOut (Ac[i, j]), In (ipivc[k]), i, mb)
111
+ Dagger. @spawn swaprows_trail! (InOut (Ac[k, j]), InOut (Ac[i, j]), In (ipivc[k]), i, mb)
110
112
end
111
113
end
112
114
for j in k+ 1 : nt
@@ -118,5 +120,5 @@ function LinearAlgebra.lu!(A::DMatrix{T}, ::LinearAlgebra.RowMaximum; check::Boo
118
120
end
119
121
end
120
122
121
- return LinearAlgebra. LU {T,DMatrix{T},DVector{Int}} (A, ipiv, 0 )
122
- end
123
+ return LinearAlgebra. LU {T,DMatrix{T},DVector{Int}} (A, ipiv, 0 )
124
+ end
0 commit comments