| Files | Last commit | Last update |
|---|---|---|
fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6647 merge master-only-tile into master fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 对 TileWithAxis 算子(Ascend950 AICore 实现)进行加固,覆盖 Tiling 计算、动态 shape 推导与属性契约三个维度。 ### 改动原因 - Tiling 中 outerDim/innerDim/rowLength/rowOutElements/totalOutElements 乘积链缺少 int64 溢出守卫,超大 shape 下会回绕产生错误分块; - CeilDiv 对空张量(rowLength==0 / totalCount==0)存在除以 0 与负数回绕风险; - 标量输入(rank=0)时输出共 tiles 个元素,原实现单核整块搬运,tiles 超过单缓冲容量(ubSize/2/dtypeSize)时发生 UB 越界写; - axis/tiles 属性契约与 TBE/AICPU 基线不一致(axis 默认 0 vs 1,tiles 可选 vs 必选); - 算子声明支持动态 shape(DynamicShapeSupportFlag=true),但缺少 InferShapeRange 输出范围推导。 ### 改动方法 - 新增 CheckMulNoOverflow 对全部 int64 乘积链做符号与溢出校验,超限即返回 GRAPH_FAILED; - 空张量分支:ComputeUbFactor/ComputeTotalCount/MaxBlocksOnAxis/SelectInitialUbAxis 对 rowLength==0 返回 0 块数,多核切分 totalCount==0 时 SetBlockDim(1); - HandleScalarInput 引入 bufferSize/dtypeSize 单缓冲容量判断:tiles 超容量时沿 tiles 维分块(ubAxis=1,NDDMA dim1 源 stride=0 广播读),消除 UB 越界写; - axis 缺省值统一为 1(对齐 TBE/AICPU),tiles 改为 REQUIRED(对齐 proto/README/AICPU def); - 新增 InferShapeRange4TileWithAxis:输出 range = 输入 range,axis 维乘 tiles,-1/-2 未知维标记原样传播,带 int64 溢出检查; - proto 明确 x 仅支持 ND 格式,文档与 golden 补齐。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/3874 ## 测试 - 更新 op_host UT:tiling(溢出/空张量/标量分块)与 infershape(未知维传播、axis/tiles 契约)用例; - 新增 tests/assets/golden.py:以 torch 小算子拼接实现 TileWithAxis 语义,提供 TTK kernel/GEIR 模式的 golden 与 binary_equal 容差声明。 ## 文档更新 - 更新 README.md(axis 默认值、tiles 必选、ND 格式约束、动态 shape 支持说明)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6647 | 16 days ago | |
fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6647 merge master-only-tile into master fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 对 TileWithAxis 算子(Ascend950 AICore 实现)进行加固,覆盖 Tiling 计算、动态 shape 推导与属性契约三个维度。 ### 改动原因 - Tiling 中 outerDim/innerDim/rowLength/rowOutElements/totalOutElements 乘积链缺少 int64 溢出守卫,超大 shape 下会回绕产生错误分块; - CeilDiv 对空张量(rowLength==0 / totalCount==0)存在除以 0 与负数回绕风险; - 标量输入(rank=0)时输出共 tiles 个元素,原实现单核整块搬运,tiles 超过单缓冲容量(ubSize/2/dtypeSize)时发生 UB 越界写; - axis/tiles 属性契约与 TBE/AICPU 基线不一致(axis 默认 0 vs 1,tiles 可选 vs 必选); - 算子声明支持动态 shape(DynamicShapeSupportFlag=true),但缺少 InferShapeRange 输出范围推导。 ### 改动方法 - 新增 CheckMulNoOverflow 对全部 int64 乘积链做符号与溢出校验,超限即返回 GRAPH_FAILED; - 空张量分支:ComputeUbFactor/ComputeTotalCount/MaxBlocksOnAxis/SelectInitialUbAxis 对 rowLength==0 返回 0 块数,多核切分 totalCount==0 时 SetBlockDim(1); - HandleScalarInput 引入 bufferSize/dtypeSize 单缓冲容量判断:tiles 超容量时沿 tiles 维分块(ubAxis=1,NDDMA dim1 源 stride=0 广播读),消除 UB 越界写; - axis 缺省值统一为 1(对齐 TBE/AICPU),tiles 改为 REQUIRED(对齐 proto/README/AICPU def); - 新增 InferShapeRange4TileWithAxis:输出 range = 输入 range,axis 维乘 tiles,-1/-2 未知维标记原样传播,带 int64 溢出检查; - proto 明确 x 仅支持 ND 格式,文档与 golden 补齐。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/3874 ## 测试 - 更新 op_host UT:tiling(溢出/空张量/标量分块)与 infershape(未知维传播、axis/tiles 契约)用例; - 新增 tests/assets/golden.py:以 torch 小算子拼接实现 TileWithAxis 语义,提供 TTK kernel/GEIR 模式的 golden 与 binary_equal 容差声明。 ## 文档更新 - 更新 README.md(axis 默认值、tiles 必选、ND 格式约束、动态 shape 支持说明)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6647 | 16 days ago | |
fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6647 merge master-only-tile into master fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 对 TileWithAxis 算子(Ascend950 AICore 实现)进行加固,覆盖 Tiling 计算、动态 shape 推导与属性契约三个维度。 ### 改动原因 - Tiling 中 outerDim/innerDim/rowLength/rowOutElements/totalOutElements 乘积链缺少 int64 溢出守卫,超大 shape 下会回绕产生错误分块; - CeilDiv 对空张量(rowLength==0 / totalCount==0)存在除以 0 与负数回绕风险; - 标量输入(rank=0)时输出共 tiles 个元素,原实现单核整块搬运,tiles 超过单缓冲容量(ubSize/2/dtypeSize)时发生 UB 越界写; - axis/tiles 属性契约与 TBE/AICPU 基线不一致(axis 默认 0 vs 1,tiles 可选 vs 必选); - 算子声明支持动态 shape(DynamicShapeSupportFlag=true),但缺少 InferShapeRange 输出范围推导。 ### 改动方法 - 新增 CheckMulNoOverflow 对全部 int64 乘积链做符号与溢出校验,超限即返回 GRAPH_FAILED; - 空张量分支:ComputeUbFactor/ComputeTotalCount/MaxBlocksOnAxis/SelectInitialUbAxis 对 rowLength==0 返回 0 块数,多核切分 totalCount==0 时 SetBlockDim(1); - HandleScalarInput 引入 bufferSize/dtypeSize 单缓冲容量判断:tiles 超容量时沿 tiles 维分块(ubAxis=1,NDDMA dim1 源 stride=0 广播读),消除 UB 越界写; - axis 缺省值统一为 1(对齐 TBE/AICPU),tiles 改为 REQUIRED(对齐 proto/README/AICPU def); - 新增 InferShapeRange4TileWithAxis:输出 range = 输入 range,axis 维乘 tiles,-1/-2 未知维标记原样传播,带 int64 溢出检查; - proto 明确 x 仅支持 ND 格式,文档与 golden 补齐。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/3874 ## 测试 - 更新 op_host UT:tiling(溢出/空张量/标量分块)与 infershape(未知维传播、axis/tiles 契约)用例; - 新增 tests/assets/golden.py:以 torch 小算子拼接实现 TileWithAxis 语义,提供 TTK kernel/GEIR 模式的 golden 与 binary_equal 容差声明。 ## 文档更新 - 更新 README.md(axis 默认值、tiles 必选、ND 格式约束、动态 shape 支持说明)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6647 | 16 days ago | |
fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6647 merge master-only-tile into master fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 对 TileWithAxis 算子(Ascend950 AICore 实现)进行加固,覆盖 Tiling 计算、动态 shape 推导与属性契约三个维度。 ### 改动原因 - Tiling 中 outerDim/innerDim/rowLength/rowOutElements/totalOutElements 乘积链缺少 int64 溢出守卫,超大 shape 下会回绕产生错误分块; - CeilDiv 对空张量(rowLength==0 / totalCount==0)存在除以 0 与负数回绕风险; - 标量输入(rank=0)时输出共 tiles 个元素,原实现单核整块搬运,tiles 超过单缓冲容量(ubSize/2/dtypeSize)时发生 UB 越界写; - axis/tiles 属性契约与 TBE/AICPU 基线不一致(axis 默认 0 vs 1,tiles 可选 vs 必选); - 算子声明支持动态 shape(DynamicShapeSupportFlag=true),但缺少 InferShapeRange 输出范围推导。 ### 改动方法 - 新增 CheckMulNoOverflow 对全部 int64 乘积链做符号与溢出校验,超限即返回 GRAPH_FAILED; - 空张量分支:ComputeUbFactor/ComputeTotalCount/MaxBlocksOnAxis/SelectInitialUbAxis 对 rowLength==0 返回 0 块数,多核切分 totalCount==0 时 SetBlockDim(1); - HandleScalarInput 引入 bufferSize/dtypeSize 单缓冲容量判断:tiles 超容量时沿 tiles 维分块(ubAxis=1,NDDMA dim1 源 stride=0 广播读),消除 UB 越界写; - axis 缺省值统一为 1(对齐 TBE/AICPU),tiles 改为 REQUIRED(对齐 proto/README/AICPU def); - 新增 InferShapeRange4TileWithAxis:输出 range = 输入 range,axis 维乘 tiles,-1/-2 未知维标记原样传播,带 int64 溢出检查; - proto 明确 x 仅支持 ND 格式,文档与 golden 补齐。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/3874 ## 测试 - 更新 op_host UT:tiling(溢出/空张量/标量分块)与 infershape(未知维传播、axis/tiles 契约)用例; - 新增 tests/assets/golden.py:以 torch 小算子拼接实现 TileWithAxis 语义,提供 TTK kernel/GEIR 模式的 golden 与 binary_equal 容差声明。 ## 文档更新 - 更新 README.md(axis 默认值、tiles 必选、ND 格式约束、动态 shape 支持说明)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6647 | 16 days ago | |
fix(aicpu): tile_with_axis 析构函数补充 override 修饰(G.CLS.12 残留) Co-authored-by: liu-wei<lovline.liuwei@huawei.com> # message auto-generated for no-merge-commit merge: !5920 merge fix/aicpu-cls12-destructor-override into master fix(aicpu): tile_with_axis 析构函数补充 override 修饰(G.CLS.12 残留) Created-by: liu-wei Commit-by: liu-wei Merged-by: cann-robot Description: ## 描述 修复 G.CLS.12 告警最后残留 1 处(重写虚函数应显式指定 override): | 告警 | 文件 | 修复 | |---|---|---| | G.CLS.12 | tile_with_axis_aicpu.h | ~TileWithAxisCpuKernel() override = default; | 基类 CpuKernel 析构为 virtual;同类其余 6 处(strided_slice/lin_space/top_k_pq_distance/top_k_v2_d/topk/select_v2)已在最新 master 修复,本提交补齐最后一处。 ## 验证 - override 为纯编译期检查,零代码生成影响;tile_with_axis_aicpu.cpp 语法级编译验证通过; - CI 流水线待跑。 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/3279 ## 类型 🧹 代码清理 See merge request: cann/ops-math!5920 | 1 month ago | |
fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6647 merge master-only-tile into master fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 对 TileWithAxis 算子(Ascend950 AICore 实现)进行加固,覆盖 Tiling 计算、动态 shape 推导与属性契约三个维度。 ### 改动原因 - Tiling 中 outerDim/innerDim/rowLength/rowOutElements/totalOutElements 乘积链缺少 int64 溢出守卫,超大 shape 下会回绕产生错误分块; - CeilDiv 对空张量(rowLength==0 / totalCount==0)存在除以 0 与负数回绕风险; - 标量输入(rank=0)时输出共 tiles 个元素,原实现单核整块搬运,tiles 超过单缓冲容量(ubSize/2/dtypeSize)时发生 UB 越界写; - axis/tiles 属性契约与 TBE/AICPU 基线不一致(axis 默认 0 vs 1,tiles 可选 vs 必选); - 算子声明支持动态 shape(DynamicShapeSupportFlag=true),但缺少 InferShapeRange 输出范围推导。 ### 改动方法 - 新增 CheckMulNoOverflow 对全部 int64 乘积链做符号与溢出校验,超限即返回 GRAPH_FAILED; - 空张量分支:ComputeUbFactor/ComputeTotalCount/MaxBlocksOnAxis/SelectInitialUbAxis 对 rowLength==0 返回 0 块数,多核切分 totalCount==0 时 SetBlockDim(1); - HandleScalarInput 引入 bufferSize/dtypeSize 单缓冲容量判断:tiles 超容量时沿 tiles 维分块(ubAxis=1,NDDMA dim1 源 stride=0 广播读),消除 UB 越界写; - axis 缺省值统一为 1(对齐 TBE/AICPU),tiles 改为 REQUIRED(对齐 proto/README/AICPU def); - 新增 InferShapeRange4TileWithAxis:输出 range = 输入 range,axis 维乘 tiles,-1/-2 未知维标记原样传播,带 int64 溢出检查; - proto 明确 x 仅支持 ND 格式,文档与 golden 补齐。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/3874 ## 测试 - 更新 op_host UT:tiling(溢出/空张量/标量分块)与 infershape(未知维传播、axis/tiles 契约)用例; - 新增 tests/assets/golden.py:以 torch 小算子拼接实现 TileWithAxis 语义,提供 TTK kernel/GEIR 模式的 golden 与 binary_equal 容差声明。 ## 文档更新 - 更新 README.md(axis 默认值、tiles 必选、ND 格式约束、动态 shape 支持说明)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6647 | 16 days ago | |
适配ascend350:11个conversion/math算子新增ascend350计算单元支持 Co-authored-by: ly_cann_coder<liyao152@huawei.com> # message auto-generated for no-merge-commit merge: !6424 merge ascend350 into master 适配ascend350:11个conversion/math算子新增ascend350计算单元支持 Created-by: ly_cann_coder Commit-by: ly_cann_coder Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 11个conversion/math算子新增ascend350计算单元支持 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-math/issues/3649 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6424 | 23 days ago | |
fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6647 merge master-only-tile into master fix(tile_with_axis): Tiling溢出/CeilDiv回绕与标量UB越界加固,补动态shape范围推导及golden Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 对 TileWithAxis 算子(Ascend950 AICore 实现)进行加固,覆盖 Tiling 计算、动态 shape 推导与属性契约三个维度。 ### 改动原因 - Tiling 中 outerDim/innerDim/rowLength/rowOutElements/totalOutElements 乘积链缺少 int64 溢出守卫,超大 shape 下会回绕产生错误分块; - CeilDiv 对空张量(rowLength==0 / totalCount==0)存在除以 0 与负数回绕风险; - 标量输入(rank=0)时输出共 tiles 个元素,原实现单核整块搬运,tiles 超过单缓冲容量(ubSize/2/dtypeSize)时发生 UB 越界写; - axis/tiles 属性契约与 TBE/AICPU 基线不一致(axis 默认 0 vs 1,tiles 可选 vs 必选); - 算子声明支持动态 shape(DynamicShapeSupportFlag=true),但缺少 InferShapeRange 输出范围推导。 ### 改动方法 - 新增 CheckMulNoOverflow 对全部 int64 乘积链做符号与溢出校验,超限即返回 GRAPH_FAILED; - 空张量分支:ComputeUbFactor/ComputeTotalCount/MaxBlocksOnAxis/SelectInitialUbAxis 对 rowLength==0 返回 0 块数,多核切分 totalCount==0 时 SetBlockDim(1); - HandleScalarInput 引入 bufferSize/dtypeSize 单缓冲容量判断:tiles 超容量时沿 tiles 维分块(ubAxis=1,NDDMA dim1 源 stride=0 广播读),消除 UB 越界写; - axis 缺省值统一为 1(对齐 TBE/AICPU),tiles 改为 REQUIRED(对齐 proto/README/AICPU def); - 新增 InferShapeRange4TileWithAxis:输出 range = 输入 range,axis 维乘 tiles,-1/-2 未知维标记原样传播,带 int64 溢出检查; - proto 明确 x 仅支持 ND 格式,文档与 golden 补齐。 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/3874 ## 测试 - 更新 op_host UT:tiling(溢出/空张量/标量分块)与 infershape(未知维传播、axis/tiles 契约)用例; - 新增 tests/assets/golden.py:以 torch 小算子拼接实现 TileWithAxis 语义,提供 TTK kernel/GEIR 模式的 golden 与 binary_equal 容差声明。 ## 文档更新 - 更新 README.md(axis 默认值、tiles 必选、ND 格式约束、动态 shape 支持说明)。 ## 类型标签 - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6647 | 16 days ago |
TileWithAxis
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR&950DT系列产品 | √ |
| Atlas A3系列产品 | √ |
| Atlas A2系列产品 | √ |
| Atlas 200I/500 A2推理产品 | √ |
| Atlas推理系列产品 | √ |
| Atlas训练系列产品 | √ |
功能说明
-
算子功能:沿指定维度复制输入Tensor数据,扩展输出Tensor。
-
计算示例:
- 输入 x = [[[1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12]]],shape = (2, 3, 2)
- axis = 1,tiles = 2
- 输出 y = [[[1, 2], [3, 4], [5, 6], [1, 2], [3, 4], [5, 6]], [[7, 8], [9, 10], [11, 12], [7, 8], [9, 10], [11, 12]]],shape = (2, 6, 2)
-
计算公式: 输出 y 的 shape 与输入 x 相同,仅 axis 维度变为
x.shape[axis] * tiles。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| x | 输入 | 输入张量。 | BFLOAT16、FLOAT16、FLOAT、INT32、INT8、UINT8 | ND |
| y | 输出 | 输出张量,与x具有相同的数据类型和格式。 | 与x一致 | ND |
| axis | 可选属性 | 指定复制的维度,默认为1。 | INT | - |
| tiles | 属性 | 复制次数,必须大于0。 | INT | - |
约束说明
- axis 必须在输入Tensor的维度范围内(支持负数索引,如 axis=-1 表示最后一维)。
- tiles 必须大于0。
- 输出Tensor在 axis 维度的大小必须等于输入Tensor在 axis 维度的大小乘以 tiles。
- 输入Tensor维度不超过8维。
- 支持标量输入(rank=0):输出 shape 为 [tiles],即输入标量值复制 tiles 份;此时 axis 不生效。
- 输入Tensor任一维允许为 0(空 Tensor):输出对应维仍为 0,输出Tensor为空。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| GE图模式 | test_geir_tile_with_axis | 通过算子IR构图方式调用TileWithAxis算子。 |