已合并
新增 SIMT 协作组 grid_group #4795
louyuxuan创建于 20 天前
新增 SIMT 协作组 grid_group #4795
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 louyuxuan 的贡献)atomgit-bot
20 天前 评论:
20 天前 评论:
变更摘要
本 PR 新增 SIMT 协作组 grid_group(关联 Issue #1391),支持对整张 grid 上的所有线程块进行跨块同步。核心是在 cooperative_groups.h 中声明 grid_group 类并新增 group_type::grid_group_type 枚举值,在 cooperative_groups_impl.h 中实现其全部接口:grid_group::sync() 基于参数基址前偏移 32 字节的全局同步计数器(高 32 位记录栅栏阶段号、低 32 位统计到达的 block 数,配合 asc_atomic_add 与自旋等待实现可重复的跨 block 屏障),并提供 num_blocks()、num_threads()、size()、block_rank()、thread_rank()、dim_blocks()、group_dim()、block_index()、is_valid() 等查询接口以及入口函数 this_grid();同时让 thread_group 基类的 size()、thread_rank()、sync() 多态分发支持 grid_group_type。测试侧新增覆盖 grid_group 各接口及同步计数器行为(单 block 不触碰计数器、block 0/非 0 释放、重复屏障推进阶段号)的用例,并在编译桩中补充 __cce_simt_get_para_base_imp() 的实现以支撑测试。
主要改动
- 新增
grid_group类与枚举值: 在cooperative_groups.h中声明grid_group(继承thread_group,声明this_grid()友元),并在group_type中新增grid_group_type;cooperative_groups_impl.h中新增this_grid()入口及各成员函数实现,thread_group基类的size()、thread_rank()、sync()增加grid_group_type分派分支。 - 实现跨 block 同步屏障
grid_group::sync(): 通过details::get_grid_sync_counter()获取参数基址前 4×8 字节处的 64 位同步计数器,利用低 32 位到达计数与高 32 位阶段号(grid_sync_counter_phase_shift等常量)配合asc_atomic_add原子操作和阶段自旋等待实现可重复的 grid 级sync(),并在同步前后以asc_threadfence()/asc_syncthreads()保证内存可见性。 - 新增 grid 维度与秩查询接口: 实现
grid_group::num_blocks()(由gridDim计算)、num_threads()、size()、block_rank()、thread_rank()(按 block 序展开的全局线程秩)、dim_blocks()/group_dim()/block_index()等静态接口,并新增is_valid()。 - 新增测试用例覆盖
grid_group: 在test_operator_simt_c_cooperative_groups.cpp中新增this_grid()类型/有效性、基类分发、3D 维度与秩计算,以及单 block 不写计数器、block 0/非 0 释放计数器、重复同步推进阶段号等同步行为测试。 - 补充测试桩支持: 在
simt_compiler_stub.h/cpp中新增__cce_simt_get_para_base_imp()声明与实现(返回内部静态数组偏移地址),为测试中的同步计数器访问提供支撑。


atomgit-bot
20 天前 评论:
20 天前 评论:
20 天前 添加了label:cann-cla/yes
此处折叠了118条消息 查看更多
11 天前 添加了label:lgtm
11 天前 关闭了关联的issue
11 天前 合入了pull request
描述
Ascend C SIMT 协作组支持 grid_group,提供跨block 的同步能力,具体支持API:
关联的Issue
#1391
测试
SIMT 二级冒烟验证
编写算子测试 grid_group 所有 api
文档更新
docs/zh/api/README.md
docs/zh/api/SIMT-API/SIMD_SIMT_hybrid_programming_intro/api_list.md
docs/zh/api/SIMT-API/SIMT_programming_intro/api_list.md
docs/zh/api/SIMT-API/cooperative_groups/cooperative_groups.md
docs/zh/api/SIMT-API/cooperative_groups/cooperative_groups_intro.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/block_index.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/block_rank.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/dim_blocks.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/grid_group.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/grid_group_constructor.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/grid_group_intro.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/group_dim.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/is_valid.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/num_blocks.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/num_threads.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/size.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/sync.md
docs/zh/api/SIMT-API/cooperative_groups/grid_group/thread_rank.md
docs/zh/api/SIMT-API/cooperative_groups/sync.md
类型标签