CANN/shmem SIMT RMA UB2GM示例

📅2026/7/12 15:13:33 👁️次浏览
CANN/shmem SIMT RMA UB2GM示例
样例介绍【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem本样例旨在展示 SIMD 与 SIMT 混合编译模式下SIMT 远程内存访问RMA接口使用 UB 作为中转缓冲区进行数据搬运的典型方法。样例代码通过__simt_vf__函数在 Device 侧申请 UB 数组并调用 SIMT RMA NBI 接口在 GM 与 UB 之间完成数据传输。本样例主要演示以下接口形式simt::aclshmem_int32_get_nbi(__ubuf__ int32_t *dst, __gm__ int32_t *src, uint32_t elem_size, int32_t pe); simt::aclshmem_int32_put_nbi(__gm__ int32_t *dst, __ubuf__ int32_t *src, uint32_t elem_size, int32_t pe);其中参数说明dst目标地址get_nbi中为 UB 地址put_nbi中为 GM 地址src源地址get_nbi中为 GM 地址put_nbi中为 UB 地址elem_size传输的int32_t元素个数pe目标或源 PE 编号样例执行流程本样例通过以下流程演示 UB 到 GM 的 RMA 数据路径环境初始化每个 PE 初始化 3 块大小相同的对称内存。其中origin数据初始化为[my_pe 0, ..., my_pe size - 1]res_prev和res_next初始化为-1。本地 GM 到 UB每个 PE 使用aclshmem_int32_get_nbi将自身origin中的数据读取到 UB 缓冲区。UB 到远端 GM每个 PE 使用aclshmem_int32_put_nbi将 UB 缓冲区中的数据写入逻辑上属于下一个 PE 的res_next。远端 GM 到 UB每个 PE 使用aclshmem_int32_get_nbi将逻辑上属于上一个 PE 的origin数据读取到 UB 缓冲区。UB 到本地 GM每个 PE 使用aclshmem_int32_put_nbi将 UB 缓冲区中的数据写入自身res_prev。结果校验通信操作完成后各 PE 将数据拷贝回 Host 并自动校验传输结果。支持的设备Ascend950目录结构examples/simt_rma_ub2gm/ ├── CMakeLists.txt ├── README.md ├── main.cpp └── run.sh使用方式编译项目在shmem/根目录下执行编译脚本bash scripts/build.sh -examples -enable_simt -soc_type Ascend950运行 simt_rma_ub2gm 示例程序进入示例目录并执行运行脚本cd examples/simt_rma_ub2gm bash run.shrun.sh默认启动 2 个独立进程每个进程对应一个 PE并使用build/bin/simt_rma_ub2gm执行样例。查看结果样例运行结束后会打印各 PE 的origin、res_prev、res_next数据摘要。若校验通过会输出类似如下日志[SUCCESS] PE 0: Verification passed for RMA transfers. [SUCCESS] PE 1: Verification passed for RMA transfers.【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考