文件最后提交记录最后更新时间
新增SIMD、SIMT混合编程场景下的SIMT RMA接口 Co-authored-by: mizuki_p<wanghan157@huawei.com> # message auto-generated for no-merge-commit merge: !252 merge simt_putget into master 新增SIMD、SIMT混合编程场景下的SIMT RMA接口 Created-by: mizuki_p Commit-by: mizuki_p Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增simd simt混合编程情况下的simt rma接口 新增接口主体上与simd的对应接口保持一致,主要区别如下: 1. simt的接口使用__simt_callee__ inline进行修饰,而非__aicore__ 2. 所有simt接口与simd接口命名保持一致,但为了避免函数重定义问题,simt接口放置于simt名空间下 3. 当前编译器限制__simt_callee__修饰的simt vf函数无法传递对象类型的参数,目前simt的put get接口不支持传入AscendC::LocalTensor和AscendC::GlobalTensor类型的重载 此次PR主要新增的接口如下: ```cpp 1. aclshmem_my_pe 2. aclshmem_n_pes 3. aclshmem_##TYPE##_p、aclshmem_int32_g 4. aclshmemx_mte_get_nbi、aclshmemx_mte_put_nbi 5. aclshmem_getmem、aclshmem_putmem 6. aclshmem_##TYPE##_get、aclshmem_##TYPE##_put 7. aclshmem_get##BITS##、aclshmem_put##BITS## ``` 此外,新增的SIMT接口默认不启用,编译时需要指定--enable_simt进行开启 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [\[Task|任务\]: SHMEM支持SIMT方式的RMA接口](https://gitcode.com/cann/shmem/issues/198) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 暂新增了两个样例 simt_demo和simt_mem_demo用于测试功能的正确性 simt_rma_scalar样例通过截图 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/652f7a73-fdbd-4b53-8249-8c821c43dad8/image.png 'image.png') simt_rma样例通过截图 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增了两个样例(simt_rma、simt_rma_scalar)的README文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!2521 个月前
新增SIMD、SIMT混合编程场景下的SIMT RMA接口 Co-authored-by: mizuki_p<wanghan157@huawei.com> # message auto-generated for no-merge-commit merge: !252 merge simt_putget into master 新增SIMD、SIMT混合编程场景下的SIMT RMA接口 Created-by: mizuki_p Commit-by: mizuki_p Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增simd simt混合编程情况下的simt rma接口 新增接口主体上与simd的对应接口保持一致,主要区别如下: 1. simt的接口使用__simt_callee__ inline进行修饰,而非__aicore__ 2. 所有simt接口与simd接口命名保持一致,但为了避免函数重定义问题,simt接口放置于simt名空间下 3. 当前编译器限制__simt_callee__修饰的simt vf函数无法传递对象类型的参数,目前simt的put get接口不支持传入AscendC::LocalTensor和AscendC::GlobalTensor类型的重载 此次PR主要新增的接口如下: ```cpp 1. aclshmem_my_pe 2. aclshmem_n_pes 3. aclshmem_##TYPE##_p、aclshmem_int32_g 4. aclshmemx_mte_get_nbi、aclshmemx_mte_put_nbi 5. aclshmem_getmem、aclshmem_putmem 6. aclshmem_##TYPE##_get、aclshmem_##TYPE##_put 7. aclshmem_get##BITS##、aclshmem_put##BITS## ``` 此外,新增的SIMT接口默认不启用,编译时需要指定--enable_simt进行开启 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [\[Task|任务\]: SHMEM支持SIMT方式的RMA接口](https://gitcode.com/cann/shmem/issues/198) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 暂新增了两个样例 simt_demo和simt_mem_demo用于测试功能的正确性 simt_rma_scalar样例通过截图 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/652f7a73-fdbd-4b53-8249-8c821c43dad8/image.png 'image.png') simt_rma样例通过截图 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增了两个样例(simt_rma、simt_rma_scalar)的README文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!2521 个月前
新增SIMD、SIMT混合编程场景下的SIMT RMA接口 Co-authored-by: mizuki_p<wanghan157@huawei.com> # message auto-generated for no-merge-commit merge: !252 merge simt_putget into master 新增SIMD、SIMT混合编程场景下的SIMT RMA接口 Created-by: mizuki_p Commit-by: mizuki_p Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 新增simd simt混合编程情况下的simt rma接口 新增接口主体上与simd的对应接口保持一致,主要区别如下: 1. simt的接口使用__simt_callee__ inline进行修饰,而非__aicore__ 2. 所有simt接口与simd接口命名保持一致,但为了避免函数重定义问题,simt接口放置于simt名空间下 3. 当前编译器限制__simt_callee__修饰的simt vf函数无法传递对象类型的参数,目前simt的put get接口不支持传入AscendC::LocalTensor和AscendC::GlobalTensor类型的重载 此次PR主要新增的接口如下: ```cpp 1. aclshmem_my_pe 2. aclshmem_n_pes 3. aclshmem_##TYPE##_p、aclshmem_int32_g 4. aclshmemx_mte_get_nbi、aclshmemx_mte_put_nbi 5. aclshmem_getmem、aclshmem_putmem 6. aclshmem_##TYPE##_get、aclshmem_##TYPE##_put 7. aclshmem_get##BITS##、aclshmem_put##BITS## ``` 此外,新增的SIMT接口默认不启用,编译时需要指定--enable_simt进行开启 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [\[Task|任务\]: SHMEM支持SIMT方式的RMA接口](https://gitcode.com/cann/shmem/issues/198) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 暂新增了两个样例 simt_demo和simt_mem_demo用于测试功能的正确性 simt_rma_scalar样例通过截图 ![image.png](https://raw.gitcode.com/user-images/assets/8546182/652f7a73-fdbd-4b53-8249-8c821c43dad8/image.png 'image.png') simt_rma样例通过截图 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 新增了两个样例(simt_rma、simt_rma_scalar)的README文件 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!2521 个月前
整改部分样例的文档和脚本环境变量 Co-authored-by: hbhdhd<luxianbin1@huawei.com> # message auto-generated for no-merge-commit merge: !269 merge docs into master 整改部分样例的文档和脚本环境变量 Created-by: hbhdhd Commit-by: hbhdhd Merged-by: cann-robot Description: ## 描述 修改环境变量名称不一致问题。 **问题**:代码读取的环境变量是 SHMEM_UID_SESSION_ID,部分文档和脚本中使用的是 ACLSHMEM_UID_SESSION_ID。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #123--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联Issue [#209](https://gitcode.com/cann/shmem/issues/209) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 更新了相关示例的脚本和 README 文件。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/shmem!2691 个月前
README.md

