JuliaSIMD / JuliaSIMD/LoopVectorization.jl

vmapreduce: no method matching reduce_to_onevec

Abierto
#423 1 comentario 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Julia
Estrellas
789
Forks
73
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

vmapreduce_bugreport.jl:
```
using LoopVectorization

f(a) =
(a, a)

g(a, b) =
let (q, w) = a, (e, r) = b
(min(q, e), max(w, r))
end

myminmax_mapreduce(x) =
mapreduce(f, g, x)

myminmax_vmapreduce(x) =
vmapreduce(f, g, x)

const inp = rand(1:9, 100)

myminmax_mapreduce(inp)

myminmax_vmapreduce(inp)

nothing
```

```
$ julia -O3 --min-optlevel=3 -g 2 --threads 4
_
_ _ _(_)_ | Documentation: https://docs.julialang.org
(_) | (_) (_) |
_ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 1.8.0 (2022-08-17)
_/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release
|__/ |

julia> include("vmapreduce_bugreport.jl")
ERROR: LoadError: MethodError: no method matching reduce_to_onevec(::typeof(g), ::Tuple{VectorizationBase.VecUnroll{3, 4, Int64, VectorizationBase.Vec{4, Int64}}, VectorizationBase.VecUnroll{3, 4, Int64, VectorizationBase.Vec{4, Int64}}})
Closest candidates are:
reduce_to_onevec(::F, ::VectorizationBase.VecUnroll) where F at ~/.julia/packages/VectorizationBase/oCgEJ/src/VectorizationBase.jl:504
Stacktrace:
[1] _vmapreduce
@ ~/.julia/packages/LoopVectorization/aw6pf/src/simdfunctionals/mapreduce.jl:83 [inlined]
[2] vmapreduce
@ ~/.julia/packages/LoopVectorization/aw6pf/src/simdfunctionals/mapreduce.jl:62 [inlined]
[3] myminmax_vmapreduce(x::Vector{Int64})
@ Main ~/vmapreduce_bugreport.jl:14
[4] top-level scope
@ ~/vmapreduce_bugreport.jl:21
[5] include(fname::String)
@ Base.MainInclude ./client.jl:476
[6] top-level scope
@ REPL[1]:1
in expression starting at /home/nsajko/vmapreduce_bugreport.jl:21
```

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Línea de trabajo

Comienza ejecutando el reproducer en vmapreduce_bugreport.jl e inspecciona los puntos de entrada _vmapreduce y vmapreduce en simdfunctionals/mapreduce.jl identificados por el stack trace. Sigue cómo llega el resultado de tipo tupla a reduce_to_onevec y, después, verifica que el ejemplo se completa sin un MethodError y conserva el resultado habitual de mapreduce.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
julia
Área
compilers, performance
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Bastante claro
Aptitud para principiantes
35/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.