perf(forest): thread the reference BlockForest path — leaf sweeps and exchange descriptor loops
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 48/100
- Loại issue
- Tái cấu trúc
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- julia
- Lĩnh vực
- backend, performance
Hướng nghiên cứu
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.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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.
- Ngôn ngữ chính
- Julia
- Star
- 3
- Fork
- 1
- Merge trung bình
- 1 ngày 28 phút
- Pull request đã merge (30 ngày)
- 6
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của RallypointOne/MatrixFreeOperators.jl
-
Roadmap: open-issue priorityĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 45/100
-
enhancement
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
-
performance
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 45/100
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
RallypointOne/MatrixFreeOperators.jl#81 · 1 bình luận ·
Tất cả issue của RallypointOne/MatrixFreeOperators.jl
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 76/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
SciML/OrdinaryDiffEq.jl#4907 ·
Maintainer thường phản hồi trong vòng 4 ngày
-
documentation model-weights
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
FluxML/Metalhead.jl#311 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
jump-dev/MathOptInterface.jl#3113 ·
Maintainer thường phản hồi trong vòng 1 ngày