| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
feat: add aclsparseScatter operator for Ascend910B (arch22) Co-authored-by: sushaGo<15991853807@163.com> # message auto-generated for no-merge-commit merge: !59 merge feat/scatter-operator into master feat: add aclsparseScatter operator for Ascend910B (arch22) Created-by: sushaGo Commit-by: sushaGo Merged-by: cann-robot Description: ## 描述 为 Ascend 910B(arch22)新增 aclsparseScatter 算子实现,支持将稀疏向量的非零元素按索引散布到稠密向量,执行 y[indices[i]] = values[i]。 改动原因: - ops-sparse 库此前缺少稀疏向量散布(scatter)算子,无法覆盖稀疏更新、embedding 梯度散布、图算法等场景中频繁出现的稀疏向量到稠密向量散布需求 - 需对齐 NVIDIA cuSPARSE cusparseScatter 的接口语义,补齐 CANN Ascend 910B(Atlas A2 训练/推理、A3 训练)系列稀疏计算能力 改动方法: - 新增对外接口 aclsparseScatter,定义于 include/cann_ops_sparse.h - 基于多核 Vector 并发模型实现 kernel(sparse/scatter/arch22/):host 按 coreNnzCount/coreNnzOffset 将 nnz 切分到各核,每核独立处理自身分片;kernel 入口 blockIdx 守卫提前返回,run-length 合并检测将连续索引段聚合为一次批量 DataCopyPad 写出,孤立点逐元素写,配 DoubleBuffer 流水;indices 先 Cast int64→int32 用于寻址 - host 侧 aclsparseScatter 数据全程驻留 Device,无 D2H 往返,仅 Tiling 数据 H2D 拷贝;nnz==0 早退 - 参照 spmv 测试结构重写 scatter 测试(test/scatter/arch22/scatter_test.cpp),采用模板化单用例 + 内联 CPU golden + bit-exact Verification + TestStats/RunAndTrack/RunRandomParams 骨架 - 新增完整算子文档 sparse/scatter/README.md ## 关联的Issue 关联Issue #101 ## 测试 - 新增 test/scatter/ 测试用例,覆盖 contiguous / reverse / stride / random-unique 四种互异索引分布,以及特殊值(0/-0/负数/大值/Inf/NaN)、非对齐 nnz、随机参数采样、1M 大规模等场景,共 56 例 - 提供 CPU 参考实现(ScatterCpu)对比 NPU 计算结果,按非计算类算子标准做逐位一致(bit-exact)判定 - 在 Ascend 910B 上验证正确性,56 例全部通过(通过率 100%)  ## 文档更新 - 新增 sparse/scatter/README.md:包含算子概述(含 vecX 分离存储格式说明)、接口函数原型、参数说明、支持的数据类型、约束条件(含「索引去重有序」确定性约束、索引范围)、调用示例 - 更新 include/cann_ops_sparse.h:新增 aclsparseScatter 接口声明 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-sparse!59 | 1 个月前 | |
feat: 新增 aclsparseScatter 算子(Ascend950/arch35) Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge feat/aclsparse-scatter into master feat: 新增 aclsparseScatter 算子(Ascend950/arch35) Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 新增 aclsparseScatter 算子,对标 cuSPARSE cusparseScatter 接口。 ### 功能概述 将稀疏向量 X 的非零值散布(scatter)到稠密向量 Y 的对应位置,原地更新 Y: Y[X.indices[i]] = X.values[i], i ∈ [0, X.nnz) 该接口为 Generic API(描述符模式:SpVec + DnVec),语义为纯数据搬运,不涉及浮点运算,输出与输入 X.values 逐位一致(bitwise exact)。 ### 实现架构 基于 Ascend C SIMT(__simt_vf__ + grid-stride loop)线程级并行实现,目标架构 arch35 / Ascend950。 ### 支持的数据类型 / 索引类型 | 维度 | 支持取值 | |------|----------| | 值类型(valueType) | FP32 / FP16 / BF16 | | 索引类型(idxType) | I32 / I64 | | 索引基址(idxBase) | ZERO / ONE | ### 关键语义 - idxBase=ONE 时内部减 1 调整 - 索引未排序允许 - 索引重复 last-write-wins(行为不确定,与 cuSPARSE 一致) - nnz=0 快速返回,不启动 kernel - 异步执行,无需 workspace ## 关联的Issue 无 ## 测试 新增 ST 测试 71 条用例,全部通过: - **L0 阈值用例 13 条**:基础 dtype/idxType/idxBase 组合 + nnz=0/1/full + 特殊值 - **L1 功能用例 38 条**:两两组合 + 边界 + 大规模(1M)+ 稠密/稀疏密度 - **L2 白盒用例 20 条**:多核边界(nnz=255/256/257/512/513/768/769/1024)+ tail-block + 全 6 模板特化(I32/I64 × FP32/FP16/BF16) 新增性能测试 1 套(scatter_perf_test.cpp)。 验收情况:CP1-CP5 全通过。 ## 文档更新 新增 sparse/scatter/README.md:算子使用文档,含功能描述、接口原型、参数说明、支持数据类型、约束说明、返回值/错误码、调用示例、与 cuSPARSE cusparseScatter 对标说明。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-sparse!87 | 1 个月前 | |
feat: add aclsparseScatter operator for Ascend910B (arch22) Co-authored-by: sushaGo<15991853807@163.com> # message auto-generated for no-merge-commit merge: !59 merge feat/scatter-operator into master feat: add aclsparseScatter operator for Ascend910B (arch22) Created-by: sushaGo Commit-by: sushaGo Merged-by: cann-robot Description: ## 描述 为 Ascend 910B(arch22)新增 aclsparseScatter 算子实现,支持将稀疏向量的非零元素按索引散布到稠密向量,执行 y[indices[i]] = values[i]。 改动原因: - ops-sparse 库此前缺少稀疏向量散布(scatter)算子,无法覆盖稀疏更新、embedding 梯度散布、图算法等场景中频繁出现的稀疏向量到稠密向量散布需求 - 需对齐 NVIDIA cuSPARSE cusparseScatter 的接口语义,补齐 CANN Ascend 910B(Atlas A2 训练/推理、A3 训练)系列稀疏计算能力 改动方法: - 新增对外接口 aclsparseScatter,定义于 include/cann_ops_sparse.h - 基于多核 Vector 并发模型实现 kernel(sparse/scatter/arch22/):host 按 coreNnzCount/coreNnzOffset 将 nnz 切分到各核,每核独立处理自身分片;kernel 入口 blockIdx 守卫提前返回,run-length 合并检测将连续索引段聚合为一次批量 DataCopyPad 写出,孤立点逐元素写,配 DoubleBuffer 流水;indices 先 Cast int64→int32 用于寻址 - host 侧 aclsparseScatter 数据全程驻留 Device,无 D2H 往返,仅 Tiling 数据 H2D 拷贝;nnz==0 早退 - 参照 spmv 测试结构重写 scatter 测试(test/scatter/arch22/scatter_test.cpp),采用模板化单用例 + 内联 CPU golden + bit-exact Verification + TestStats/RunAndTrack/RunRandomParams 骨架 - 新增完整算子文档 sparse/scatter/README.md ## 关联的Issue 关联Issue #101 ## 测试 - 新增 test/scatter/ 测试用例,覆盖 contiguous / reverse / stride / random-unique 四种互异索引分布,以及特殊值(0/-0/负数/大值/Inf/NaN)、非对齐 nnz、随机参数采样、1M 大规模等场景,共 56 例 - 提供 CPU 参考实现(ScatterCpu)对比 NPU 计算结果,按非计算类算子标准做逐位一致(bit-exact)判定 - 在 Ascend 910B 上验证正确性,56 例全部通过(通过率 100%)  ## 文档更新 - 新增 sparse/scatter/README.md:包含算子概述(含 vecX 分离存储格式说明)、接口函数原型、参数说明、支持的数据类型、约束条件(含「索引去重有序」确定性约束、索引范围)、调用示例 - 更新 include/cann_ops_sparse.h:新增 aclsparseScatter 接口声明 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-sparse!59 | 1 个月前 | |
feat: 新增 aclsparseScatter 算子(Ascend950/arch35) Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge feat/aclsparse-scatter into master feat: 新增 aclsparseScatter 算子(Ascend950/arch35) Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 新增 aclsparseScatter 算子,对标 cuSPARSE cusparseScatter 接口。 ### 功能概述 将稀疏向量 X 的非零值散布(scatter)到稠密向量 Y 的对应位置,原地更新 Y: Y[X.indices[i]] = X.values[i], i ∈ [0, X.nnz) 该接口为 Generic API(描述符模式:SpVec + DnVec),语义为纯数据搬运,不涉及浮点运算,输出与输入 X.values 逐位一致(bitwise exact)。 ### 实现架构 基于 Ascend C SIMT(__simt_vf__ + grid-stride loop)线程级并行实现,目标架构 arch35 / Ascend950。 ### 支持的数据类型 / 索引类型 | 维度 | 支持取值 | |------|----------| | 值类型(valueType) | FP32 / FP16 / BF16 | | 索引类型(idxType) | I32 / I64 | | 索引基址(idxBase) | ZERO / ONE | ### 关键语义 - idxBase=ONE 时内部减 1 调整 - 索引未排序允许 - 索引重复 last-write-wins(行为不确定,与 cuSPARSE 一致) - nnz=0 快速返回,不启动 kernel - 异步执行,无需 workspace ## 关联的Issue 无 ## 测试 新增 ST 测试 71 条用例,全部通过: - **L0 阈值用例 13 条**:基础 dtype/idxType/idxBase 组合 + nnz=0/1/full + 特殊值 - **L1 功能用例 38 条**:两两组合 + 边界 + 大规模(1M)+ 稠密/稀疏密度 - **L2 白盒用例 20 条**:多核边界(nnz=255/256/257/512/513/768/769/1024)+ tail-block + 全 6 模板特化(I32/I64 × FP32/FP16/BF16) 新增性能测试 1 套(scatter_perf_test.cpp)。 验收情况:CP1-CP5 全通过。 ## 文档更新 新增 sparse/scatter/README.md:算子使用文档,含功能描述、接口原型、参数说明、支持数据类型、约束说明、返回值/错误码、调用示例、与 cuSPARSE cusparseScatter 对标说明。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-sparse!87 | 1 个月前 | |
feat: 新增 aclsparseScatter 算子(Ascend950/arch35) Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !87 merge feat/aclsparse-scatter into master feat: 新增 aclsparseScatter 算子(Ascend950/arch35) Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 新增 aclsparseScatter 算子,对标 cuSPARSE cusparseScatter 接口。 ### 功能概述 将稀疏向量 X 的非零值散布(scatter)到稠密向量 Y 的对应位置,原地更新 Y: Y[X.indices[i]] = X.values[i], i ∈ [0, X.nnz) 该接口为 Generic API(描述符模式:SpVec + DnVec),语义为纯数据搬运,不涉及浮点运算,输出与输入 X.values 逐位一致(bitwise exact)。 ### 实现架构 基于 Ascend C SIMT(__simt_vf__ + grid-stride loop)线程级并行实现,目标架构 arch35 / Ascend950。 ### 支持的数据类型 / 索引类型 | 维度 | 支持取值 | |------|----------| | 值类型(valueType) | FP32 / FP16 / BF16 | | 索引类型(idxType) | I32 / I64 | | 索引基址(idxBase) | ZERO / ONE | ### 关键语义 - idxBase=ONE 时内部减 1 调整 - 索引未排序允许 - 索引重复 last-write-wins(行为不确定,与 cuSPARSE 一致) - nnz=0 快速返回,不启动 kernel - 异步执行,无需 workspace ## 关联的Issue 无 ## 测试 新增 ST 测试 71 条用例,全部通过: - **L0 阈值用例 13 条**:基础 dtype/idxType/idxBase 组合 + nnz=0/1/full + 特殊值 - **L1 功能用例 38 条**:两两组合 + 边界 + 大规模(1M)+ 稠密/稀疏密度 - **L2 白盒用例 20 条**:多核边界(nnz=255/256/257/512/513/768/769/1024)+ tail-block + 全 6 模板特化(I32/I64 × FP32/FP16/BF16) 新增性能测试 1 套(scatter_perf_test.cpp)。 验收情况:CP1-CP5 全通过。 ## 文档更新 新增 sparse/scatter/README.md:算子使用文档,含功能描述、接口原型、参数说明、支持数据类型、约束说明、返回值/错误码、调用示例、与 cuSPARSE cusparseScatter 对标说明。 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-sparse!87 | 1 个月前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 1 个月前 |