Ascend Send Ordering

导言

之前学习 Data-as-Flag 时,我们讨论过把 flag 塞进数据块:每个 512 B 块中,480 B 是有效数据,32 B 用来证明“这一块已经到达”。现在希望减少这部分控制开销,改成“前面 relaxed order 发送,最后一个 strong order”。

这个改动的核心,是把“每块都带证明”改成“用队列末尾的有序操作,为前面一批传输提供完成证明”。 但必须解释清楚:最后一个是什么、保证覆盖哪条队列、接收方如何得知完成,以及何时可以复用 buffer。本文沿实际代码逐层回答。

Read more

Data-as-Flag Communication

导言

我最初从外部技术资料了解到 Data-as-Flag 时,直觉上把它理解为三种省掉独立完成通知的方法:把 flag 塞进数据块、用数据校验值确认整批到达,或者先用特殊值填满接收区,再观察它是否被真实数据覆盖。

顺着这三个方向检查 NVIDIA 的公开资料后,答案很明确:NVIDIA 不但有相同思路,NCCL 的 LL/LL128 已经长期使用内嵌 flag;NCCL 2.31.2 的 LLA2A 又把它做成了面向低时延 All-to-All 的 payload + epoch 原子槽位。不过,公开实现更偏好显式 epoch,而不是让任意 payload 或 checksum 单独承担正确性。

Read more