From 87a4e024f9ae4095659dff9f35a7004178d16b58 Mon Sep 17 00:00:00 2001 From: "William S. Moses" Date: Sat, 27 Dec 2025 12:43:00 -0600 Subject: [PATCH 1/2] Perf: improve sum like reductions --- src/compiler/interpreter.jl | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/compiler/interpreter.jl b/src/compiler/interpreter.jl index d8f64349b9..c43aa79fcf 100644 --- a/src/compiler/interpreter.jl +++ b/src/compiler/interpreter.jl @@ -992,8 +992,25 @@ end @inline function override_bc_mapreduce(f, op, ::Base.IndexLinear, A::Base.AbstractArrayOrBroadcasted) inds = Base.LinearIndices(A) n = length(inds) + + HET = Base.IteratorEltype(A) + if HET isa Base.HasEltype + ET = eltype(A) + if (op === Base.:+ || op === Base.add_sum) && Base.isconcretetype(ET) && (ET <: Base.IEEEFloat || ET <: Complex{<:Base.IEEEFloat}) + @inbounds i = first(inds) + s = zero(ET) + while i < last(inds) + @inbounds Ai = A[i] + i+=1 + s = op(s, f(Ai)) + @simdloop + end + return s + end + end + if n == 0 - return Base.mapreduce_empty_iter(f, op, A, Base.IteratorEltype(A)) + return Base.mapreduce_empty_iter(f, op, A, HET) elseif n == 1 @inbounds a1 = A[first(inds)] return Base.mapreduce_first(f, op, a1) From 2614f6c28be5c713e028fbee1d47480aefc9db7b Mon Sep 17 00:00:00 2001 From: William Moses Date: Sat, 27 Dec 2025 15:46:23 -0600 Subject: [PATCH 2/2] Update interpreter.jl --- src/compiler/interpreter.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compiler/interpreter.jl b/src/compiler/interpreter.jl index c43aa79fcf..147956350d 100644 --- a/src/compiler/interpreter.jl +++ b/src/compiler/interpreter.jl @@ -998,8 +998,9 @@ end ET = eltype(A) if (op === Base.:+ || op === Base.add_sum) && Base.isconcretetype(ET) && (ET <: Base.IEEEFloat || ET <: Complex{<:Base.IEEEFloat}) @inbounds i = first(inds) + @inbounds l = last(inds) s = zero(ET) - while i < last(inds) + while i <= l @inbounds Ai = A[i] i+=1 s = op(s, f(Ai))