Skip to content

Commit 2de9a10

Browse files
authored
Reduce allocations in jac_gbmm (#196)
* reduce allocations in jac_gbmm * Add GC after tests
1 parent 591136c commit 2de9a10

File tree

3 files changed

+57
-30
lines changed

3 files changed

+57
-30
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "ApproxFunOrthogonalPolynomials"
22
uuid = "b70543e2-c0d9-56b8-a290-0d4d6d4de211"
3-
version = "0.6.11"
3+
version = "0.6.12"
44

55
[deps]
66
ApproxFunBase = "fbd15aa5-315a-5a7d-a8a4-24992e37be05"

src/Spaces/PolynomialSpace.jl

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -147,32 +147,59 @@ function jac_gbmm!(α, J, B, β, C, b)
147147

148148
@views for k=-1:b-1
149149
if 1-Cn b-k Cm-1 # if inbands
150-
C[band(b-k)] .+= α.*B[band(b-k-1)][2:n-b+k+1].*Jp[1:n-b+k]
150+
Cbmk = C[band(b-k)]
151+
Bm = B[band(b-k-1)]
152+
B0 = B[band(b-k)]
153+
Bp = B[band(b-k+1)]
154+
for i in 1:n-b+k
155+
Cbmk[i] += α * Bm[i+1] * Jp[i]
156+
end
151157
if k 0
152-
C[band(b-k)] .+= α.*B[band(b-k)].*J0[1:n-b+k]
158+
for i in 1:n-b+k
159+
Cbmk[i] += α * B0[i] * J0[i]
160+
end
153161
if k 1
154-
C[band(b-k)][2:n-b+k] .+= α.*B[band(b-k+1)].*Jm[1:n-1-b+k]
162+
for i in 1:n-1-b+k
163+
Cbmk[i+1] += α * Bp[i] * Jm[i]
164+
end
155165
end
156166
end
157167
end
158168
end
159169

160170
@views for k=-1:b-1
161171
if 1-Cn k-b Cm-1 # if inbands
162-
C[band(k-b)] .+= α.*B[band(k-b+1)][1:n-b+k].*Jm[b-k:n-1]
172+
Ckmb = C[band(k-b)]
173+
Bp = B[band(k-b+1)]
174+
B0 = B[band(k-b)]
175+
Bm = B[band(k-b-1)]
176+
for (i, Ji) in enumerate(b-k:n-1)
177+
Ckmb[i] += α * Bp[i] * Jm[Ji]
178+
end
163179
if k 0
164-
C[band(k-b)] .+= α.*B[band(k-b)].*J0[b-k+1:n]
180+
for (i, Ji) in enumerate(b-k+1:n)
181+
Ckmb[i] += α * B0[i] * J0[Ji]
182+
end
165183
if k 1
166-
C[band(k-b)][1:n-b+k-1] .+= α.*B[band(k-b-1)].*Jp[b-k+1:n-1]
184+
for (i, Ji) in enumerate(b-k+1:n-1)
185+
Ckmb[i] += α * Bm[i] * Jp[Ji]
186+
end
167187
end
168188
end
169189
end
170190
end
171191

172192
@views begin
173-
C[band(0)] .+= α.*B[band(0)].*J0
174-
C[band(0)][1:n-1] .+= α.*B[band(-1)].*Jp
175-
C[band(0)][2:n] .+= α.*B[band(1)].*Jm
193+
C0 = C[band(0)]
194+
Bm = B[band(-1)]
195+
Bp = B[band(1)]
196+
C0 .+= α.*B[band(0)].*J0
197+
for i in 1:n-1
198+
C0[i] += α * Bm[i] * Jp[i]
199+
end
200+
for i in 2:n
201+
C0[i] += α * Bp[i-1] * Jm[i-1]
202+
end
176203
end
177204

178205
C

test/runtests.jl

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,26 +16,26 @@ end
1616

1717
include("testutils.jl")
1818

19-
include("ClenshawTest.jl")
20-
include("ChebyshevTest.jl")
21-
include("ComplexTest.jl")
22-
include("broadcastingtest.jl")
23-
include("OperatorTest.jl")
24-
include("ODETest.jl")
25-
include("EigTest.jl")
26-
include("VectorTest.jl")
27-
include("JacobiTest.jl")
28-
include("LaguerreTest.jl")
29-
include("HermiteTest.jl")
30-
include("SpacesTest.jl")
31-
include("MultivariateTest.jl")
32-
include("PDETest.jl")
19+
include("ClenshawTest.jl"); GC.gc()
20+
include("ChebyshevTest.jl"); GC.gc()
21+
include("ComplexTest.jl"); GC.gc()
22+
include("broadcastingtest.jl"); GC.gc()
23+
include("OperatorTest.jl"); GC.gc()
24+
include("ODETest.jl"); GC.gc()
25+
include("EigTest.jl"); GC.gc()
26+
include("VectorTest.jl"); GC.gc()
27+
include("JacobiTest.jl"); GC.gc()
28+
include("LaguerreTest.jl"); GC.gc()
29+
include("HermiteTest.jl"); GC.gc()
30+
include("SpacesTest.jl"); GC.gc()
31+
include("MultivariateTest.jl"); GC.gc()
32+
include("PDETest.jl"); GC.gc()
3333

34-
include("SpeedTest.jl")
35-
include("SpeedODETest.jl")
36-
include("SpeedPDETest.jl")
37-
include("SpeedOperatorTest.jl")
38-
include("showtest.jl")
39-
include("miscAFBase.jl")
34+
include("SpeedTest.jl"); GC.gc()
35+
include("SpeedODETest.jl"); GC.gc()
36+
include("SpeedPDETest.jl"); GC.gc()
37+
include("SpeedOperatorTest.jl"); GC.gc()
38+
include("showtest.jl"); GC.gc()
39+
include("miscAFBase.jl"); GC.gc()
4040

4141
end # module

0 commit comments

Comments
 (0)