| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
docs目录基本概念md文件名改为英文 Co-authored-by: chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !4182 merge master into master docs目录基本概念md文件名改为英文 Created-by: gitcode-chenjiao Commit-by: chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> docs目录基本概念md文件名改为英文: 避免link中的中文字符引发的跳转异常,例如两段式接口.md变成%E4%B8%A4%E6%AE%B5%E5%BC%8F%E6%8E%A5%E5%8F%A3.md,不易于维护,可能导致其他平台跳转有问题。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#2283](https://gitcode.com/cann/ops-math/issues/2283) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ok ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> docs/zh/context所有md和对应的link ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!4182 | 1 个月前 | |
CANN训练营第二季社区任务 floor,Add the readme for the floor operator Co-authored-by: xchencehn<xchencehn@163.com> # message auto-generated for no-merge-commit merge: !162 merge master into master CANN训练营第二季社区任务 floor Created-by: xchencehn Commit-by: xchencehn Merged-by: cann-robot Description: ### 1 背景介绍 cann训练营二期算子开发任务 参考版本内置Floor算子的TBE实现,在昇腾NPU上使用Ascend C编程语言实现相同功能的算子。 1. 参考内置算子实现,需实现相同功能,包含相同数据类型和相同数据格式,其中int64,double数据类型可暂不支持,广播操作可暂不支持。 2. 算子性能要求持平原有TBE实现算子,当前可暂只支持在使用所有核进行计算时性能需不低于原有TBE算子95%。 3. TBE参考实现:   kernel实现:/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/impl/dynamic/   API路径:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/dsl ### 2 Floor算子现状分析 当前Floor算子的TBE实现如下: @register_operator_compute("Floor", op_mode="dynamic", support_fusion=True, support_bfp16=True) def floor_compute(input_x, output_y, kernel_name="floor"): dtype_x = input_x.dtype.lower() if not tbe_platform.api_check_support("tbe.dsl.floor", dtype_x): input_x = tbe.cast_to(input_x, "float16") if tbe_platform.api_check_support("tbe.dsl.floor", "f322f32"): x_f32 = tbe.cast_to(input_x, "float32") res = tbe.floor(x_f32, "float32") else: res = tbe.floor(input_x) res = tbe.cast_to(res, dtype_x) return res @register_operator("Floor") @para_check.check_op_params(para_check.REQUIRED_INPUT, para_check.REQUIRED_OUTPUT, para_check.KERNEL_NAME) def floor(input_x, output_y, kernel_name="floor"): ... check_list = ("bfloat16", "float16", "float32") para_check.check_dtype(input_dtype, check_list, param_name="input_x") ... 支持 bfloat16 , float16 , float32 三中数据格式,计算逻辑如下: 1. 如果 输入的 bfloat16 ,就转成 float16 2. 然后看只要硬件支持 f322f32 floor ,就把输入转为 float32 调用tbe.floor,只有不支持 f322f32 floor 才使用 float16 调用tbe.floor 3. 计算完成后转回原来输入的数据类型 mermaid graph TD A["开始 floor_compute"] --> B{"输入类型 dtype_x == bfloat16 ?"} B -- 是 --> C["将输入 cast_to float16"] B -- 否 --> D["保持输入类型不变"] C --> E{"硬件支持 f32→f32 floor ?"} D --> E E -- 是 --> F["将输入 cast_to float32<br>执行 tbe.floor(float32)"] E -- 否 --> G["执行 tbe.floor(当前类型)<br>(如 float16)"] F --> H["结果 cast_to 原始 dtype_x"] G --> H H --> I["返回最终结果"] ### 3 Ascend C 算子设计 产品支持:    Atlas A2 训练系列产品/Atlas 800I A2推理产品 接口支持:    适配Aclnn接口和图模式调用 数据类型支持: | 名称 | 类别 | dtype | format | shape | 介绍 | | --- | --- | --- | --- | --- | --- | | Input | 输入 | bfloat16, float16, float32 | ND | all | 输出 | | y | 输出 | bfloat16, float16, float32 | ND | 同输入 | 输出 | Host侧设计: 不需要广播,算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 1) 分核策略 Host 侧将输入视为一维向量,按总元素数切分; 每个核至少处理 512 个元素,且处理数据需满足 512B 对齐; 将对齐后的输入按 block 均分到各核,不能整除时前部分核会多分 1 个 block,形成大小核(big/small core); 每个核心内部根据 UB 大小计算单次可处理的 tile 大小,核心数据再分成若干 tile + 1 个尾块。 2) 数据分块和内存优化策略 开启double buffer; 根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM,计算出每个Tile块的数据数量; 将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量; 将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到FloorTilingData对象中。 3) tilingkey规划策略 不涉及 Kernel侧设计:    kernel执行分为Init和Process两个阶段,其中Process再分为CopyIn、Compute、CopyOut三步;    AscendC::Floor支持float16、float32,将bfloat16转成float32进行计算, 其他直接计算;    开启double buffer,将流水并行,提高运算效率。 mermaid graph TD A["开始 floor_compute"] --> B{"输入类型 TYPE_X == float32 ?"} B -- 否 --> C[" Ascend::Cast 到 float32"] C --> E["执行 Ascend::Floor 运算"] E --> F[" Ascend::Cast 到TYPE_X"] B -- 是 --> H["执行 Ascend::Floor 运算"] F --> G["返回最终结果"] H --> G ### 4 算子测试 采用aclnn调用测试 See merge request: cann/ops-math!162 | 6 个月前 | |
refactor: 统一 experimental 目录代码风格(全仓 clang-format) Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !3382 merge master into master refactor: 统一 experimental 目录代码风格(全仓 clang-format) Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 对 experimental/ 目录下的算子源码统一执行 clang-format 格式化,使全仓代码风格与根目录 .clang-format 配置保持一致。 本次改动范围: - 共 1279 个文件,涵盖 experimental/math(1151)与 experimental/conversion(128)两大目录。 - 涉及代码层级:op_kernel(490)、op_host(375)、op_api(200)、examples(171)、tests(156)、op_graph(37)。 - 文件类型:.cpp(834)、.h(445)。 - 涉及硬件分支目录:arch35(48)、arch32(2)。 改动内容为纯格式化(缩进、空格、对齐、单行语句拆分为多行、指针 * 贴合类型等),不涉及任何逻辑修改、新增文件或删除文件,代码语义保持不变。 ## 关联的Issue #1986 ## 测试 clang-format 格式化不改变代码语义,无需新增功能测试;格式化后的算子代码在编译与既有单测/二级冒烟用例下保持原有行为。 ## 文档更新 无。本次仅对源码做格式化,未修改任何文档文件。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化(clang-format 全仓风格统一) See merge request: cann/ops-math!3382 | 2 个月前 | |
refactor: 统一 experimental 目录代码风格(全仓 clang-format) Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !3382 merge master into master refactor: 统一 experimental 目录代码风格(全仓 clang-format) Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 对 experimental/ 目录下的算子源码统一执行 clang-format 格式化,使全仓代码风格与根目录 .clang-format 配置保持一致。 本次改动范围: - 共 1279 个文件,涵盖 experimental/math(1151)与 experimental/conversion(128)两大目录。 - 涉及代码层级:op_kernel(490)、op_host(375)、op_api(200)、examples(171)、tests(156)、op_graph(37)。 - 文件类型:.cpp(834)、.h(445)。 - 涉及硬件分支目录:arch35(48)、arch32(2)。 改动内容为纯格式化(缩进、空格、对齐、单行语句拆分为多行、指针 * 贴合类型等),不涉及任何逻辑修改、新增文件或删除文件,代码语义保持不变。 ## 关联的Issue #1986 ## 测试 clang-format 格式化不改变代码语义,无需新增功能测试;格式化后的算子代码在编译与既有单测/二级冒烟用例下保持原有行为。 ## 文档更新 无。本次仅对源码做格式化,未修改任何文档文件。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化(clang-format 全仓风格统一) See merge request: cann/ops-math!3382 | 2 个月前 | |
refactor: 统一 experimental 目录代码风格(全仓 clang-format) Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !3382 merge master into master refactor: 统一 experimental 目录代码风格(全仓 clang-format) Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 对 experimental/ 目录下的算子源码统一执行 clang-format 格式化,使全仓代码风格与根目录 .clang-format 配置保持一致。 本次改动范围: - 共 1279 个文件,涵盖 experimental/math(1151)与 experimental/conversion(128)两大目录。 - 涉及代码层级:op_kernel(490)、op_host(375)、op_api(200)、examples(171)、tests(156)、op_graph(37)。 - 文件类型:.cpp(834)、.h(445)。 - 涉及硬件分支目录:arch35(48)、arch32(2)。 改动内容为纯格式化(缩进、空格、对齐、单行语句拆分为多行、指针 * 贴合类型等),不涉及任何逻辑修改、新增文件或删除文件,代码语义保持不变。 ## 关联的Issue #1986 ## 测试 clang-format 格式化不改变代码语义,无需新增功能测试;格式化后的算子代码在编译与既有单测/二级冒烟用例下保持原有行为。 ## 文档更新 无。本次仅对源码做格式化,未修改任何文档文件。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化(clang-format 全仓风格统一) See merge request: cann/ops-math!3382 | 2 个月前 | |
refactor: 统一 experimental 目录代码风格(全仓 clang-format) Co-authored-by: songkai111<songkai16@huawei.com> # message auto-generated for no-merge-commit merge: !3382 merge master into master refactor: 统一 experimental 目录代码风格(全仓 clang-format) Created-by: songkai111 Commit-by: songkai111 Merged-by: cann-robot Description: ## 描述 对 experimental/ 目录下的算子源码统一执行 clang-format 格式化,使全仓代码风格与根目录 .clang-format 配置保持一致。 本次改动范围: - 共 1279 个文件,涵盖 experimental/math(1151)与 experimental/conversion(128)两大目录。 - 涉及代码层级:op_kernel(490)、op_host(375)、op_api(200)、examples(171)、tests(156)、op_graph(37)。 - 文件类型:.cpp(834)、.h(445)。 - 涉及硬件分支目录:arch35(48)、arch32(2)。 改动内容为纯格式化(缩进、空格、对齐、单行语句拆分为多行、指针 * 贴合类型等),不涉及任何逻辑修改、新增文件或删除文件,代码语义保持不变。 ## 关联的Issue #1986 ## 测试 clang-format 格式化不改变代码语义,无需新增功能测试;格式化后的算子代码在编译与既有单测/二级冒烟用例下保持原有行为。 ## 文档更新 无。本次仅对源码做格式化,未修改任何文档文件。 ## 类型标签 - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化(clang-format 全仓风格统一) See merge request: cann/ops-math!3382 | 2 个月前 | |
CANN训练营第二季社区任务 floor,Add the readme for the floor operator Co-authored-by: xchencehn<xchencehn@163.com> # message auto-generated for no-merge-commit merge: !162 merge master into master CANN训练营第二季社区任务 floor Created-by: xchencehn Commit-by: xchencehn Merged-by: cann-robot Description: ### 1 背景介绍 cann训练营二期算子开发任务 参考版本内置Floor算子的TBE实现,在昇腾NPU上使用Ascend C编程语言实现相同功能的算子。 1. 参考内置算子实现,需实现相同功能,包含相同数据类型和相同数据格式,其中int64,double数据类型可暂不支持,广播操作可暂不支持。 2. 算子性能要求持平原有TBE实现算子,当前可暂只支持在使用所有核进行计算时性能需不低于原有TBE算子95%。 3. TBE参考实现:   kernel实现:/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/ai_core/tbe/impl/dynamic/   API路径:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/dsl ### 2 Floor算子现状分析 当前Floor算子的TBE实现如下: @register_operator_compute("Floor", op_mode="dynamic", support_fusion=True, support_bfp16=True) def floor_compute(input_x, output_y, kernel_name="floor"): dtype_x = input_x.dtype.lower() if not tbe_platform.api_check_support("tbe.dsl.floor", dtype_x): input_x = tbe.cast_to(input_x, "float16") if tbe_platform.api_check_support("tbe.dsl.floor", "f322f32"): x_f32 = tbe.cast_to(input_x, "float32") res = tbe.floor(x_f32, "float32") else: res = tbe.floor(input_x) res = tbe.cast_to(res, dtype_x) return res @register_operator("Floor") @para_check.check_op_params(para_check.REQUIRED_INPUT, para_check.REQUIRED_OUTPUT, para_check.KERNEL_NAME) def floor(input_x, output_y, kernel_name="floor"): ... check_list = ("bfloat16", "float16", "float32") para_check.check_dtype(input_dtype, check_list, param_name="input_x") ... 支持 bfloat16 , float16 , float32 三中数据格式,计算逻辑如下: 1. 如果 输入的 bfloat16 ,就转成 float16 2. 然后看只要硬件支持 f322f32 floor ,就把输入转为 float32 调用tbe.floor,只有不支持 f322f32 floor 才使用 float16 调用tbe.floor 3. 计算完成后转回原来输入的数据类型 mermaid graph TD A["开始 floor_compute"] --> B{"输入类型 dtype_x == bfloat16 ?"} B -- 是 --> C["将输入 cast_to float16"] B -- 否 --> D["保持输入类型不变"] C --> E{"硬件支持 f32→f32 floor ?"} D --> E E -- 是 --> F["将输入 cast_to float32<br>执行 tbe.floor(float32)"] E -- 否 --> G["执行 tbe.floor(当前类型)<br>(如 float16)"] F --> H["结果 cast_to 原始 dtype_x"] G --> H H --> I["返回最终结果"] ### 3 Ascend C 算子设计 产品支持:    Atlas A2 训练系列产品/Atlas 800I A2推理产品 接口支持:    适配Aclnn接口和图模式调用 数据类型支持: | 名称 | 类别 | dtype | format | shape | 介绍 | | --- | --- | --- | --- | --- | --- | | Input | 输入 | bfloat16, float16, float32 | ND | all | 输出 | | y | 输出 | bfloat16, float16, float32 | ND | 同输入 | 输出 | Host侧设计: 不需要广播,算子计算过程不涉及数据的维度信息,故在host侧将数据视为一维向量,仅考虑数据个数,不考虑数据维度信息。 任务均分:coreNum 根据输入长度和块大小动态调整,确保每个核心处理的数据块数均匀。 批量搬运:tileBlockNum 和 tileDataNum 计算单次搬运的数据量,通过 finalSmallTileNum 和 finalBigTileNum 确定小核/大核的搬运次数,将多次搬运合并为批量操作,减少冗余开销。尾块的处理逻辑确保不完整块也能被合并到计算流程中,避免数据碎片。 1) 分核策略 Host 侧将输入视为一维向量,按总元素数切分; 每个核至少处理 512 个元素,且处理数据需满足 512B 对齐; 将对齐后的输入按 block 均分到各核,不能整除时前部分核会多分 1 个 block,形成大小核(big/small core); 每个核心内部根据 UB 大小计算单次可处理的 tile 大小,核心数据再分成若干 tile + 1 个尾块。 2) 数据分块和内存优化策略 开启double buffer; 根据UB内存大小和预定义的BLOCK_SIZE及BUFFER_NUM,计算出每个Tile块的数据数量; 将输入数据按照计算出的Tile块大小进行切分,计算出每个core需要处理的数据块数量和最后一个block的剩余数据量; 将计算出的切分参数(如每个core的数据量、Tile块大小等)设置到FloorTilingData对象中。 3) tilingkey规划策略 不涉及 Kernel侧设计:    kernel执行分为Init和Process两个阶段,其中Process再分为CopyIn、Compute、CopyOut三步;    AscendC::Floor支持float16、float32,将bfloat16转成float32进行计算, 其他直接计算;    开启double buffer,将流水并行,提高运算效率。 mermaid graph TD A["开始 floor_compute"] --> B{"输入类型 TYPE_X == float32 ?"} B -- 否 --> C[" Ascend::Cast 到 float32"] C --> E["执行 Ascend::Floor 运算"] E --> F[" Ascend::Cast 到TYPE_X"] B -- 是 --> H["执行 Ascend::Floor 运算"] F --> G["返回最终结果"] H --> G ### 4 算子测试 采用aclnn调用测试 See merge request: cann/ops-math!162 | 6 个月前 | |
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!2461 | 4 个月前 |
Floor
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件 | √ |
功能说明
-
算子功能:为输入张量的每一个元素向下取整。
-
计算公式:
outi=⌊inputi⌋out_i=⌊ input_i ⌋outi=⌊inputi⌋
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| self | 输入 | 待进行floor计算的入参,公式中的input_i。 | FLOAT、FLOAT16、BFLOAT16 | ND |
| out | 输出 | 待进行floor计算的出参,公式中的out_i。 | FLOAT、FLOAT16、BFLOAT16 | ND |
约束说明
无
调用说明
| 调用方式 | 调用样例 | 说明 |
|---|---|---|
| aclnn调用 | test_aclnn_floor | 通过aclnnFloor接口方式调用Floor算子。 |
贡献说明
| 贡献者 | 贡献方 | 贡献算子 | 贡献时间 | 贡献内容 |
|---|---|---|---|---|
| xchencehn | 个人开发者 | Floor | 2026/2/13 | Floor算子适配开源仓 |