样例介绍

本样例旨在展示 SIMD 与 SIMT 混合编译模式下,SIMT 远程内存访问(RMA)接口的典型使用方法。此样例为单个标量的传输。该类接口主要包含以下两种形式:

  1. __simt_callee__ inline void aclshmem_{NAME}_p(__gm__ TYPE *dst, const TYPE value, int pe)
  2. __simt_callee__ inline void aclshmem_{NAME}_g(__gm__ TYPE *dst, const TYPE value, int pe)

上述接口名称中的占位符 {NAME} 可选值如下表所示:

占位符 可选值
{NAME} half, float, int8, int16, int32, int64, uint8, uint16, uint32, uint64, char, bfloat16

这两种接口的核心功能为实现单标量或小段数据传输:

  • _p 接口:将指定的标量数值直接写入到指定计算单元(PE)的目标内存地址中。
  • _g 接口:从指定计算单元(PE)的源内存地址中读取单个标量数值。

样例执行流程

本样例通过以下流程演示 RMA 单标量相关接口的具体工作机制:

  1. 环境初始化:首先获取当前计算单元的编号(mype)并计算出下一个 PE 的编号作为目标对端。
  2. PUT(写)操作演示:当前 PE 调用写入接口(aclshmem_int32_p),将目标 PE 编号数值,作为标量直接写入至目标 PE 对应的对称内存中。
  3. GET(读)操作演示:当前 PE 调用读取接口(aclshmem_int32_g),从目标 PE 的对称内存中,将存放的标量数值拉取回当前 PE,并存储在本地内存中。
  4. 结果校验:通信操作完成后,各 PE 将自动比对内存中的数据,验证数据传输的正确性。

支持的设备

  • Ascend950

使用方式

  1. 编译项目
    shmem/ 根目录下执行编译脚本:

    bash scripts/build.sh -examples -enable_simt -soc_type Ascend950
    
  2. 运行 simt_rma_scalar 示例程序
    进入示例目录并执行运行脚本:

    cd examples/simt_rma_scalar
    bash scripts/run.sh