Skip to content

Commit 57e9a0d

Browse files
authored
Reduce allocations and improve performance in syevr! (#1176)
1 parent 8bb9f6b commit 57e9a0d

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

src/lapack.jl

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5391,9 +5391,9 @@ for (syev, syevr, syevd, sygvd, elty) in
53915391
W = similar(A, $elty, n)
53925392
ldz = n
53935393
if jobz == 'N'
5394-
Z = similar(A, $elty, ldz, 0)
5394+
Z = similar(A, $elty, 0)
53955395
elseif jobz == 'V'
5396-
Z = similar(A, $elty, ldz, n)
5396+
Z = similar(A, $elty, ldz * n)
53975397
end
53985398
isuppz = similar(A, BlasInt, 2*n)
53995399
work = Vector{$elty}(undef, 1)
@@ -5423,7 +5423,8 @@ for (syev, syevr, syevd, sygvd, elty) in
54235423
resize!(iwork, liwork)
54245424
end
54255425
end
5426-
W[1:m[]], Z[:,1:(jobz == 'V' ? m[] : 0)]
5426+
zm = jobz == 'V' ? m[] : 0
5427+
resize!(W, m[]), reshape(resize!(Z, ldz * zm), ldz, zm)
54275428
end
54285429
syevr!(jobz::AbstractChar, A::AbstractMatrix{$elty}) =
54295430
syevr!(jobz, 'A', 'U', A, 0.0, 0.0, 0, 0, -1.0)
@@ -5593,10 +5594,10 @@ for (syev, syevr, syevd, sygvd, elty, relty) in
55935594
W = similar(A, $relty, n)
55945595
if jobz == 'N'
55955596
ldz = 1
5596-
Z = similar(A, $elty, ldz, 0)
5597+
Z = similar(A, $elty, 0)
55975598
elseif jobz == 'V'
55985599
ldz = n
5599-
Z = similar(A, $elty, ldz, n)
5600+
Z = similar(A, $elty, ldz * n)
56005601
end
56015602
isuppz = similar(A, BlasInt, 2*n)
56025603
work = Vector{$elty}(undef, 1)
@@ -5632,7 +5633,8 @@ for (syev, syevr, syevd, sygvd, elty, relty) in
56325633
resize!(iwork, liwork)
56335634
end
56345635
end
5635-
W[1:m[]], Z[:,1:(jobz == 'V' ? m[] : 0)]
5636+
zm = jobz == 'V' ? m[] : 0
5637+
resize!(W, m[]), reshape(resize!(Z, ldz * zm), ldz, zm)
56365638
end
56375639
syevr!(jobz::AbstractChar, A::AbstractMatrix{$elty}) =
56385640
syevr!(jobz, 'A', 'U', A, 0.0, 0.0, 0, 0, -1.0)

0 commit comments

Comments
 (0)