| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
doc tools 工具扫描问题修改 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !1938 merge master into master doc tools 工具扫描问题修改 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: doc tools 工具扫描问题修改 See merge request: cann/ops-math!1938 | 4 个月前 | |
【社区任务】RealDiv算子开发-算子提交 Co-authored-by: Nice-try-zzw<1849404617@qq.com> # message auto-generated for no-merge-commit merge: !319 merge final-realdiv into master 【社区任务】RealDiv算子开发-算子提交 Created-by: Nice_try Commit-by: Nice-try-zzw Merged-by: cann-robot Description: ## 描述 ### 背景信息 基于RealDiv算子历史TBE版本使用Ascend C编程语言进行优化。 ### TBE源码分析 通过对RealDiv算子TBE版本的功能分析,当前支持的能力如下: ① x1,x2支持float16,float32,bfloat16,int32,bool五种格式的输入。 ② RealDiv算子涉及到对输入数据进行广播(输入数据的shape调整到相同大小),任务书说明:暂可不支持广播场景 ③ 在对输入数据进行广播操作后,调用floor、vdiv和cast接口实现相应的表达式: For float32、float16: $$ y=x1/x2 $$ For bfloat16、int32: $$ dtype=x1.dtype $$ $$ y=cast(cast(x1, float32)/cast(x2, float32), dtype) $$ For bool: $$ y=cast(x1, float32)/cast(x2, float32) $$ RealDiv算子TBE版本的整体流程图如下图所示:  ### 算子原型 | 名称 | 类别 | dtype | format | shape | 介绍 | |------|------|-------|--------|-------|------| | x1 | 输入 | fp16 / fp32 / bf16 / int32 / bool | ND | all | 输入 | | x2 | 输入 | fp16 / fp32 / bf16 / int32 / bool | ND | 同x1 | 输入 | | y | 输出 | fp16 / fp32 / bf16 / int32 / fp32 | ND | 同x1 | 输出 | > 在混合数据类型下,Ascend C因为走aclnn代码,会转为相同数据类型,在算子侧实际上是相同数据类型 > 算子format设为ND,在实际ST测试中也同样支持其他format的场景 > real_div for batchmatmul不涉及,故不在Ascend C设计中体现 ### 算子支持型号 Atlas A2 训练系列产品/Atlas 800I A2推理产品 ### host侧设计方案 算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 #### 1) 分核策略 优先使用满核的原则。 如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 输入数据大小计算:通过GetInputShape和GetDataTypeLength函数获取输入数据的大小和类型长度,计算出输入数据的总字节数。 UB内存大小和核心数量获取:通过平台信息获取UB内存大小和核心数量,并根据这些信息调整核心数量。 #### 2) 数据分块和内存优化策略 充分使用UB空间的原则。 需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。 UB内存大小获取:通过GetCoreMemSize函数获取UB内存的大小,用于后续的数据切分计算。 Tile块计算:根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM和不同类型下的ubDataNum,计算出每个Tile块的数据数量。 数据切分:将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量。 设置切分参数:将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到RealDivTilingData对象中。 这些策略确保了数据在多个核心之间的均匀分布,并且在单个核心内进行了合理的切分,以提高并行处理的效率。 #### 3) tilingkey规划策略 不进行tilingkey划分,在kernel侧利用输入数据的类型来走不同的分支。 ### kernel侧设计方案 进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。 1) 依照TBE实现,将bf16、int32、bool精度转换为fp32计算后,对于浮点数据使用RINT模式转换为原数据,对于int32使用TRUNC转换为原数据,对于bool数据不需要转换为原数据;高性能模式下,fp16以及fp32数据不需要转换精度,非高性能模式下(高精度模式),fp16需要将精度转换为fp32计算后转换为原数据。 2) Ascend C的RealDiv算子流程见下图。  ## 关联的Issue [#193](https://gitcode.com/cann/ops-math/issues/193) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 进行了ut测试、ascendoptest测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:RealDiv算子贡献 See merge request: cann/ops-math!319 | 7 个月前 | |
change socversion to npuarch Co-authored-by: liulinxiang<liulinxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !1114 merge master22 into master change socversion to npuarch Created-by: liulinxiang Commit-by: liulinxiang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将代码里SocVersion::ASCEND950统一整改为使用npuarch ## 关联的Issue https://gitcode.com/cann/ops-math/issues/637 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 自测OK <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!1114 | 6 个月前 | |
fix experimental pkg fail Co-authored-by: liulinxiang<liulinxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !899 merge master4 into master fix experimental pkg fail Created-by: liulinxiang Commit-by: liulinxiang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!899 | 6 个月前 | |
【社区任务】RealDiv算子开发-算子提交 Co-authored-by: Nice-try-zzw<1849404617@qq.com> # message auto-generated for no-merge-commit merge: !319 merge final-realdiv into master 【社区任务】RealDiv算子开发-算子提交 Created-by: Nice_try Commit-by: Nice-try-zzw Merged-by: cann-robot Description: ## 描述 ### 背景信息 基于RealDiv算子历史TBE版本使用Ascend C编程语言进行优化。 ### TBE源码分析 通过对RealDiv算子TBE版本的功能分析,当前支持的能力如下: ① x1,x2支持float16,float32,bfloat16,int32,bool五种格式的输入。 ② RealDiv算子涉及到对输入数据进行广播(输入数据的shape调整到相同大小),任务书说明:暂可不支持广播场景 ③ 在对输入数据进行广播操作后,调用floor、vdiv和cast接口实现相应的表达式: For float32、float16: $$ y=x1/x2 $$ For bfloat16、int32: $$ dtype=x1.dtype $$ $$ y=cast(cast(x1, float32)/cast(x2, float32), dtype) $$ For bool: $$ y=cast(x1, float32)/cast(x2, float32) $$ RealDiv算子TBE版本的整体流程图如下图所示:  ### 算子原型 | 名称 | 类别 | dtype | format | shape | 介绍 | |------|------|-------|--------|-------|------| | x1 | 输入 | fp16 / fp32 / bf16 / int32 / bool | ND | all | 输入 | | x2 | 输入 | fp16 / fp32 / bf16 / int32 / bool | ND | 同x1 | 输入 | | y | 输出 | fp16 / fp32 / bf16 / int32 / fp32 | ND | 同x1 | 输出 | > 在混合数据类型下,Ascend C因为走aclnn代码,会转为相同数据类型,在算子侧实际上是相同数据类型 > 算子format设为ND,在实际ST测试中也同样支持其他format的场景 > real_div for batchmatmul不涉及,故不在Ascend C设计中体现 ### 算子支持型号 Atlas A2 训练系列产品/Atlas 800I A2推理产品 ### host侧设计方案 算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 #### 1) 分核策略 优先使用满核的原则。 如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 输入数据大小计算:通过GetInputShape和GetDataTypeLength函数获取输入数据的大小和类型长度,计算出输入数据的总字节数。 UB内存大小和核心数量获取:通过平台信息获取UB内存大小和核心数量,并根据这些信息调整核心数量。 #### 2) 数据分块和内存优化策略 充分使用UB空间的原则。 需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。 UB内存大小获取:通过GetCoreMemSize函数获取UB内存的大小,用于后续的数据切分计算。 Tile块计算:根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM和不同类型下的ubDataNum,计算出每个Tile块的数据数量。 数据切分:将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量。 设置切分参数:将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到RealDivTilingData对象中。 这些策略确保了数据在多个核心之间的均匀分布,并且在单个核心内进行了合理的切分,以提高并行处理的效率。 #### 3) tilingkey规划策略 不进行tilingkey划分,在kernel侧利用输入数据的类型来走不同的分支。 ### kernel侧设计方案 进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。 1) 依照TBE实现,将bf16、int32、bool精度转换为fp32计算后,对于浮点数据使用RINT模式转换为原数据,对于int32使用TRUNC转换为原数据,对于bool数据不需要转换为原数据;高性能模式下,fp16以及fp32数据不需要转换精度,非高性能模式下(高精度模式),fp16需要将精度转换为fp32计算后转换为原数据。 2) Ascend C的RealDiv算子流程见下图。  ## 关联的Issue [#193](https://gitcode.com/cann/ops-math/issues/193) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 进行了ut测试、ascendoptest测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:RealDiv算子贡献 See merge request: cann/ops-math!319 | 7 个月前 | |
change socversion to npuarch Co-authored-by: liulinxiang<liulinxiang1@huawei.com> # message auto-generated for no-merge-commit merge: !1114 merge master22 into master change socversion to npuarch Created-by: liulinxiang Commit-by: liulinxiang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 将代码里SocVersion::ASCEND950统一整改为使用npuarch ## 关联的Issue https://gitcode.com/cann/ops-math/issues/637 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 自测OK <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!1114 | 6 个月前 | |
【社区任务】RealDiv算子开发-算子提交 Co-authored-by: Nice-try-zzw<1849404617@qq.com> # message auto-generated for no-merge-commit merge: !319 merge final-realdiv into master 【社区任务】RealDiv算子开发-算子提交 Created-by: Nice_try Commit-by: Nice-try-zzw Merged-by: cann-robot Description: ## 描述 ### 背景信息 基于RealDiv算子历史TBE版本使用Ascend C编程语言进行优化。 ### TBE源码分析 通过对RealDiv算子TBE版本的功能分析,当前支持的能力如下: ① x1,x2支持float16,float32,bfloat16,int32,bool五种格式的输入。 ② RealDiv算子涉及到对输入数据进行广播(输入数据的shape调整到相同大小),任务书说明:暂可不支持广播场景 ③ 在对输入数据进行广播操作后,调用floor、vdiv和cast接口实现相应的表达式: For float32、float16: $$ y=x1/x2 $$ For bfloat16、int32: $$ dtype=x1.dtype $$ $$ y=cast(cast(x1, float32)/cast(x2, float32), dtype) $$ For bool: $$ y=cast(x1, float32)/cast(x2, float32) $$ RealDiv算子TBE版本的整体流程图如下图所示:  ### 算子原型 | 名称 | 类别 | dtype | format | shape | 介绍 | |------|------|-------|--------|-------|------| | x1 | 输入 | fp16 / fp32 / bf16 / int32 / bool | ND | all | 输入 | | x2 | 输入 | fp16 / fp32 / bf16 / int32 / bool | ND | 同x1 | 输入 | | y | 输出 | fp16 / fp32 / bf16 / int32 / fp32 | ND | 同x1 | 输出 | > 在混合数据类型下,Ascend C因为走aclnn代码,会转为相同数据类型,在算子侧实际上是相同数据类型 > 算子format设为ND,在实际ST测试中也同样支持其他format的场景 > real_div for batchmatmul不涉及,故不在Ascend C设计中体现 ### 算子支持型号 Atlas A2 训练系列产品/Atlas 800I A2推理产品 ### host侧设计方案 算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 #### 1) 分核策略 优先使用满核的原则。 如果核间能均分,可视作无大小核区分,大核小核数据块一致; 如果核间不能均分,需要将余出的数据块分配到前几个核上。 输入数据大小计算:通过GetInputShape和GetDataTypeLength函数获取输入数据的大小和类型长度,计算出输入数据的总字节数。 UB内存大小和核心数量获取:通过平台信息获取UB内存大小和核心数量,并根据这些信息调整核心数量。 #### 2) 数据分块和内存优化策略 充分使用UB空间的原则。 需要考虑不同硬件的UB大小不同、是否开启double buffer、kernel侧API实现过程中是否需要临时数据的储存,综合考虑单核内切分的大小。 UB内存大小获取:通过GetCoreMemSize函数获取UB内存的大小,用于后续的数据切分计算。 Tile块计算:根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM和不同类型下的ubDataNum,计算出每个Tile块的数据数量。 数据切分:将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量。 设置切分参数:将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到RealDivTilingData对象中。 这些策略确保了数据在多个核心之间的均匀分布,并且在单个核心内进行了合理的切分,以提高并行处理的效率。 #### 3) tilingkey规划策略 不进行tilingkey划分,在kernel侧利用输入数据的类型来走不同的分支。 ### kernel侧设计方案 进行Init和Process两个阶段,其中Process包括数据搬入(CopyIn)、计算(Compute)、搬出(CopyOut)三个阶段。 1) 依照TBE实现,将bf16、int32、bool精度转换为fp32计算后,对于浮点数据使用RINT模式转换为原数据,对于int32使用TRUNC转换为原数据,对于bool数据不需要转换为原数据;高性能模式下,fp16以及fp32数据不需要转换精度,非高性能模式下(高精度模式),fp16需要将精度转换为fp32计算后转换为原数据。 2) Ascend C的RealDiv算子流程见下图。  ## 关联的Issue [#193](https://gitcode.com/cann/ops-math/issues/193) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 进行了ut测试、ascendoptest测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:RealDiv算子贡献 See merge request: cann/ops-math!319 | 7 个月前 | |
doc tools 工具扫描问题修改 Co-authored-by: gitee-yanglulu<yanglulul@h-partners.com> # message auto-generated for no-merge-commit merge: !1938 merge master into master doc tools 工具扫描问题修改 Created-by: gitee-yanglulu Commit-by: gitee-yanglulu Merged-by: cann-robot Description: doc tools 工具扫描问题修改 See merge request: cann/ops-math!1938 | 4 个月前 |
RealDiv
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件 | √ |
功能说明
-
算子功能:对两个输入向量进行浮点除运算,对于bool类型输入数据,输出数据是float。
-
计算公式:
y=x1/x2y=x1/x2 y=x1/x2
参数说明
| 参数名 | 输入/输出 | 描述 | 使用说明 | 数据类型 | 数据格式 | 维度(shape) | 非连续Tensor |
|---|---|---|---|---|---|---|---|
| self | 输入 | 待进行real_div计算的入参,公式中的x1。 | 无 | FLOAT、FLOAT16、BFLOAT16、INT32、BOOL | ND | 0-8 | √ |
| other | 输入 | 待进行real_div计算的入参,公式中的x2。 | 无 | FLOAT、FLOAT16、BFLOAT16、INT32、BOOL | ND | 0-8 | √ |
| out | 输出 | 待进行real_div计算的出参,公式中的y。 | shape与self相同。 | FLOAT、FLOAT16、BFLOAT16、INT32、FLOAT | ND | 0-8 | √ |
| workspaceSize | 输出 | 返回需要在Device侧申请的workspace大小。 | - | - | - | - | - |
| executor | 输出 | 返回op执行器,包含了算子计算流程。 | - | - | - | - | - |
约束说明
无
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_real_div.cpp | 通过test_aclnn_real_div接口方式调用RealDiv算子。 |
贡献说明
| 贡献者 | 贡献方 | 贡献算子 | 贡献时间 | 贡献内容 |
|---|---|---|---|---|
| Nice_try | 个人开发者 | RealDiv | 2025/11/26 | RealDiv算子适配开源仓 |