Skip to content

Commit acf52df

Browse files
Remove allocations in lsr1 push! (#388)
* remove allocations in lsr1 push! * add allocation test for push!
1 parent b7ac051 commit acf52df

2 files changed

Lines changed: 5 additions & 3 deletions

File tree

src/lsr1.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,12 +161,12 @@ function push!(op::LSR1Operator, s::AbstractVector, y::AbstractVector)
161161
for i = 1:(data.mem)
162162
k = mod(data.insert + i - 2, data.mem) + 1
163163
if data.ys[k] != 0
164-
data.a[k] .= data.y[k] - data.s[k] / data.scaling_factor # = y - B₀ * s
164+
@. data.a[k] = data.y[k] - data.s[k] / data.scaling_factor # = y - B₀ * s
165165
for j = 1:(i - 1)
166166
l = mod(data.insert + j - 2, data.mem) + 1
167167
if data.ys[l] != 0
168168
as = dot(data.a[l], data.s[k]) / data.as[l]
169-
data.a[k] .-= as * data.a[l]
169+
@. data.a[k] -= as * data.a[l]
170170
end
171171
end
172172
data.as[k] = dot(data.a[k], data.s[k])

test/test_lsr1.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,13 @@ function test_lsr1()
8383
n = 100
8484
mem = 20
8585
B = LSR1Operator(n, mem = mem)
86+
nallocs = 0
8687
for _ = 1:2:n
8788
s = rand(n)
8889
y = rand(n)
89-
push!(B, s, y)
90+
nallocs += @allocated push!(B, s, y)
9091
end
92+
@test nallocs == 0
9193
x = rand(n)
9294
res = similar(x)
9395
mul!(res, B, x) # warmup

0 commit comments

Comments
 (0)