| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
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 | 19 天前 | |
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 | 19 天前 | |
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 | 19 天前 | |
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 | 19 天前 | |
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 个月前 | |
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 | 19 天前 | |
适配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 | 26 天前 | |
feat: pad_v2 新增 COMPLEX64/COMPLEX128 支持,circular_pad_grad 修改参数校验 Co-authored-by: tan_xin<tanxin44@huawei.com> # message auto-generated for no-merge-commit merge: !6513 merge master-tile into master feat: pad_v2 新增 COMPLEX64/COMPLEX128 支持,circular_pad_grad 修改参数校验 Created-by: tan_xin Commit-by: tan_xin Merged-by: cann-robot Description: ## 描述 本次提交对 pad_v2 与 circular_pad_grad 算子进行功能增强与校验放宽。 ### 改动原因 - pad_v2 此前不支持 COMPLEX64/COMPLEX128,且 constant_values 被文档描述为必选,Tiling 侧存在冗余前置校验,限制适用场景 - circular_pad_grad 的 shape 校验过严(padding 必须小于对应维度、gradOutput 前导维度必须与 self 一致),与实际允许场景不符 ### 改动方法 1. pad_v2 README 与 proto:x、constant_values、y 新增 COMPLEX64、COMPLEX128;constant_values 改为可选 Tensor(仅 constant 模式使用,缺省 0) 2. pad_v2 Tiling:移除 paddings 空数据拦截、constant_values dtype 一致性与标量形状校验;example 增加 mode 属性 3. circular_pad_grad op_api:移除 padding 小于对应维度、gradOutput 前导维度一致性校验,错误码修正为 ACLNN_ERR_INNER_NULLPTR 4. 同步更新 tiling UT workspace 期望、golden.py、ST/UT 用例 ## 关联的Issue - https://gitcode.com/cann/ops-math/issues/4016 ## 测试 - [x] 算子单测(pad_v2 tiling UT / circular_pad_grad UT/ST 更新) ## 文档更新 - conversion/pad_v2/README.md - conversion/pad_v2/op_graph/pad_v2_proto.h - conversion/circular_pad_grad/docs/aclnnCircularPad2dBackward.md - conversion/circular_pad_grad/docs/aclnnCircularPad3dBackward.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!6513 | 17 天前 |
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算子。 |