test(mdla): fold test/multigpu into the MDLA suite and lift the 2-partition caps
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ính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- julia
- Lĩnh vực
- ci-cd, testing-qa
Hướng nghiên cứu
Start with test/multigpu/README.md, test/multigpu/mdla_3partition.jl, runtests.jl, and test/mdla.jl, including the MFO_TEST_MULTIGPU and MFO_TEST_MDLA gating paths. Verify the runner's multi-GPU P2P health, choose and implement the gating approach, and confirm the official suite includes the three-partition tests without changing the CPU baseline or producing errors on hosts with fewer GPUs.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Follow-up to #16. Commit 3fe8b0f added test/multigpu/ — exploratory distributed tests needing >= 3 physical GPUs — deliberately not included from runtests.jl or test/mdla.jl, since the standard suite must stay runnable on 0–2 GPU machines. This issue tracks folding them into the MDLA suite properly.
Status (2026-09-30): upstream blockers are cleared (kylebeggs/MultiDeviceLinearAlgebra.jl#21 and #23 both closed). Scope is narrowed to the fold-in, lifting the 2-partition caps in test/mdla_gpu.jl, and documenting the >= 3-GPU run as a manual pre-release check. Provisioning a CI runner is now a non-goal.
Why >= 3 partitions is worth having
Two partitions can never produce a slab cut on both faces; three can. That middle slab is the first case where MDLA's local_x ghost section holds planes from two different owners at once, so it is the first real exercise of the owner-ascending / plane-ascending ordering rule _slab_ghost_layout (src/partitioning.jl) replays from MDLA's _compute_ghost_topology. test/partitioning.jl proves this CPU-side against emulated exchange semantics; test/multigpu/mdla_3partition.jl runs it on real scatter!/reduce!.
Status: written and passing
Verified on a 9x A30 host. test/multigpu/mdla_3partition.jl passes 23/23, and the existing test/mdla.jl passes 34/34 with zero skips. Bitwise == forward parity holds at both 2 and 3 partitions — it was not loosened. The extension itself needed no changes; none of the three pre-agreed fallbacks (stream sync, CG iteration-count tolerance, Krylov.cg dispatch) were needed, and allequal(niters) passed first try.
So this is not a correctness gap — it is purely about making the coverage run as part of the MDLA suite.
The suite that already runs is capped at 2 partitions too
Beyond test/multigpu/ not being included, the tests that do run are capped below the device count. Four testsets in test/mdla_gpu.jl (:363, :387, :568, :605) loop
for nd in 1:min(NGPUS_MDLA, 2)
with NGPUS_MDLA = length(CUDA.devices()) at :9. So those distributed Krylov.cg parity, boundary_rhs, and RHS-assembly testsets can never exercise 3 partitions no matter how many GPUs the host has — the same gap, just inside the suite that already runs. Lifting these needs no new infrastructure.
Upstream blockers: cleared
Those results required a session-local workaround for kylebeggs/MultiDeviceLinearAlgebra.jl#21: MDLA's scatter!/reduce! move ghost data with direct device-to-device copyto!, which on some hosts silently returns zeros with no error. On such a host every >=2-partition test fails while single-partition tests pass, for entirely environmental reasons.
That is resolved. #21 turned out to be a host IOMMU misconfiguration, not an MDLA bug — fixed on sasquatch with intel_iommu=off + reboot, validated 36/36 peer pairs (closed 2026-07-27). MDLA additionally now probes each ordered device pair at GhostExchange construction (kylebeggs/MultiDeviceLinearAlgebra.jl#22) and host-stages any pair that fails, so a similarly broken host produces correct numbers plus a loud one-time warning instead of silent zeros. kylebeggs/MultiDeviceLinearAlgebra.jl#23 (raise MDLA's own device-count caps to NGPUS and cover cross-NUMA pairs) closed 2026-07-28. Nothing upstream blocks this any more.
Any host must still be checked before its results mean anything — the fallback is a safety net, not a fix. test/multigpu/README.md documents the hazard with a four-line check:
using CUDA
CUDA.device!(1); src = CuArray([10.0,20.0,30.0,40.0]); CUDA.synchronize()
CUDA.device!(0); dst = CUDA.zeros(Float64,4); copyto!(dst, src); CUDA.synchronize()
Array(dst) # [10,20,30,40] = healthy; [0,0,0,0] = broken P2P
Work items
- Land the MDLA fix (kylebeggs/MultiDeviceLinearAlgebra.jl#21), or confirm the runner's P2P is healthy (IOMMU/ACS is the usual culprit). — Done: #21 was a host IOMMU misconfiguration, fixed on
sasquatch; MDLA now probes each device pair and host-stages failures loudly. kylebeggs/MultiDeviceLinearAlgebra.jl#23 (raise the device-count caps upstream) is also closed. Nothing upstream blocks this any more. - Fold
test/multigpu/mdla_3partition.jlinto the MDLA suite (it is written as ordinary@testsets so it lifts verbatim) and drop the separate directory. Gating: include it from the MDLA path so it sits behind the existingMFO_TEST_MDLAgate, and rely on itsNGPUS_MP >= 3self-skip. The self-skip path is verified working — underCUDA_VISIBLE_DEVICES=0,1the suite degrades to a clean skip with no errors. - Lift the four
min(NGPUS_MDLA, 2)caps intest/mdla_gpu.jlso those testsets run at every available partition count. - Document the >= 3-GPU run as a manual pre-release check, with the P2P health check above as its preflight so a broken host is caught up front rather than discovered through MDLA's host-staging warning (or, on an MDLA predating the probe, 44 mystery failures). The Running and P2P-hazard content in
test/multigpu/README.mdneeds a new home once the directory goes —docs/pages/distributed.qmd("Running it takes CUDA, an unregistered package, and an env var") already covers the side env and the hazard, and currently points at bothtest/multigpu/mdla_3partition.jlandtest/multigpu/README.md, so those references need updating either way.
Non-goal: provisioning a >= 3-GPU CI runner. The coverage is proven by hand and the host-side P2P fault is now caught by MDLA itself; a manual pre-release check is enough, and runner work can be picked up separately if it ever becomes worth it.
Note that folding these in must not disturb the CPU baseline: 4657 pass / 0 fail / 3 broken (the three env-gated skips), confirmed unchanged by 3fe8b0f.
—
🤖 Claude cut this down from 'provision hardware' to 'move some tests'.
claude-opus-5-5[1m] (high) · claude-code 2.1.285 · unreviewed
- 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
-
perf(forest): thread the reference BlockForest path — leaf sweeps and exchange descriptor loopsĐang mởperformance
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 48/100
-
enhancement
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
Tất cả issue của RallypointOne/MatrixFreeOperators.jl
Issue tương tự
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 68/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
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
bmad-sim/BeamTracking.jl#382 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Typo in the Adjoint sectionĐang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 86/100
-
Using the test generatorĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày