JuliaSIMD / JuliaSIMD/LoopVectorization.jl
`@turbo` and destructuring assignments
- Lenguaje dominante
- Julia
- Estrellas
- 789
- Forks
- 73
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
### Discussed in https://github.com/JuliaSIMD/LoopVectorization.jl/discussions/421
Originally posted by **matthias314** August 16, 2022
It seems that destructuring assignments inside a loop may lead to wrong results. The example
```
function swap(v, w)
@turbo for i in axes(v, 1)
v[i], w[i] = w[i], v[i]
end
end
```
gives
```
julia> v = [0, 0];
julia> w = [1, 1];
julia> swap(v, w);
julia> v[1], w[1]
(1, 1) # wrong
```
I don't know if this is a bug or part of the "don't rely on a specific execution order" rule. In the latter case, would it make sense to mention this case explicitly in the documentation? After all, it's formally a single statement.
It has been confirmed that it's a bug.
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Línea de trabajo
Empieza reproduciendo la función `swap` con el bucle `@turbo` del issue en Julia y compárala con los valores intercambiados esperados. Traza cómo se manejan las asignaciones por desempaquetado dentro de `@turbo`; luego verifica que el ejemplo produzca el resultado correcto sin romper el comportamiento de otros bucles.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- julia
- Área
- performance
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 38/100