TransferBench v1.71.00 - #359
AtlantaPepsi wants to merge 13 commits into
Conversation
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Unresolved critical and moderate correctness, portability, parsing, and build-target issues remain.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 4
Open (8)
Restrict GetXccId CDNA5 instruction to CDNA5 targets · New Include pong subindex when enabling GFX subindices · New Emit advanced transfer fields before the pong token · New Align TDM device guard with supported architectures · New Avoid indexing stale or empty transfer results after failure · New Validate NIC message size for the selected port · New Fix pingpong timing scaling by subiterations · New Reject multi-device pingpong memory halves · New
What changed in this PR
Adds pingpong latency testing, NIC message-size validation, logical CU reporting fixes, and gfx1250-strict support.
Changes:
- Adds pingpong parsing, execution, timing, and latency presets.
- Adds NIC
max_msg_szvalidation and reporting. - Updates GPU architecture and TDM handling.
| File | Review summary |
|---|---|
src/header/TransferBench.hpp |
Critical and moderate issues in XCC handling, pingpong validation, NIC limits, subindex selection, dump parsing, and timing scaling. |
src/header/tdmCopy.h |
Critical architecture guard mismatch enables unsupported TDM targets. |
src/client/Utilities.hpp |
Reviewed result and topology utilities. |
src/client/Topology.hpp |
Reviewed NIC message-size reporting. |
src/client/Presets/Presets.hpp |
Reviewed latency preset registration. |
src/client/Presets/Latency.hpp |
Moderate issues with failed-run result handling and diagonal pair measurement. |
src/client/EnvVars.hpp |
Reviewed pingpong configuration variables. |
src/client/Client.cpp |
Reviewed pingpong transfer display updates. |
docs/install/build_from_source.rst |
Reviewed strict GPU target documentation. |
CMakeLists.txt |
Moderate issue: package build targets omit gfx1250-strict. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| exeInfo.totalSubExecs += t.numSubExecs; | ||
| } else { | ||
| exeInfo.totalPingpong ++; | ||
| } | ||
| exeInfo.useSubIndices |= (t.exeSubIndex != -1 || (t.exeDevice.exeType == EXE_GPU_GFX && !cfg.gfx.prefXccTable.empty())); |
| auto singleMemOrNull = [](vector<MemDevice> const& mems) { | ||
| if (mems.empty()) return MemDevice{MEM_NULL, 0, 0}; | ||
| return mems[0]; | ||
| }; |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Unresolved correctness issues remain in ping-pong execution, validation, parsing, and target gating.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 5
Open (9)
Run unpinned pingpong parameters on only one XCC · New Align TDM device guard with supported architectures Emit advanced transfer fields before the pong token Include pong subindex when enabling GFX subindices Restrict GetXccId CDNA5 instruction to CDNA5 targets Reject multi-device pingpong memory halves Fix pingpong timing scaling by subiterations Validate NIC message size for the selected port Avoid indexing stale or empty transfer results after failure
e37e7de to
07e9f67
Compare
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Unresolved critical and moderate issues remain in pingpong execution, validation, result handling, and architecture gating.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 7
Open (12)
Reject pingpong subindices below -1 · New Prevent persistent pingpong dependency cycles from hanging · New Run unpinned pingpong parameters on only one XCC Align TDM device guard with supported architectures Emit advanced transfer fields before the pong token Include pong subindex when enabling GFX subindices Restrict GetXccId CDNA5 instruction to CDNA5 targets Allow default numSubExecs for pingpong transfers · New Reject multi-device pingpong memory halves Fix pingpong timing scaling by subiterations Validate NIC message size for the selected port Avoid indexing stale or empty transfer results after failure
| #else | ||
| useSubIndexCount[exe]++; | ||
| int numSubIndices = GetNumExecutorSubIndices(exe); | ||
| if (subIndex >= numSubIndices) { |
| dim3 const gridSize(xccDim, numPingpong, 1); | ||
| dim3 const blockSize(1); |
| if (t.numSubExecs <= 0) | ||
| errors.push_back({ERR_FATAL, "Transfer %d: # of subexecutors must be positive", i}); | ||
| else | ||
| else if (isPingpong) { | ||
| if (t.numSubExecs != 1) | ||
| errors.push_back({ERR_WARN, |
07e9f67 to
91f99bd
Compare
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Unresolved correctness issues affect ping-pong execution, target guards, NIC validation, and package builds.
Review effort: Lite
Findings: 7
Open (11)
Guard peer access setup to the executor's local MPI rank · New Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Run unpinned pingpong parameters on only one XCC Align TDM device guard with supported architectures Include pong subindex when enabling GFX subindices Restrict GetXccId CDNA5 instruction to CDNA5 targets Propagate RunTransfers failures from latency presets · New Allow default numSubExecs for pingpong transfers Reject multi-device pingpong memory halves Validate NIC message size for the selected port
| } else if (partnerMem.memIndex != exeDevice.exeIndex) { | ||
| if (System::Get().IsVerbose()) { | ||
| System::Get().Log("[INFO] Enabling pingpong peer access: GPU %d -> GPU %d\n", | ||
| exeDevice.exeIndex, partnerMem.memIndex); | ||
| } | ||
| ERR_CHECK(EnablePeerAccess(exeDevice.exeIndex, partnerMem.memIndex)); |


Motivation
Technical Details
Test Plan
HSA_DISABLE_GFX12_STRICT=0 ./TransferBenchoutput of gfx1250-strict targetSHOW_ITERATIONSoutput CU ID againstCU_MASKbitsp2p_latencypreset: in/cross-domain, and AMD and Nvidia platformTest Result
p2p_latency example output
Concurrent transfer + pingpong hybrid run example output
Submission Checklist