JuliaSIMD / JuliaSIMD/LoopVectorization.jl

`@turbo` and destructuring assignments

Abierto
#422 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

### 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.