[object Object] 是异步远程读原语。它启动一次从远端GM到本地GM的传输,并立即返回 [object Object]。
数据流:
[object Object] → DMA引擎 → [object Object]
[object Object]:[object Object](默认)[object Object](Ascend 950PR/Ascend 950DT,仅NPU_ARCH 3510)
[object Object]
声明于 [object Object]:
[object Object] 是引擎无关的会话对象。使用 [object Object] 构建一次后,传递给所有异步调用和事件等待。模板参数 [object Object] 在编译期选择DMA后端,使代码对未来引擎(CCU等)保持前向兼容。
使用 [object Object] 中的 [object Object]。
该函数有两个重载——分别用于SDMA和URMA,参数列表不同。
[object Object]
URMA不需要 [object Object]——轮询通过 [object Object]/[object Object] 硬件原语直接操作。
[object Object][object Object]- SDMA和URMA路径均要求源tensor为扁平连续的逻辑一维
- SDMA workspace必须是由主机侧
[object Object]分配的有效GM指针 - URMA workspace必须是由主机侧
[object Object]分配的有效GM指针 - URMA仅在NPU_ARCH 3510(Ascend 950PR/Ascend 950DT)上可用
- URMA要求CANN Toolkit >= 9.1.0
- 传给
[object Object]的对称数据缓冲区必须由大页内存支撑(使用[object Object]分配)。底层MR注册要求大页背景;[object Object]在小尺寸分配时可能静默回退到4KB小页,导致注册失败
若不满足一维连续要求,当前实现返回无效async event([object Object])。
[object Object] 不是用于传输数据负载的暂存缓冲区。
它被转换为 [object Object],用作临时UB工作区,用于:
- 写入/读取SDMA控制字(flag、sq_tail、channel_info)
- 轮询事件完成标志
- 完成时提交队列尾部
实际数据路径为远端GM → DMA引擎 → 本地GM;[object Object] 仅用于控制和同步元数据。
- 必须是
[object Object]类型 - 必须是UB/Vec tile(
[object Object]) - 可用字节数至少为
[object Object](8字节)
推荐使用:[object Object](256Byte)。
不同引擎的底层完成机制不同,但用户侧的quiet语义行为一致:
SDMA:
[object Object]仅提交数据传输SQE,flag SQE延迟到[object Object]时提交,通过轮询flag判断完成。URMA:
[object Object]立即提交RDMA READ WQE并敲门铃。[object Object]通过轮询Completion Queue(CQ)等待所有预期的CQE被消费。[object Object]—阻塞,直到自上次Wait以来所有已发出的异步操作全部完成
这意味着多次 [object Object] 调用后,只需对最后一个返回的 [object Object] 调用一次 [object Object],即可等待所有pending操作完成(类似shmem的quiet语义)。
wait成功后,所有已发出的 [object Object] 读入数据均已全部就绪。