Skip to main content

RMA Signal

MCCL 提供一组面向主机侧单边同步场景的 RMA signal 接口:

  • mcclPutSignal
  • mcclSignal
  • mcclWaitSignal

这组接口建立在对称窗口之上,适合以下场景:

  • 向对端已注册窗口写入数据后立即通知对端
  • 只发送 signal,不搬运数据
  • 用 signal 作为主机侧阶段同步原语

前置条件

使用前建议满足以下条件:

  1. 通信器已经创建完成
  2. 通过 mcclCommQueryProperties 确认 hostRmaSupport
  3. 对端已通过 mcclCommWindowRegister 注册对称窗口
  4. 相关 rank 对 sigIdx / ctx 的语义达成一致

PutSignal

mcclPutSignal 会先把本地缓冲区写入对端窗口,再发出 signal。

mcclPutSignal(localbuff, count, datatype,
peer, peerWin, peerWinOffset,
sigIdx, ctx, flags, comm, stream);

适用场景:

  • 发送 payload 并立即通知消费者
  • 用于轻量的生产者/消费者同步

Signal

mcclSignal 只发出 signal,不搬运 payload。

mcclSignal(peer, sigIdx, ctx, flags, comm, stream);

适用场景:

  • 单独通知某个阶段已经完成
  • 把数据搬运和控制信号拆开

WaitSignal

mcclWaitSignal 等待一个或多个 signal 描述符满足。

mcclWaitSignalDesc_t descs[2];
descs[0] = { .opCnt = 1, .peer = prevRank, .sigIdx = 0, .ctx = 0 };
descs[1] = { .opCnt = 1, .peer = prevRank, .sigIdx = 1, .ctx = 0 };
mcclWaitSignal(2, descs, comm, stream);

其中每个 mcclWaitSignalDesc_t 包含:

  • opCnt
  • peer
  • sigIdx
  • ctx

使用建议

  • sigIdx 当作协议的一部分来设计,避免不同阶段复用同一编号
  • 将窗口注册、RMA signal 调用和后续消费逻辑放在清晰的生命周期内管理
  • 如果平台不支持 hostRmaSupport,优先回退到传统 Send/Recv 或 collectives

参考示例:examples/08_rma/01_signal