样例介绍【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem本样例旨在展示 SIMD 与 SIMT 混合编译模式下SIMT 远程内存访问RMA接口的典型使用方法。该类接口主要包含以下三种形式__simt_callee__ inline void aclshmem_{NAME}_{op}(__gm__ TYPE *dst, __gm__ TYPE *src, uint32_t elem_size, int32_t pe)__simt_callee__ inline void aclshmem_{op}{BITS}(__gm__ void *dst, __gm__ void *src, size_t nelems, int32_t pe)__simt_callee__ inline void aclshmem_{op}mem(__gm__ void *dst, __gm__ void *src, uint32_t elem_size, int32_t pe)上述接口名称中的占位符{}可选值如下表所示占位符可选值{op}put,get{NAME}half,float,int8,int16,int32,int64,uint8,uint16,uint32,uint64,char,bfloat16{BITS}8,16,32,64,128这三种接口的核心功能均为实现连续内存区域的数据传输其区别在于数据长度的指定方式第一种接口基于每个传输元素的具体数据类型如half、float等进行描述。第二种接口基于每个传输元素的比特位大小如8、16等进行描述。第三种接口直接指定需要传输的总内存字节大小。样例执行流程本样例通过以下流程演示 RMA 接口的具体工作机制环境初始化每个计算单元PE初始化 3 块大小相同的对称内存。其中第一块内存的数据初始化为[my_pe 0, ..., my_pe size - 1]第二块和第三块内存的数据初始化为-1。GET 操作演示每个 PE 均调用get接口将逻辑上属于上一个 PE的第一块内存中的数据拉取并写入至自身的第二块内存中。PUT 操作演示每个 PE 均调用put接口将自身第一块内存中的数据推送并写入至逻辑上属于下一个 PE的第三块内存中。结果校验通信操作完成后各 PE 将自动比对内存中的数据验证数据传输的正确性。支持的设备Ascend950使用方式编译项目在shmem/根目录下执行编译脚本bash scripts/build.sh -examples -enable_simt -soc_type Ascend950运行simt_rma示例程序进入示例目录并执行运行脚本cd examples/simt_rma bash scripts/run.sh【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考