RMA Signal
MCCL 提供一组面向主机侧单边同步场景的 RMA signal 接口:
mcclPutSignalmcclSignalmcclWaitSignal
这组接口建立在对称窗口之上,适合以下场景:
- 向对端已注册窗口写入数据后立即通知对端
- 只发送 signal,不搬运数据
- 用 signal 作为主机侧阶段同步原语
前置条件
使用前建议满足以下条件:
- 通信器已经创建完成
- 通过
mcclCommQueryProperties确认hostRmaSupport - 对端已通过
mcclCommWindowRegister注册对称窗口 - 相关 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 包含:
opCntpeersigIdxctx
使用建议
- 把
sigIdx当作协议的一部分来设计,避免不同阶段复用同一编号 - 将窗口注册、RMA signal 调用和后续消费逻辑放在清晰的生命周期内管理
- 如果平台不支持
hostRmaSupport,优先回退到传统Send/Recv或 collectives
参考示例:examples/08_rma/01_signal

