-
Notifications
You must be signed in to change notification settings - Fork 74
Open
Labels
good first issueGood for newcomersGood for newcomershelp wantedExtra attention is neededExtra attention is needed
Description
See here for some background: JuliaSIMD/StrideArrays.jl#62 (comment)
The idea is not to check whether a function has a SIMD implementation, but to scalarize in case we do not have one.
@inline function maybescalarize(f::F, x::Vararg{Any,K}) where {K}
T = Base.promote_op(f, x...)
T === Union{} && scalarize(f, x...)
return f(x...)
end
using VectorizationBase: AbstractSIMDVector
@inline function scalarize(f::F, x::AbstractSIMDVector{W}) where {W}
Vec(ntuple(f ∘ x, Val(8))...)
endTwo things are missing:
- Add all the missing
scalarizemethods I didn't include above. This meansVecUnrolland things that are neitherVecUnrollorAbstractSIMDVector. We also need to consider functions with all sorts of different numbers of arguments. Thankfully, we don't need to consider memory operations likevloadorvstore, because these should always vectorize (our checks on the arrays should handle that). - Updating LV's code generation to call
maybescalarize(f, args...)instead off(args...). This might only mean editing here:
LoopVectorization.jl/src/modeling/costs.jl
Lines 17 to 23 in 35f8310
function callexpr(instr::Instruction) if instr.mod === :LoopVectorization Expr(:call, lv(instr.instr)) else#if instr.mod === :Main Expr(:call, instr.instr) end end
and this file
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/main/src/codegen/lower_compute.jl
because all of the other places are probably related to load/store or address calculation.
With respect to JuliaSIMD/StrideArrays.jl#62 this will vectorize the call (exactly what we want), because our type check will be using the actually correct argument types to the function, and not just Vec{2,Int}.
Seems like this should be fairly straightforward, and may be a nice improvement.
I'd be happy to provide instructions/guidance/answer questions if anyone wants to take this on!
Metadata
Metadata
Assignees
Labels
good first issueGood for newcomersGood for newcomershelp wantedExtra attention is neededExtra attention is needed