文件最后提交记录最后更新时间
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
refactor: 清理 experimental 目录 tiling 文件中多余的头文件引用 Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !2956 merge master into master refactor: 清理 experimental 目录 tiling 文件中多余的头文件引用 Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!29567 天前
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
feat(experimental): replace div_mod with div_v3 Co-authored-by: wyb780310<wangyubo37@huawei.com> # message auto-generated for no-merge-commit merge: !1994 merge master into master feat(experimental): replace div_mod with div_v3 Created-by: wyb780310 Commit-by: wyb780310 Merged-by: cann-robot Description: ## 描述 本 PR 将experimental/math/div_v3, 用更清晰的 mode 属性来实现与官方 aclnnDivMod 对齐的除法语义。基于 div_mod PR 审视意见,对算子进行了完全重构: 主要改动如下: - 重新定义算子语义为“带 mode 参数的除法”(单输出 y),覆盖: - mode=0 (RealDiv)y = x1 / x2 - mode=1 (TruncDiv)y = trunc(x1 / x2) - mode=2 (FloorDiv)y = floor(x1 / x2) - 新增 mode 属性校验与分支计算逻辑(kernel 侧根据 mode 选择 Div/Trunc/Floor 路径) - 新增数据类型支持:BFLOAT16 / INT32 / INT16(同时支持 FLOAT32 / FLOAT16) - 在 op_api 层完成广播对齐:通过 l0op::BroadcastTox1/x2 广播到输出形状,kernel 侧按同形状逐元素计算 - kernel 实现使用手写 LocalTensor 流水线(CopyIn / Compute / CopyOut),并在关键向量计算之间加入同步: - DataCopyPad:用于尾块/非对齐尾段的数据搬运,避免尾部数据丢失 - PipeBarrier<PIPE_V>:用于向量计算间的同步 - 平台支持信息:div_v3/README.md 标注支持 Atlas A2/A3(实际 AICore 配置以代码中的 ascend910b / ascend910_93 为准) | # | 原问题 | 涉及文件 | div_v3 状态 | 解决位置 | |---|--------|---------|------------|---------| | 1 | typeSize 获取方式 | tiling.cpp | **已解决** | ge::TypeUtils::GetDataTypeLength (L114-115) | | 2 | 魔鬼数字 32 | tiling.cpp | **已解决** | 用 Ops::Base::GetUbBlockSize(context) 代替 | | 3 | 对齐计算用 CeilAlign | tiling.cpp | **已解决** | 整体 tiling 逻辑重构,手写公式替换为 Ops::Base::CeilDiv | | 4 | 16M workspace 不需要 | tiling.cpp | **已解决** | 改用 GetLibApiWorkSpaceSize() (L72) | | 5 | 核数写死为 8 | tiling.cpp | **已解决** | 动态计算 min(coreNum, blocksTotal) (L148-159) | | 6 | ascend910_95 名称错误 | def.cpp | **已解决** | 删除,仅保留合法名称 (L53) | | 7 | half 中间缓冲区无 DoubleBuffer | div_v3.h | **设计变更** | 中间缓冲区用 TBuf,IO 队列用 TQue 双缓冲 | | 8 | Vector 计算间缺同步 | div_v3.h | **已解决** | 所有连续 Vector 指令间插入 PipeBarrier<PIPE_V>() | | 9 | A3 也需要支持 | def.cpp + README | **已修复** | 新增 ascend950 配置 | | 10 | 添加 bf16 支持 | def.cpp | **已解决** | 支持 5 种类型含 BF16 (L22) | | 11 | infershape 误用 optiling 命名空间 | infershape.cpp | **已解决** | 移除 tiling_util.h 依赖 | | 12 | 不支持广播 | aclnn_div_v3.cpp | **已解决** | op_api 层 BroadcastTo 完成广播 (L148-155) | | 13 | GetNodeName 后重复算子名 | infershape.cpp | **已解决** | 日志不再重复添加算子名前缀 | | 14 | 缺少 dtype 推导 | infershape.cpp | **设计覆盖** | def.cpp 位置对应自动推导(与 math/div 一致) | | 15 | 缺少 -1/-2 shape 推导 | infershape.cpp | **已解决** | *yShape = *xShape 天然传递动态 shape | ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1151 ## 测试 - 新增示例测试入口: - examples/test_aclnn_div_v3.cpp:循环验证 mode=0/1/2(RealDiv/TruncDiv/FloorDiv),shape 使用 {4, 256} - examples/test_geir_div_v3.cpp:以 GE 图方式构建 DivV3,设置 mode=2 (FloorDiv),并将输出写入 ./div_v3_output_*.bin ## 文档更新 - 新增 experimental/math/div_v3/README.md - 新增 experimental/math/div_v3/docs/aclnnDivV3.md ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!19942 个月前
math仓的doc tools 工具检测的低错问题 Co-authored-by: caiwenwen<caiwenwen6@h-partners.com> # message auto-generated for no-merge-commit merge: !2461 merge master into master math仓的doc tools 工具检测的低错问题 Created-by: caiwenwen Commit-by: caiwenwen Merged-by: cann-robot Description: ## 描述 处理math仓的doc tools 工具检测的低错问题,包括markdown低错、htlm标签合入、链接是否可以正常跳转 ## 关联的Issue #关联issue#1262 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 更新全部文档 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!24611 个月前
README.md

