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] 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) 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