| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat(non_zero): NonZero 内存优化 Co-authored-by: xiafengkou<luojiangtao4@huawei.com> # message auto-generated for no-merge-commit merge: !11935 merge master into master feat(non_zero): NonZero 内存优化 Created-by: xiafengkou Commit-by: xiafengkou Merged-by: cann-robot Description: ## 描述 【A2/A3】nonzero 内存优化:aclnnNonzero 支持传入 out 实际 shape,按真实非零数精确分配输出,替代原先"预分配最大可能 buffer + 执行后刷新真实 shape"的方案,对齐 GPU 内存使用。 **改动原因**:原方案要求调用方按上界(numel × rank 个 int64)预分配输出 buffer,算子执行完成后才通过刷新 shape 还原真实大小,超出实际非零数的部分全部浪费,内存占用远超 GPU 侧 torch.nonzero 的行为,无法满足内存一致性要求。 **实现方法**: - out 约定按实际非零数 N 精确分配([N, rank] int64,V1 布局),不再需要放大为上界暂存区;N=0 时 out 为空,op_api 早返回、不下发 kernel; - kernel 侧两遍扫描:Pass1 各核并行扫描本核元素段、仅统计非零个数写 workspace 计数区(KB 级,每核 32B 对齐槽位);SyncAll 后各核读回全部计数,本地累加出 total 与本核前缀;Pass2 重扫同一段,第 k 个非零元素直接写 y[d*total + prefix + k],各核写入区间按前缀互不相交,无写冲突、无额外同步;核 0 按 int64 协议写 outShape 供框架刷新动态 view shape; - op_api / 执行器侧按实际 nnz(count_nonzero)计算 out shape,精确分配; - 落地过程中的方案优化(同 PR 包含): 1. rank==1 向量快路径:按 4096 元素块双缓冲搬入 UB,向量 Compare 生成非零位脉冲 + 标量 popcount/ctz 提取下标,消除原标量扫描在 1D 大张量上的性能短板; 2. NaN 语义修复:向量 Compare 的 NE 对 NaN 不置位(unordered 语义)会把 NaN 误判为零,改用 EQ(==0) 脉冲 + 按位取反,保证 NaN 正确判为非零(与 torch.nonzero 一致)。 数据格式 ND;数据类型 fp32/fp16/bf16/bool/uint8/int8;支持确定性计算;不涉及资料更新。 ## 关联的Issue ## 测试 - ATK 精度回归(arch22):主集 + 边界集全部通过,含 6 个 all-NaN 专项、全零/全一/极值/fullrange、空 Tensor、64/128 位脉冲边界 shape,6 种 AiCore dtype 全覆盖; - 内存测试:无内存泄漏;精确分配模式下out按实际大小分配,workspace除系统16MB占用外降为KB级; - 性能对比(自定义 kernel vs 内置基线,同 dtype/shape/分布):性能劣化不超过 5%,满足验收标准。 ## 文档更新 <!-- 不涉及。 --> ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11935 | 6 天前 | |
nonzero support 960 Co-authored-by: biabu111<hebaojing1@huawei.com> # message auto-generated for no-merge-commit merge: !11536 merge master into master nonzero support 960 Created-by: biabu111 Commit-by: biabu111 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> nonzero 算子支持 ascend960 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue [#3624](https://gitcode.com/cann/ops-nn/issues/3624) https://gitcode.com/cann/ops-nn/issues/6855 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ST冒烟已测 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!11536 | 2 天前 | |
nonzero support ascend960 Co-authored-by: biabu111<hebaojing1@huawei.com> # message auto-generated for no-merge-commit merge: !12256 merge master into master nonzero support ascend960 Created-by: biabu111 Commit-by: biabu111 Merged-by: cann-robot Description: ## 描述 nonzero 支持 960 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> https://gitcode.com/cann/ops-nn/issues/6855 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 已冒烟ST通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!12256 | 1 天前 | |
feat(non_zero): NonZero 内存优化 Co-authored-by: xiafengkou<luojiangtao4@huawei.com> # message auto-generated for no-merge-commit merge: !11935 merge master into master feat(non_zero): NonZero 内存优化 Created-by: xiafengkou Commit-by: xiafengkou Merged-by: cann-robot Description: ## 描述 【A2/A3】nonzero 内存优化:aclnnNonzero 支持传入 out 实际 shape,按真实非零数精确分配输出,替代原先"预分配最大可能 buffer + 执行后刷新真实 shape"的方案,对齐 GPU 内存使用。 **改动原因**:原方案要求调用方按上界(numel × rank 个 int64)预分配输出 buffer,算子执行完成后才通过刷新 shape 还原真实大小,超出实际非零数的部分全部浪费,内存占用远超 GPU 侧 torch.nonzero 的行为,无法满足内存一致性要求。 **实现方法**: - out 约定按实际非零数 N 精确分配([N, rank] int64,V1 布局),不再需要放大为上界暂存区;N=0 时 out 为空,op_api 早返回、不下发 kernel; - kernel 侧两遍扫描:Pass1 各核并行扫描本核元素段、仅统计非零个数写 workspace 计数区(KB 级,每核 32B 对齐槽位);SyncAll 后各核读回全部计数,本地累加出 total 与本核前缀;Pass2 重扫同一段,第 k 个非零元素直接写 y[d*total + prefix + k],各核写入区间按前缀互不相交,无写冲突、无额外同步;核 0 按 int64 协议写 outShape 供框架刷新动态 view shape; - op_api / 执行器侧按实际 nnz(count_nonzero)计算 out shape,精确分配; - 落地过程中的方案优化(同 PR 包含): 1. rank==1 向量快路径:按 4096 元素块双缓冲搬入 UB,向量 Compare 生成非零位脉冲 + 标量 popcount/ctz 提取下标,消除原标量扫描在 1D 大张量上的性能短板; 2. NaN 语义修复:向量 Compare 的 NE 对 NaN 不置位(unordered 语义)会把 NaN 误判为零,改用 EQ(==0) 脉冲 + 按位取反,保证 NaN 正确判为非零(与 torch.nonzero 一致)。 数据格式 ND;数据类型 fp32/fp16/bf16/bool/uint8/int8;支持确定性计算;不涉及资料更新。 ## 关联的Issue ## 测试 - ATK 精度回归(arch22):主集 + 边界集全部通过,含 6 个 all-NaN 专项、全零/全一/极值/fullrange、空 Tensor、64/128 位脉冲边界 shape,6 种 AiCore dtype 全覆盖; - 内存测试:无内存泄漏;精确分配模式下out按实际大小分配,workspace除系统16MB占用外降为KB级; - 性能对比(自定义 kernel vs 内置基线,同 dtype/shape/分布):性能劣化不超过 5%,满足验收标准。 ## 文档更新 <!-- 不涉及。 --> ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [x] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: ## AI/Agent生成声明 - [x] AI辅助编写 See merge request: cann/ops-nn!11935 | 6 天前 | |
format cpp Co-authored-by: yang-di52<yangdi52@huawei.com> # message auto-generated for no-merge-commit merge: !6784 merge issue_fix into master format cpp Created-by: yang-di52 Commit-by: yang-di52 Merged-by: cann-robot Description: ## 描述 批量刷新cpp代码格式 ## 关联的Issue [#3791](https://gitcode.com/cann/ops-nn/issues/3791) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码格式化 ## AI/Agent生成声明 <!-- [x] 表示选中 --> - [ ] AI辅助编写 See merge request: cann/ops-nn!6784 | 3 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 6 天前 | ||
| 2 天前 | ||
| 1 天前 | ||
| 6 天前 | ||
| 3 个月前 |