已合并
【社区任务】Add roll operator #3333
boxw987创建于 6月15日
【社区任务】Add roll operator #3333
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 boxw987 的贡献)6月15日 关联了issue:[Requirement|需求建议]: Roll 算子需求
6月15日 添加了label:cann-cla/yes
CANN-robot
6月15日 评论:
6月15日 评论:
Thanks for your pull-request.
The full list of commands accepted by me can be found at here。
You can get sig-info at here
PR Approval Progress
✅ Congratulations! All modules have met the lgtm and approve requirements.
Module Approval Details
| module | lgtm status | approve status |
|---|---|---|
| experimental | ✅ 傅涛, 周奇龙 (2/2) | ✅ 傅涛, 周奇龙 (2/1) |
💡 Tip:
- Committer can comment
/approveor/lgtm- Commenting
/approveimplies both code review (lgtm) and intent to merge (approve)
CLA Signature Pass
boxw987, thanks for your pull request. All authors of the commits have signed the CLA. 👍


boxw987
6月15日 评论:
6月15日 评论:
/compile


此处折叠了54条消息 查看更多
7月2日 添加了label:approved
7月2日 添加了label:lgtm
7月2日 关闭了关联的issue
7月2日 合入了pull request
描述
本次提交补齐 Roll 算子的开源实现,面向 Atlas A2 训练系列产品提供 ACLNN 两阶段调用接口。
Roll 的目标是沿指定维度对输入张量执行循环位移;当
dims为空时,语义等价于先对输入做逻辑展平,再执行一维 roll,最后恢复原始形状。本次实现重点解决以下问题:
当前版本支持范围如下:
uint8、int8、bfloat16、float16、float32、int32、uint32NDdims为空的 flatten roll当前版本不支持:
boolint64ND格式实现上采用 Host 侧归一化与 Tiling、Kernel 侧多路径搬运的方案:
flowchart TD A[ACLNN 接口] --> B[参数校验] B --> C[dims shifts 归一化] C --> D[重复维度合并] D --> E[生成 Tiling 信息] E --> F[Kernel 路径选择] F --> G[连续段 Copy] F --> H[按行 Roll] F --> I[按 Block Roll] F --> J[Segmented Fallback]整体设计思路如下:
dims为空时退化为 flatten roll,避免继续走原始多维索引路径。Kernel 路径选择可概括为:
flowchart TD A[Kernel Process] --> B{activeDimCount == 0?} B -->|Yes| C[Identity Copy] B -->|No| D{dimNum == 1?} D -->|Yes| E[Flatten Roll] D -->|No| F{single active dim?} F -->|Yes| G{activeDim == 0?} G -->|Yes| H[Leading Dim Roll] G -->|No| I{innerSize == 1 and last dim?} I -->|Yes| J[Last Dim Row Roll] I -->|No| K[Single Dim Block Roll] F -->|No| L{last active dim is final dim?} L -->|Yes| M[Multi-Dim Last-Dim Roll] L -->|No| N[Multi-Dim Non-Last Roll] N --> O[Segmented Fallback]本次实现保留的优化主线不是单点 shape 特化,而是以下几类可复用策略:
连续段优先
能转为连续段搬运的场景,优先使用连续 copy 或源端对齐 copy,减少逐元素处理。
最后一维按行优化
围绕最后一维滚动构建按行搬运、按行拼接和行组处理路径,降低访存碎片。
非最后维按 block 重排
对中间维或多维组合滚动,优先按 block 建模,减少重复索引计算。
小宽度定向增强
对部分 BF16、小宽度最后维和部分
uint8小块场景,调整切分与 patch 策略,但不引入写死单一 shape 的独立实现。输入约束方面,当前版本要求:
dtype一致。shape一致。rank不超过8。dims为空时,shifts长度必须为1。dims非空时,shifts与dims长度必须一致。dims的取值范围为[-rank, rank)。shifts长度必须为1,且dims为空。关联的Issue
测试
本次改动包含以下验证范围:
dims为空、负维度、重复维度合并等关键语义场景验收目标包括:
文档更新
本次同步补充了算子说明文档、接口文档以及需求与设计说明。
类型标签