DivV3(带模式的除法 / DivMod)

产品支持情况

产品 是否支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品
Atlas A3 训练系列产品/Atlas A3 推理系列产品

功能说明

  • 算子功能:根据 mode 参数完成不同舍入模式的除法计算,对应官方 aclnnDivMod 语义。
  • 计算公式:
    • mode=0 (RealDiv):$$ y = x1 / x2 $$
    • mode=1 (TruncDiv):$$ y = \text{trunc}(x1 / x2) $$
    • mode=2 (FloorDiv):$$ y = \lfloor x1 / x2 \rfloor $$
  • 本算子使用原生 Ascend C LocalTensor 手写流水线实现(CopyIn / Compute / CopyOut 三级流水), 而非高级 DAG/BroadcastSch 模板,用于学习和对比低级实现方式。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x1 输入 被除数张量 见下方 ND
x2 输入 除数张量 见下方 ND
mode 属性 舍入模式:0=RealDiv, 1=Trunc, 2=Floor int32 -
y 输出 除法计算的结果 见下方 ND

数据类型支持

  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:
    • FLOAT32、FLOAT16、BFLOAT16、INT32、INT16

数据格式

  • 仅支持 ND 格式。

广播策略

  • 广播操作在 aclnn 接口层(op_api)通过调用 l0op::BroadcastTo 完成。
  • Kernel 层假设输入 x1、x2 已经是广播后的同形状张量,执行逐元素计算。
  • 输入 shape 需满足 NumPy 广播规则,输出 shape 为广播后的 shape。

实现架构

aclnnDivV3 (op_api 层)
  ├── 参数检查 (dtype / shape / format)
  ├── Contiguous 转换
  ├── BroadcastTo 广播对齐
  ├── l0op::DivV3 → kernel 调度
  │     └── DivV3 kernel (手写流水线)
  │           ├── CopyIn:  GM → UB (DataCopyPad)
  │           ├── Compute: 根据 mode 分支计算
  │           │     ├── mode=0: Div
  │           │     ├── mode=1: Div → Trunc (或 Cast CAST_TRUNC)
  │           │     └── mode=2: Div → Floor
  │           └── CopyOut: UB → GM (DataCopyPad)
  └── ViewCopy 输出

Kernel 内部类型转换策略

输入类型 计算路径
float32 直接 Div,按 mode 执行 Floor/Trunc
float16 Cast → float32 → Div+mode → Cast 回 float16
bfloat16 Cast → float32 → Div+mode → Cast 回 bfloat16
int32 Cast → float32 → Div+mode → Cast 回 int32
int16 Cast → float32 → Div+mode → Cast 回 int16

相比 DivV2 的改进

  1. 新增 mode 属性:支持三种除法模式,覆盖 DivMod 完整语义
  2. DataCopyPad:尾块搬运使用 DataCopyPad 避免非对齐数据丢失
  3. 成员变量初始化:所有基础类型成员变量声明时初始化为 0
  4. op_api 层广播:在 aclnn 层完成广播,kernel 只做逐元素计算
  5. 完善边界处理:增加 Floor 模式的 tmpBuf 支持(Floor 指令需要额外缓冲区)

调用说明

调用方式 样例代码 说明
aclnn接口 test_div_v3 通过 aclnnDivV3 接口调用 DivV3 算子