From dd48d058aa25cd9c3deec7b9d70735f1970d3d2a Mon Sep 17 00:00:00 2001 From: Matthieu Gomez Date: Wed, 4 Feb 2026 11:00:27 -0500 Subject: [PATCH 1/3] Enhance benchmark.jl with BenchmarkTools and new scatter! function Added benchmarking functionality for scatter! function with different chunk sizes. --- benchmarks/benchmark.jl | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/benchmarks/benchmark.jl b/benchmarks/benchmark.jl index 5e9992f..f432839 100755 --- a/benchmarks/benchmark.jl +++ b/benchmarks/benchmark.jl @@ -1,5 +1,25 @@ -using FixedEffects, Random, Statistics +using FixedEffects, Random, Statistics, BenchmarkTools, GroupedArrays Random.seed!(1234) + + +function scatter!(y::AbstractVector, α::Number, fecoef::AbstractVector, + refs::AbstractVector, cache::AbstractVector; chunksize = 1_000_000) + GroupedArrays.@spawn_for_chunks chunksize for i in eachindex(y) + @inbounds y[i] += α * fecoef[refs[i]] * cache[i] + end +end + +n = 10_000_000 +N = 1_000_000 +refs = rand(1:N, n) +fecoef = rand(N) +cache = rand(n) +y = zeros(n) +@btime scatter!(y, 1.0, fecoef, refs, cache; chunksize = 1_000_000) +@btime scatter!(y, 1.0, fecoef, refs, cache; chunksize = 100_000) + + + N = 10000000 K = 100 id1 = rand(1:div(N, K), N) From 2b9c68dfb8fabde99b60aa8ca854973b4cbc4ced Mon Sep 17 00:00:00 2001 From: Matthieu Gomez Date: Wed, 4 Feb 2026 11:01:10 -0500 Subject: [PATCH 2/3] Reduce chunk size in scatter and cache functions --- src/SolverCPU.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SolverCPU.jl b/src/SolverCPU.jl index 7e82504..f7f5097 100644 --- a/src/SolverCPU.jl +++ b/src/SolverCPU.jl @@ -27,7 +27,7 @@ end function scatter!(y::AbstractVector, α::Number, fecoef::AbstractVector, refs::AbstractVector, cache::AbstractVector) - @spawn_for_chunks 1_000_000 for i in eachindex(y) + @spawn_for_chunks 100_000 for i in eachindex(y) @inbounds y[i] += α * fecoef[refs[i]] * cache[i] end end @@ -85,7 +85,7 @@ function scale!(scale::AbstractVector, refs::AbstractVector, interaction::Abstra end function cache!(cache::AbstractVector, refs::AbstractVector, interaction::AbstractVector, weights::AbstractVector, scale::AbstractVector) - @spawn_for_chunks 1_000_000 for i in eachindex(cache) + @spawn_for_chunks 100_000 for i in eachindex(cache) @inbounds @fastmath cache[i] = interaction[i] * sqrt(weights[i]) * scale[refs[i]] end end From 23df06e361d78846057c7642a3059a159ec27cb4 Mon Sep 17 00:00:00 2001 From: Matthieu Gomez Date: Wed, 18 Feb 2026 12:59:35 -0500 Subject: [PATCH 3/3] Bump version from 2.7.0 to 2.7.1 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 436126f..9acf8fc 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "FixedEffects" uuid = "c8885935-8500-56a7-9867-7708b20db0eb" -version = "2.7.0" +version = "2.7.1" [deps]