perf(forest): thread the reference BlockForest path — leaf sweeps and exchange descriptor loops
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Refactorización
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- julia
- Área
- backend, performance
Línea de trabajo
Start with _forest_sweep_leaves! and _forest_adjoint_sweep_leaves! in src/operators/forest.jl, then inspect the three descriptor loops in _exchange_storage! in src/transfer.jl. Check whether descriptors in each exchange phase can alias destinations and compare the executor decision with #51. Run examples/niederer_benchmark.jl and verify diffusion scales with -t while the adjoint sweep preserves the stated inner-product equality bit-for-bit against the serial path.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Carved out of #49 (candidate 1) so it can be tracked as one unit of work.
_forest_sweep_leaves! (src/operators/forest.jl), _forest_adjoint_sweep_leaves!, and the three descriptor loops in _exchange_storage! (src/transfer.jl) are plain serial for loops; on CPU the packed kernels fall back to the same broadcasts. Leaves are disjoint and the exchange phases are ordered to be independent within a phase, so this looks close to embarrassingly parallel. In the Niederer benchmark the reaction term is threaded in example code while diffusion is not, which is a large part of why the two phases scale so differently (#49: diffusion 0.44× on 5.3× fewer cells).
Check first
Whether descriptors within one exchange phase can alias the same destination block. If they can, the threaded sweep needs a partition by destination or atomics; if they cannot, a Threads.@threads over descriptors is enough.
Constraints
- Same executor decision as #51 (KA CPU backend vs a threaded executor at the
apply!seam); pick once for both single-grid and forest paths. - Must not disturb the
_exchange_storage!/_bc_storage!rule seams: no allocation inside them, noField-typed rule arguments. - Acceptance: the
examples/niederer_benchmark.jlphase table shows the diffusion phase scaling with-t, and the adjoint sweep keeps ⟨Lx,y⟩ = ⟨x,Lᵀy⟩ bit-for-bit against the serial path.
🤖 Beep boop — Claude split this off #49; Kyle is not forking himself.
- Lenguaje dominante
- Julia
- Estrellas
- 3
- Forks
- 1
- Merge medio
- 1 d 28 min
- PR fusionados (30 d)
- 6
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de RallypointOne/MatrixFreeOperators.jl
-
Roadmap: open-issue priorityAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
enhancement
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
-
performance
Dificultad 5/5 Más de una semana Aptitud para principiantes 45/100
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
enhancement
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
RallypointOne/MatrixFreeOperators.jl#81 · 1 comentario ·
Todos los issues de RallypointOne/MatrixFreeOperators.jl
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 76/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
SciML/OrdinaryDiffEq.jl#4907 ·
Los mantenedores suelen responder en 4 días
-
documentation model-weights
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
FluxML/Metalhead.jl#311 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
jump-dev/MathOptInterface.jl#3113 ·
Los mantenedores suelen responder en 1 día