JuliaSIMD / JuliaSIMD/LoopVectorization.jl

`maybescalarize` instead of `can_turbo`?

Aperta
#453 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
good first issue help wanted
Lingua principale
Julia
Stelle
789
Fork
73
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

See here for some background: https://github.com/JuliaSIMD/StrideArrays.jl/issues/62#issuecomment-1367775417

The idea is not to check whether a function has a `SIMD` implementation, but to scalarize in case we do not have one.
```julia
@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))...)
end
```
Two things are missing:
1. Add all the missing `scalarize` methods I didn't include above. This means `VecUnroll` and things that are neither `VecUnroll` or `AbstractSIMDVector`. We also need to consider functions with all sorts of different numbers of arguments. Thankfully, we don't need to consider memory operations like `vload` or `vstore`, because these should always vectorize (our checks on the arrays should handle that).
2. Updating LV's code generation to call `maybescalarize(f, args...)` instead of `f(args...)`. This might only mean editing here:
https://github.com/JuliaSIMD/LoopVectorization.jl/blob/35f83103c12992ddd887cd709bf65e345db5ec9e/src/modeling/costs.jl#L17-L23
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 https://github.com/JuliaSIMD/StrideArrays.jl/issues/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!

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.