Skip to content

Commit 1752823

Browse files
committed
refactor: add garbage collection setup to benchmarkable tests for improved accuracy
1 parent 3f97b32 commit 1752823

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

benchmark/ci_benchmark.jl

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ for nq in QUERY_SIZES
6767
clear_cubic_cache!()
6868
cubic_interp(x, y, xi) # prime cache
6969
label = lpad(nq, 5, '0') # 00001, 00100, 10000
70-
b = @benchmarkable cubic_interp($x, $y, $xi)
70+
b = @benchmarkable cubic_interp($x, $y, $xi) setup=(GC.gc())
7171
b.params.evals = nq >= 10_000 ? EVALS_SLOW : EVALS_MED
7272
suite["1_cubic_oneshot"]["q$label"] = b
7373
end
@@ -78,7 +78,7 @@ for ng in GRID_SIZES
7878
y_grid = sin.(x_grid) .+ 0.1 .* collect(x_grid)
7979
clear_cubic_cache!()
8080
label = lpad(ng, 4, '0') # 0010, 0100, 1000
81-
b = @benchmarkable cubic_interp($x_grid, $y_grid; autocache=false)
81+
b = @benchmarkable cubic_interp($x_grid, $y_grid; autocache=false) setup=(GC.gc())
8282
b.params.evals = ng >= 1000 ? EVALS_SLOW : EVALS_MED
8383
suite["2_cubic_construct"]["g$label"] = b
8484
end
@@ -90,7 +90,7 @@ for nq in QUERY_SIZES
9090
label = lpad(nq, 5, '0')
9191
# In-place: pre-allocate output to measure pure computation
9292
out = Vector{Float64}(undef, nq)
93-
b = @benchmarkable $itp_cubic($out, $xi)
93+
b = @benchmarkable $itp_cubic($out, $xi) setup=(GC.gc())
9494
b.params.evals = nq == 1 ? EVALS_FAST : nq == 100 ? EVALS_MED : EVALS_SLOW
9595
suite["3_cubic_eval"]["q$label"] = b
9696
end
@@ -105,7 +105,7 @@ println("Setting up linear benchmarks...")
105105
for nq in QUERY_SIZES
106106
xi = nq == 1 ? [5.0] : collect(range(0.1, 9.9, nq))
107107
label = lpad(nq, 5, '0')
108-
b = @benchmarkable linear_interp($x, $y, $xi)
108+
b = @benchmarkable linear_interp($x, $y, $xi) setup=(GC.gc())
109109
b.params.evals = nq == 1 ? EVALS_FAST : nq == 100 ? EVALS_MED : EVALS_SLOW
110110
suite["4_linear_oneshot"]["q$label"] = b
111111
end
@@ -115,7 +115,7 @@ for ng in GRID_SIZES
115115
x_grid = range(0.0, 10.0, ng)
116116
y_grid = sin.(x_grid) .+ 0.1 .* collect(x_grid)
117117
label = lpad(ng, 4, '0')
118-
b = @benchmarkable linear_interp($x_grid, $y_grid)
118+
b = @benchmarkable linear_interp($x_grid, $y_grid) setup=(GC.gc())
119119
b.params.evals = EVALS_FAST
120120
suite["5_linear_construct"]["g$label"] = b
121121
end
@@ -127,7 +127,7 @@ for nq in QUERY_SIZES
127127
label = lpad(nq, 5, '0')
128128
# In-place: pre-allocate output to measure pure computation
129129
out = Vector{Float64}(undef, nq)
130-
b = @benchmarkable $itp_linear($out, $xi)
130+
b = @benchmarkable $itp_linear($out, $xi) setup=(GC.gc())
131131
b.params.evals = nq == 1 ? EVALS_FAST : nq == 100 ? EVALS_MED : EVALS_SLOW
132132
suite["6_linear_eval"]["q$label"] = b
133133
end
@@ -142,23 +142,23 @@ const xq_vec1 = [5.0] # 1-element vector for comparison
142142
const out_vec1 = Vector{Float64}(undef, 1) # Pre-allocated output for vec1
143143

144144
# 7. Cubic: Range grid - scalar vs vec1
145-
let b = @benchmarkable $itp_cubic($xq_scalar)
145+
let b = @benchmarkable $itp_cubic($xq_scalar) setup=(GC.gc())
146146
b.params.evals = EVALS_FAST
147147
suite["7_cubic_range"]["scalar_query"] = b
148148
end
149149

150-
let b = @benchmarkable $itp_cubic($out_vec1, $xq_vec1)
150+
let b = @benchmarkable $itp_cubic($out_vec1, $xq_vec1) setup=(GC.gc())
151151
b.params.evals = EVALS_FAST
152152
suite["7_cubic_range"]["vec1_query"] = b
153153
end
154154

155155
# 7. Cubic: Vector grid - scalar vs vec1
156-
let b = @benchmarkable $itp_cubic_vec($xq_scalar)
156+
let b = @benchmarkable $itp_cubic_vec($xq_scalar) setup=(GC.gc())
157157
b.params.evals = EVALS_FAST
158158
suite["7_cubic_vec"]["scalar_query"] = b
159159
end
160160

161-
let b = @benchmarkable $itp_cubic_vec($out_vec1, $xq_vec1)
161+
let b = @benchmarkable $itp_cubic_vec($out_vec1, $xq_vec1) setup=(GC.gc())
162162
b.params.evals = EVALS_FAST
163163
suite["7_cubic_vec"]["vec1_query"] = b
164164
end
@@ -180,7 +180,7 @@ for ns in MULTI_SERIES
180180
# Construction benchmark
181181
clear_cubic_cache!()
182182
cubic_interp(x, ys) # prime cache
183-
let b = @benchmarkable cubic_interp($x, $ys)
183+
let b = @benchmarkable cubic_interp($x, $ys) setup=(GC.gc())
184184
b.params.evals = ns >= 50 ? EVALS_SLOW : EVALS_MED
185185
suite["8_cubic_multi"]["construct_s$(slabel)_q$(qlabel)"] = b
186186
end
@@ -191,7 +191,7 @@ for ns in MULTI_SERIES
191191
xq_multi = collect(range(0.1, 9.9, N_QUERY_MULTI))
192192
# Pre-allocate outputs: one vector per series, each of length N_QUERY_MULTI
193193
outputs_multi = [Vector{Float64}(undef, N_QUERY_MULTI) for _ in 1:ns]
194-
let b = @benchmarkable $mitp($outputs_multi, $xq_multi)
194+
let b = @benchmarkable $mitp($outputs_multi, $xq_multi) setup=(GC.gc())
195195
b.params.evals = ns >= 50 ? EVALS_SLOW : EVALS_MED
196196
suite["8_cubic_multi"]["eval_s$(slabel)_q$(qlabel)"] = b
197197
end
@@ -203,7 +203,7 @@ for ns in MULTI_SERIES
203203
for xq in $xq_multi
204204
$mitp($out_scalar, xq)
205205
end
206-
end
206+
end setup=(GC.gc())
207207
b.params.evals = ns >= 50 ? EVALS_SLOW : EVALS_MED
208208
suite["8_cubic_multi"]["eval_s$(slabel)_q$(qlabel)_scalar_loop"] = b
209209
end

0 commit comments

Comments
 (0)