Repository navigation
TransferBench v1.71.00 - #359
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.
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
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
91f99bd to
5ec784d
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical and moderate issues remain in pingpong parsing and memory access, architecture guards, NIC validation, and latency failure propagation.
7 open findings
Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… · New In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… · New Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Allow default numSubExecs for pingpong transfers
6 resolved since last review
🧠 Review effort: Lite
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical and moderate correctness issues remain in ping-pong synchronization, target guards, validation, and error propagation.
8 open findings
Ensure pingpong slot progression avoids parity-safe reuse · New In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Allow default numSubExecs for pingpong transfers
🧠 Review effort: Lite
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical and moderate correctness issues remain in pingpong execution, target handling, validation, and probe tooling.
10 open findings
Zero-subexecutor path performs invalid result processing · New Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Allow default numSubExecs for pingpong transfers Preset reference omits latency presets · New
🧠 Review effort: Lite
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved security-scan allowlist gaps and functional correctness issues remain.
12 open findings
Global .lock allowlist hides credentials in lockfiles · New Generic secret allowlist suppresses real credential detections · New Zero-subexecutor path performs invalid result processing Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Allow default numSubExecs for pingpong transfers Preset reference omits latency presets
Previously missed (3)
In code that hasn't changed since last review

tee pipeline aborts on SIGPIPE when truncated with head

.claude/skills/transferbench-debug/examples/topology-probe.sh:24
With set -o pipefail, truncating the tee pipeline with head can close the pipe while the binary is still writing; tee/the binary then exits on SIGPIPE and the script aborts before completing the probe. Use a reader that consumes the full stream (for example sed -n '1,60p') or capture first and truncate afterward.

Documented presets are not registered in presetFuncMap

.claude/skills/transferbench-run/references/presets.md:25
This reference presents these rows as runnable presets, but neither pcopy nor rwrite is registered in the current presetFuncMap (src/client/Presets/Presets.hpp:68-99), so following either command fails instead of launching a benchmark. Remove them or register the corresponding presets before documenting them here.

Packaging defaults omit gfx1250 GPU targets

CMakeLists.txt:224
Adding the target only to CMake's default list does not add it to the package build path: build_packages_local.sh passes its separate DEFAULT_GPU_TARGETS list to -DGPU_TARGETS, and that list still omits both gfx1250 and gfx1250-strict. Packages built without an explicit GPU_TARGETS override therefore will not contain the target advertised by this change; update the packaging defaults or explicitly document the scope.
🧠 Review effort: Lite
Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.
Copies standardised security scanning config from ROCm/rocm-repo-template. Co-authored-by: haribabug <haribabug@users.noreply.github.com>
4193214 to
fa551ee
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Unresolved correctness, documentation, packaging, and security-configuration issues remain.
28 open findings
Pingpong-only path dereferences null timing parameter Skip pingpong resources during validation setup Generic secret allowlist suppresses real credential detections Global .lock allowlist hides credentials in lockfiles Zero-subexecutor path performs invalid result processing Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Spin limit checked only every 1024 polls Diagnostic contains stale version 1.67 limitation Update packaged default GPU target architectures Sanity check passes expression where byte size is required Allow default numSubExecs for pingpong transfers Cmdline and dryrun arguments are reversed Quick dryrun uses invalid argument order Documented dryrun missing size argument
And 8 more that still need to be addressed.
🧠 Review effort: Lite
fa551ee to
614e3d3
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved correctness, packaging, documentation, and security-configuration issues remain, including a critical ping-pong capacity concern.
30 open findings
Pingpong capacity warning can allow hangs or watchdog failures · New Pingpong-only path dereferences null timing parameter Skip pingpong resources during validation setup Generic secret allowlist suppresses real credential detections Global .lock allowlist hides credentials in lockfiles Zero-subexecutor path performs invalid result processing Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Spin limit checked only every 1024 polls Diagnostic contains stale version 1.67 limitation Update packaged default GPU target architectures Sanity check passes expression where byte size is required Allow default numSubExecs for pingpong transfers Dryrun command omits required byte-size argument · New Cmdline and dryrun arguments are reversed
And 10 more that still need to be addressed.
🧠 Review effort: Lite
614e3d3 to
2950ba8
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
Unresolved functional, packaging, CLI-example, and documentation issues remain.
30 open findings
Pingpong capacity warning can allow hangs or watchdog failures Pingpong-only path dereferences null timing parameter Skip pingpong resources during validation setup Generic secret allowlist suppresses real credential detections Global .lock allowlist hides credentials in lockfiles Zero-subexecutor path performs invalid result processing Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Spin limit checked only every 1024 polls Diagnostic contains stale version 1.67 limitation Update packaged default GPU target architectures Sanity check passes expression where byte size is required Allow default numSubExecs for pingpong transfers Dryrun command omits required byte-size argument Cmdline and dryrun arguments are reversed
And 10 more that still need to be addressed.
🧠 Review effort: Lite
2950ba8 to
53c3358
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved critical and moderate findings remain in target gating, pingpong execution, packaging, launcher behavior, and documentation/examples.
32 open findings
GFX12 guard incorrectly enables CDNA5 XCC query on RDNA4 · New Pingpong capacity warning can allow hangs or watchdog failures Pingpong-only path dereferences null timing parameter Skip pingpong resources during validation setup Generic secret allowlist suppresses real credential detections Global .lock allowlist hides credentials in lockfiles Zero-subexecutor path performs invalid result processing Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Spin limit checked only every 1024 polls Diagnostic contains stale version 1.67 limitation Update packaged default GPU target architectures Sanity check passes expression where byte size is required Allow default numSubExecs for pingpong transfers Dry-run command omits required byte-size argument · New
And 12 more that still need to be addressed.
🧠 Review effort: Lite
53c3358 to
aaa114c
Compare
There was a problem hiding this comment.
🟡 Changes recommended
Fifteen final review comments remain unresolved, including moderate correctness, documentation, packaging, and security issues.
33 open issues
GFX12 guard incorrectly enables CDNA5 XCC query on RDNA4 Pingpong capacity warning can allow hangs or watchdog failures Pingpong-only path dereferences null timing parameter Skip pingpong resources during validation setup Generic secret allowlist suppresses real credential detections Global .lock allowlist hides credentials in lockfiles Zero-subexecutor path performs invalid result processing Ensure pingpong slot progression avoids parity-safe reuse In advanced transfer syntax,numSubExecsis never initialized because the parser only reads it in… Pingpong makes the GPU kernel dereference this destination pointer as a flag, but… Guard peer access setup to the executor's local MPI rank Prevent persistent pingpong dependency cycles from hanging Reject pingpong subindices below -1 Include pong subindex when enabling GFX subindices Synchronize packaged GPU targets with CMake defaults · New Spin limit checked only every 1024 polls Diagnostic contains stale version 1.67 limitation Update packaged default GPU target architectures Sanity check passes expression where byte size is required Allow default numSubExecs for pingpong transfers
And 13 more that still need to be addressed.
Review effort: Lite


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