文件最后提交记录最后更新时间
optimize the performance of aicpu cumsum operator Co-authored-by: ZhaiPeiChao<zhaipeichao@huawei.com> # message auto-generated for no-merge-commit merge: !2262 merge master into master optimize the performance of aicpu cumsum operator Created-by: ZhaiPeiChao Commit-by: ZhaiPeiChao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 对Cumsum(累积和)算子的AI CPU内核实现进行了大规模重构与性能优化,旨在解决原实现中计算逻辑复杂、并行策略单一、内存访问模式不佳以及复数类型处理效率低下的问题。同时,对内核头文件进行了代码风格统一和接口规范化重构,并新增了全面的单元测试用例以覆盖不同数据类型、输入形状和并行路径,确保优化后算子的功能正确性与稳定性。 性能瓶颈及优化点: 1. 并行化维度错误 - 原始代码只在 outer 维度上并行。当 axis = -1(最后一个轴)时,outer = 1,导致即使数据量超过 512KB 阈值,也只能用单核计算。 2. 内层循环分支开销 - 原始代码在 depth 循环的每次迭代内检查 if (exclusive) 和 if (reverse)。 3. reverse 方向的冗余索引计算 - reverse 模式下,每次迭代都做条件索引调整: 4. Complex 类型冗余内存分配 - CumsumCompute2 对 complex 类型分配两个完整 vector<double>(real 和 imag),然后逐元素拆分/合并。 5. 不连续内存访问模式(tride-outer 跳跃访问)- 原始代码逐序列处理:对一个 (inner_idx, outer_idx) 的序列,depth 方向的访问地址跳跃 outer * sizeof(T) 字节。 6. 无法向量化 - 原始代码每个序列独立计算,depth 循环内是标量累加 acc += input[index]。 7. 指针别名影响编译器优化 - 编译器无法证明 input_data 和 output_data 指向不重叠的内存区域,它必须保守地假设写入 out_row[o] 可能改变 in_row[o+1] 的值。 8. 下溢风险 - GetCPUNum() 返回 uint32_t,直接减去 kResvCpuNum(=2) 可能导致无符号整数下溢翻转为极大值。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> issue [#1290](https://gitcode.com/cann/ops-math/issues/1290) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 使用性能优化后代码中,在典型shape下基于Ascend910B环境进行测试,测试结果如下: | 序号 | shape | 优化前/us | 优化后/us | 性能提升 | | -- | -- | -- | -- | -- | |1| [65536] | 270 | 113 | 2.39x | |2| [10485760] | 22696 | 19295 | 1.18x | |3| [8192,1024] | 16518 | 3120 | 4.18x | |4| [1,1000000] | 2027 | 1723 | 1.18x | |5| [2,256,32768] | 36496 | 11100 | 3.29x | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!22621 个月前
optimize the performance of aicpu cumsum operator Co-authored-by: ZhaiPeiChao<zhaipeichao@huawei.com> # message auto-generated for no-merge-commit merge: !2262 merge master into master optimize the performance of aicpu cumsum operator Created-by: ZhaiPeiChao Commit-by: ZhaiPeiChao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 对Cumsum(累积和)算子的AI CPU内核实现进行了大规模重构与性能优化,旨在解决原实现中计算逻辑复杂、并行策略单一、内存访问模式不佳以及复数类型处理效率低下的问题。同时,对内核头文件进行了代码风格统一和接口规范化重构,并新增了全面的单元测试用例以覆盖不同数据类型、输入形状和并行路径,确保优化后算子的功能正确性与稳定性。 性能瓶颈及优化点: 1. 并行化维度错误 - 原始代码只在 outer 维度上并行。当 axis = -1(最后一个轴)时,outer = 1,导致即使数据量超过 512KB 阈值,也只能用单核计算。 2. 内层循环分支开销 - 原始代码在 depth 循环的每次迭代内检查 if (exclusive) 和 if (reverse)。 3. reverse 方向的冗余索引计算 - reverse 模式下,每次迭代都做条件索引调整: 4. Complex 类型冗余内存分配 - CumsumCompute2 对 complex 类型分配两个完整 vector<double>(real 和 imag),然后逐元素拆分/合并。 5. 不连续内存访问模式(tride-outer 跳跃访问)- 原始代码逐序列处理:对一个 (inner_idx, outer_idx) 的序列,depth 方向的访问地址跳跃 outer * sizeof(T) 字节。 6. 无法向量化 - 原始代码每个序列独立计算,depth 循环内是标量累加 acc += input[index]。 7. 指针别名影响编译器优化 - 编译器无法证明 input_data 和 output_data 指向不重叠的内存区域,它必须保守地假设写入 out_row[o] 可能改变 in_row[o+1] 的值。 8. 下溢风险 - GetCPUNum() 返回 uint32_t,直接减去 kResvCpuNum(=2) 可能导致无符号整数下溢翻转为极大值。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> issue [#1290](https://gitcode.com/cann/ops-math/issues/1290) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 使用性能优化后代码中,在典型shape下基于Ascend910B环境进行测试,测试结果如下: | 序号 | shape | 优化前/us | 优化后/us | 性能提升 | | -- | -- | -- | -- | -- | |1| [65536] | 270 | 113 | 2.39x | |2| [10485760] | 22696 | 19295 | 1.18x | |3| [8192,1024] | 16518 | 3120 | 4.18x | |4| [1,1000000] | 2027 | 1723 | 1.18x | |5| [2,256,32768] | 36496 | 11100 | 3.29x | ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!22621 个月前
feat: migrate math+conversion json ops to opdef pipeline Co-authored-by: zhaowenrui666<zhaowenrui7@huawei.com> # message auto-generated for no-merge-commit merge: !2130 merge mathdef into master feat: migrate math+conversion json ops to opdef pipeline Created-by: zhaowenrui666 Commit-by: zhaowenrui666 Merged-by: cann-robot Description: ## 描述 math仓aicpu算子信息库由json融合修改为op def文件,修改注册方式以及工程适配 ## 关联的Issue https://gitcode.com/cann/ops-math/issues/1271 ## 测试 本次按 ENABLE_CUSTOM=ON 的 custom 路径验收,已验证 OpDef -> libaicpu_ops.so -> op_build --aicpu -> aicpu_kernel.ini -> parser_ini.py -> cust_aicpu_kernel.json 链路跑通,相关产物已生成并校验通过。AICPU before/after 与 I/O 对比已按新规则重评:input/output -> input0/output0 视为规范化差异;RightShift、SearchSorted、Sinh 在整改前 JSON 缺 I/O,但已对齐 CANN 基线 aicpu_kernel.ini,不判缺失;AddN: input0 -> dynamic_input0 和 AddFake -> Add 也已确认接受,不作为阻塞项。 AICore 回归已补做,before/after 经 parser_ini.py 转 json 后无差异。综合结论:本提交满足当前 OpDef 整改验收标准,可通过。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-math!21301 个月前