Skip to content

feat: CPU proxy RDMA for EP on rail-isolated clusters (v3-clean) - #7

Open
itej89 wants to merge 1 commit into
mainfrom
feat/ibgda-proxy-v3-clean
Open

feat: CPU proxy RDMA for EP on rail-isolated clusters (v3-clean)#7
itej89 wants to merge 1 commit into
mainfrom
feat/ibgda-proxy-v3-clean

Conversation

@itej89

@itej89 itej89 commented Aug 12, 2026

Copy link
Copy Markdown
Owner

Summary

  • CPU proxy RDMA transport for EP on rail-isolated clusters where GPU doorbells don't work
  • Per-NIC proxy threads with targeted quiet (31-41 GB/s dispatch, 66-73 GB/s combine on AINIC)
  • Gated behind MORI_USE_IBGDA_PROXY=1 — zero behavior change without the flag
  • Clean PR: only proxy-related files, no benchmark/tuning config noise

Files (22 files, proxy only)

  • New: proxy/{types,thread,device_primitives}.hpp, proxy_thread.cpp
  • Modified: shmem_ibgda_kernels.hpp, internal.hpp, init.cpp, context.cpp, symmetric_memory.cpp, ionic.cpp
  • Tests + tools

For side-by-side comparison with v6 (PR #5)

🤖 Generated with Claude Code

Add CPU proxy transport for IBGDA operations on clusters where GPU
doorbells don't work. Per-NIC proxy threads poll a host-pinned ring
buffer and execute ibv_post_send on behalf of the GPU.

- Per-NIC proxy threads with targeted quiet
- Agreed-rail QP routing: max(localGpu, peerLocalGpu) % numNics
- Signal delivery: RDMA_WRITE for data, SEND_WITH_IMM for barriers
- Per-NIC MR registration for rail-isolated fabric
- Gated behind MORI_USE_IBGDA_PROXY=1

Verified: 31-41 GB/s dispatch, 66-73 GB/s combine on AINIC cluster.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
Check wc.status first — on error, opcode may be garbage. Also adds
null-check on atomic target address from the SEND_WITH_IMM payload.

Addresses PR ROCm#558 review comments #1 and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 pushed a commit that referenced this pull request Aug 27, 2026
- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>
itej89 added a commit that referenced this pull request Aug 27, 2026
* fix: null-check atomic target address in proxy DrainCq

Guard against dereferencing a null pointer from the SEND_WITH_IMM
payload. The address comes from the wire — skip the atomic if zero.

Addresses PR ROCm#558 review comments #1 and #7 (wc.status check was
already implemented in the current code).

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: check wc.status before opcode, use MORI logger in proxy

- Check wc.status first in DrainCq — on error, opcode may be garbage
- Null-check atomic target address from SEND_WITH_IMM payload
- Replace fprintf with MORI_LOG_ERROR in proxy_thread.cpp
- Replace fprintf with MORI_APP_INFO in init.cpp proxy log line

Addresses PR ROCm#558 review comments #1, #3, and #7.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Tej Kiran <kiran.tej@amd.com>
Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant