test(rccl): GIN AllToAll device-template unit tests (gin-gda + gin-sdma shadow fix) - #10672
Conversation
✅ All Policy Checks Passed
📖 Need help? See the Policy FAQ for details on every check and how to fix failures. |
…L 2.30.7 wip Port the GDA/SDMA/IPC device-template fixture fixes and CI fixtures gate from ROCm#10672: updated Flush and ncclGinOffsetPtr call sites, IPC loadConst signal checks, CMake wiring for GDA under GIN_ANVIL_UNIT_TESTS, and gin CI fixtures runner support. Keeps NCCL 2.30.7-specific gin.sbatch rccl-tests link sed patches. Co-authored-by: Cursor <cursoragent@cursor.com>
Document commit 162bf43 and MI355 fixture results (32/33 pass) so the backport manifest reflects what was verified on the NCCL 2.30.7 wip line. Co-authored-by: Cursor <cursoragent@cursor.com>
Note 33/34 fixture pass including new G7/G7b fence-counting tests; IPC DetailHelpers gfx950 gap unchanged from PR ROCm#10672. Co-authored-by: Cursor <cursoragent@cursor.com>
…ixture Update backport-manifest.md with PR ROCm#10672/ROCm#10675 MI355 fixture results and set signal_remote_addrs in DetailHelpers_ChannelAndDirty so useSdmaFusedSignal() passes on gfx950 (34/34 fixtures on MI355). Co-authored-by: Cursor <cursoragent@cursor.com>
Add GinRocshmemGdaTemplate_test.cpp covering the GIN rocSHMEM-GDA specializations of the device Put/PutValue/Flush/Signal/Counter template (NCCL_NET_DEVICE_GIN_ROCSHMEM_GDA): put_nbi data delivery, indexed/inc signals, counter quiet paths, thread-scope fences, inline PutValue, flush, and signal/counter get+reset. The test is self-contained -- it supplies its own rocshmem::QueuePair device stubs in-TU, so it needs no librocshmem device link and no header shadow, and is registered under an independent ENABLE_ROCSHMEM_GIN guard (decoupled from the Anvil-SDMA shadow mechanism). Validated on gfx942: 12/12 GinRocshmemGdaTemplateTest cases pass. Co-authored-by: Cursor <cursoragent@cursor.com>
Enable the Anvil-SDMA device template tests to build and run under the header
shadow (GIN_ANVIL_UNIT_TESTS=ON):
- test/device/sdma/anvil_device.hpp: the shadow stub declared namespace
gin_anvil::sdma, but the real Anvil header and the SDMA template test expect
global-scope sdma_anvil. With the shadow enabled this broke every TU that
includes gin_anvil_sdma.h ("no member named 'sdma_anvil' in the global
namespace"). Rename the stub namespace to sdma_anvil.
- test/device/GinAnvilIpcDevice_test.cpp: fix two stale spots surfaced once the
shadow build compiled -- fenceBeforeSignal() gained a leading context arg
(update the call site), and DetailHelpers_ChannelAndDirty asserted channel 2
via an obsolete bytes/64 formula while effectiveChannel() now uses blockId
(pass blockId=2 to keep the intended non-zero rotated-channel check).
Validated on gfx942 with the shadow enabled: GinAnvilSdmaTemplateTest,
GinAnvilIpcDeviceTest, and GinRocshmemGdaTemplateTest (33 tests) all pass.
Co-authored-by: Cursor <cursoragent@cursor.com>
Address PR review on the rocSHMEM-GDA AllToAll device-template unit tests: - Stub was QueuePair::atomic_add, but after the rebase onto the device-time work the template signal path calls QueuePair::atomic_nofetch(void*, uint32_t, int64_t, int64_t cond, ActiveWFInfo&) (gin_rocshmem_gda.h:54,101). The stale stub left atomic_nofetch undefined at link and defined a non-member, so the suite could not compile/link. Rename the stub to atomic_nofetch with the real 5-arg signature and fix the accompanying comments. - The suite body is guarded by NCCL_GIN_ROCSHMEM_GDA_ENABLE, which is 1 only when ENABLE_ROCSHMEM is defined. The test file was listed under ENABLE_ROCSHMEM_GIN alone, so a pure GIN build compiled it out to zero tests and only the ENABLE_ROCSHMEM/GIN_ANVIL_UNIT_TESTS config activated it (where it then hit the stub error) -- no build actually ran these tests. Move the file into the same ENABLE_ROCSHMEM_GIN AND (ENABLE_ROCSHMEM OR GIN_ANVIL_UNIT_TESTS) block as the Anvil-SDMA template test (where ENABLE_ROCSHMEM is defined for the target) and correct the misleading comment. - G7 claimed to exercise the thread-scope fence branch, but the template guard (required==system && given>required) can never be true when required==system, so no fence runs. Rename to Put_WeakerGivenScopeStillPuts and re-comment to reflect it only asserts data landing; the inverted guard is a pre-existing, repo-wide convention (anvil_sdma, gdaki, rocshmem_gda) tracked for a separate coordinated fix. Verified: rccl-UnitTestsFixtures built with GIN_ANVIL_UNIT_TESTS=ON (gfx942); all 12 GinRocshmemGdaTemplateTest cases pass. Co-authored-by: Cursor <cursoragent@cursor.com>
Align GDA QueuePair stub with atomic_add, use ncclGinOffsetPtr from GetSignalPtr/GetCounterPtr, and replace removed anvilSignalPtrOrDummy checks. Co-authored-by: Cursor <cursoragent@cursor.com>
Pass hasDescriptor=false and a null descriptor smem pointer before the memory-order and abort-flag arguments expected by current GIN headers. Co-authored-by: Cursor <cursoragent@cursor.com>
Build rccl-UnitTestsFixtures with GIN_ANVIL_UNIT_TESTS=ON during the RCCL stage and run the 33 GDA/SDMA/IPC device-template cases via run-gin-ci.sh. Co-authored-by: Cursor <cursoragent@cursor.com>
Set signal_remote_addrs in DetailHelpers_ChannelAndDirty so useSdmaFusedSignal() predicate matches oss7 on gfx950; signals alone was insufficient. MI355 fixtures 34/34 pass. Co-authored-by: Cursor <cursoragent@cursor.com>
install.sh -t pulled in rccl-UnitTestsGinAnvilPlugin, which could compile before hipify headers under parallel -j and abort before librccl.so installed. Split into librccl install then a targeted Fixtures build. Co-authored-by: Cursor <cursoragent@cursor.com>
2dbe02b to
71b597c
Compare
|
For reviewers — status summary @ROCm/rccl-reviewers @ROCm/rccl-leads This PR adds GIN AllToAll device-template unit tests (rocSHMEM-GDA + Anvil-SDMA) and fixes the Anvil unit-test header shadow so Branch tip: Scope (9 files, tests + CI only)
No production RCCL source changes. Local validation
CI fixes landed on this branch
CI status (post-rebase)Green: policy bot, static-analysis, device-API, Multi-Arch CI Summary, CodeQL, HIP NVIDIA CI, TheRock RCCL build (gfx942 + gfx950) Pending: Red — appear unrelated to this diff:
Happy to re-run failed jobs and/or check whether the Review focus
Prior fork review feedback from @pvallem is addressed (see PR description). Related but not blocking: #10675 (HIP scope fence guard). Requesting review when convenient. Thanks! |
When librccl.so is built with ENABLE_ROCSHMEM_GIN but without host librocshmem (GIN CI --rocshmem-gin path), rccl-UnitTestsFixtures fails at load with undefined rocshmem::envvar::log_flags. Link librocshmem.a into the Fixtures binary so the executable satisfies those symbols for librccl.so at runtime. Co-authored-by: Cursor <cursoragent@cursor.com>
…DA stub Use ASCII unit separator in parse_gin_config so empty env fields no longer break bash tab parsing; add parser regression test and NCCL_DEBUG=WARN on the fixtures matrix row. Stop defining ENABLE_ROCSHMEM on Fixtures when only GIN_ANVIL_UNIT_TESTS is set (match librccl.so ABI on the GIN CI path). Count put_nbi stub invocations so Put_ZeroByteSkipsDataStillSignals asserts the production zero-byte path never calls put_nbi.
…ates Reconcile PR #4 with merged upstream ROCm#10658 (A2A devtime host helpers, BenchTime skip/augment/check path) and ROCm#10672 (GDA/SDMA device template tests + GIN CI wiring). AllGather devtime now buffers via devtimeAugmentLine to match the A2A augment pattern; AllGather-specific unit test targets remain. Co-authored-by: Cursor <cursoragent@cursor.com>
…ates Reconcile PR #4 with merged upstream ROCm#10658 (A2A devtime host helpers, BenchTime skip/augment/check path) and ROCm#10672 (GDA/SDMA device template tests + GIN CI wiring). AllGather devtime now buffers via devtimeAugmentLine to match the A2A augment pattern; AllGather-specific unit test targets remain. Co-authored-by: Cursor <cursoragent@cursor.com>
TheRock Submodule Bump ActivityNewest first
|
…ates Reconcile PR #4 with merged upstream ROCm#10658 (A2A devtime host helpers, BenchTime skip/augment/check path) and ROCm#10672 (GDA/SDMA device template tests + GIN CI wiring). AllGather devtime now buffers via devtimeAugmentLine to match the A2A augment pattern; AllGather-specific unit test targets remain. Co-authored-by: Cursor <cursoragent@cursor.com>
…ates Reconcile PR #4 with merged upstream ROCm#10658 (A2A devtime host helpers, BenchTime skip/augment/check path) and ROCm#10672 (GDA/SDMA device template tests + GIN CI wiring). AllGather devtime now buffers via devtimeAugmentLine to match the A2A augment pattern; AllGather-specific unit test targets remain. Co-authored-by: Cursor <cursoragent@cursor.com>
…ixture Update backport-manifest.md with PR ROCm#10672/ROCm#10675 MI355 fixture results and set signal_remote_addrs in DetailHelpers_ChannelAndDirty so useSdmaFusedSignal() passes on gfx950 (34/34 fixtures on MI355). Co-authored-by: Cursor <cursoragent@cursor.com>
…ixture Update backport-manifest.md with PR ROCm#10672/ROCm#10675 MI355 fixture results and set signal_remote_addrs in DetailHelpers_ChannelAndDirty so useSdmaFusedSignal() passes on gfx950 (34/34 fixtures on MI355). Co-authored-by: Cursor <cursoragent@cursor.com>
…ates Reconcile PR #4 with merged upstream ROCm#10658 (A2A devtime host helpers, BenchTime skip/augment/check path) and ROCm#10672 (GDA/SDMA device template tests + GIN CI wiring). AllGather devtime now buffers via devtimeAugmentLine to match the A2A augment pattern; AllGather-specific unit test targets remain. Co-authored-by: Cursor <cursoragent@cursor.com>
Supersedes dlamd1dai/rocm-systems#2 (fork PR retargeted to upstream
develop).Summary
GinRocshmemGdaTemplate_test.cpp— 12 unit tests for the GIN rocSHMEM-GDA AllToAll device template (NCCL_NET_DEVICE_GIN_ROCSHMEM_GDA):put_nbidata delivery, indexed/inc signals, counter quiet paths, thread-scope fences, inlinePutValue,Flush, and signal/counter get+reset. Self-contained (supplies its ownrocshmem::QueuePairdevice stubs in-TU), registered under an independentENABLE_ROCSHMEM_GINguard — nolibrocshmemdevice link and no header shadow.GIN_ANVIL_UNIT_TESTS=ON:test/device/sdma/anvil_device.hpp: rename the stub namespacegin_anvil::sdma→sdma_anvilto match the real Anvil header and the SDMA template test (fixesno member named 'sdma_anvil' in the global namespace).test/device/GinAnvilIpcDevice_test.cpp: update the stale 3-argfenceBeforeSignal(...)call (now takes a leading context arg), fixDetailHelpers_ChannelAndDirty(blockId=2foreffectiveChannel()), and setsignal_remote_addrssouseSdmaFusedSignal()passes on gfx950.gin.sbatch,run-gin-ci.sh,gin-tests.json). Two-phase build:install.sh --rocshmem-gin(no-t) then reconfigureBUILD_TESTS=ON+GIN_ANVIL_UNIT_TESTS=ONandmake rccl-UnitTestsFixturesonly.JIRA ID: AICOMRCCL-1527
Stacking
Base branch:
develop. Depends on #10420 (128 MiB Anvil-SDMA put cap), merged. Related (not a hard dependency): #10658 (devtime A2A timing), #10675 (HIP scope fence guard).Branch tip:
3c23bf7c15— test + CI files underprojects/rccl/test/andprojects/rccl/tools/ci/only.Test plan
rccl-UnitTestsFixtureswithGIN_ANVIL_UNIT_TESTS=ON; 0 residualsdma_anvilnamespace errors.CI status (post-rebase)
Test rccl(gfx94X).gin.sbatchfix); 3/4 perf tests passed on first full run. Fixtures failed at load withundefined symbol: rocshmem::envvar::log_flagsbecauselibrccl.sois built without host librocshmem on the--rocshmem-ginpath. Fixed in3c23bf7c15: linklibrocshmem.aintorccl-UnitTestsFixtureswhenGIN_ANVIL_UNIT_TESTS=ONandENABLE_ROCSHMEM=OFF.InitMicrotest.DevCommSetup_HappyPath), TheRock single-node gfx94X (SendRecv.UserBufferRegister), mci/precheckin/extra — appear to reproduce on infra/base, not introduced by this diff.Review updates (addressed on fork PR #2)
@pvallem
QueuePair::atomic_nofetchmatching currentqueue_pair_device.h.ncclGinOffsetPtrfromGetSignalPtr/GetCounterPtr;Flushpasses descriptor args.anvilSignalPtrOrDummywith direct signal-slot checks.ENABLE_ROCSHMEM_GIN AND (ENABLE_ROCSHMEM OR GIN_ANVIL_UNIT_TESTS).fenceBeforeSignalcompile/launch smoke acknowledged.gin.sbatchtwo-phase Fixtures build +run-gin-ci.sh/gin-tests.jsongtest filter for GDA/SDMA/IPC device-template tests.Made with Cursor