From 7781c685e21d37ec6bc557054cce0fcbbbcebf15 Mon Sep 17 00:00:00 2001 From: Maxence Gollier Date: Sat, 3 Jan 2026 10:44:54 +0100 Subject: [PATCH 1/2] remove allocations in lsr1 push! --- src/lsr1.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lsr1.jl b/src/lsr1.jl index 60895d6f..7445cb84 100644 --- a/src/lsr1.jl +++ b/src/lsr1.jl @@ -161,12 +161,12 @@ function push!(op::LSR1Operator, s::AbstractVector, y::AbstractVector) for i = 1:(data.mem) k = mod(data.insert + i - 2, data.mem) + 1 if data.ys[k] != 0 - data.a[k] .= data.y[k] - data.s[k] / data.scaling_factor # = y - B₀ * s + @. data.a[k] = data.y[k] - data.s[k] / data.scaling_factor # = y - B₀ * s for j = 1:(i - 1) l = mod(data.insert + j - 2, data.mem) + 1 if data.ys[l] != 0 as = dot(data.a[l], data.s[k]) / data.as[l] - data.a[k] .-= as * data.a[l] + @. data.a[k] -= as * data.a[l] end end data.as[k] = dot(data.a[k], data.s[k]) From 8cc24aeb727798febfdbcf140a5ae196b052cef7 Mon Sep 17 00:00:00 2001 From: Maxence Gollier Date: Sat, 3 Jan 2026 10:56:41 +0100 Subject: [PATCH 2/2] add allocation test for push! --- test/test_lsr1.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test_lsr1.jl b/test/test_lsr1.jl index 2fb9a93a..1698d542 100644 --- a/test/test_lsr1.jl +++ b/test/test_lsr1.jl @@ -83,11 +83,13 @@ function test_lsr1() n = 100 mem = 20 B = LSR1Operator(n, mem = mem) + nallocs = 0 for _ = 1:2:n s = rand(n) y = rand(n) - push!(B, s, y) + nallocs += @allocated push!(B, s, y) end + @test nallocs == 0 x = rand(n) res = similar(x) mul!(res, B, x) # warmup