7月社区任务-SpGEMM算子开发任务书【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions基础信息技术标签算子开发适配硬件Ascend 950PR开源仓地址https://gitcode.com/cann/ops-sparseCANN 版本算子开源仓指定版本开发语言Ascend C Caclsparse 接口对标参考cuSPARSE cusparseSpGEMM §6.6.14Generic API任务概述参考 cuSPARSESpGEMM稀疏矩阵 × 稀疏矩阵在昇腾 NPU 上实现Ascend C Kernel aclsparse C 接口完成设计、开发、测试全流程验收后合入ops-sparse。验收口径C 层aclsparseSpGEMM*系列接口与 cuSPARSE 调用流程、语义对齐命名与目录结构参考现有aclsparseSpMM/src/spmm。功能定义$$ C \alpha \cdot op(A) \cdot op(B) \beta \cdot C $$A ∈ R(m×k)、B ∈ R(k×n)、C ∈ R(m×n) 均为稀疏 CSRα、β 为标量SpGEMM 输出 C 的稀疏结构由乘法确定非零元值由乘积累加得到。核心开发要求及验收标准1. C 层接口必选对齐 cuSPARSE / ops-sparse 命名接口命名、三阶段或多阶段流程须参考include/cann_ops_sparse.h中aclsparseSpMM及 cuSPARSEcusparseSpGEMM新增aclsparseSpGEMM*至cann_ops_sparse.h/* 描述符 */ aclsparseStatus_t aclsparseSpGEMMCreateDescr(aclsparseSpGEMMDescr_t *descr); aclsparseStatus_t aclsparseSpGEMMDestroyDescr(aclsparseSpGEMMDescr_t descr); /* 阶段 1工作估算 */ aclsparseStatus_t aclsparseSpGEMMWorkEstimation( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr, size_t *bufferSize1, void *externalBuffer1); aclsparseStatus_t aclsparseSpGEMMGetNumProducts( aclsparseSpGEMMDescr_t spgemmDescr, int64_t *numProds); /* 阶段 2内存估算ALG2/ALG3 */ aclsparseStatus_t aclsparseSpGEMMEstimateMemory( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr, float chunkFraction, size_t *bufferSize3, void *externalBuffer3, size_t *bufferSize2); /* 阶段 3计算 */ aclsparseStatus_t aclsparseSpGEMMCompute( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr, size_t *bufferSize2, void *externalBuffer2); /* 阶段 4拷贝结果到 matC若 compute 与 copy 分离 */ aclsparseStatus_t aclsparseSpGEMMCopy( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr);2. 数据类型支持对标范围对齐 cuSPARSE cusparseSpGEMM §6.6.14 官方 dtype 表。SpGEMM仅同精度稀疏matA/matBvalues、稀疏matCvalues、computeType四者 dtype 相同文档无 Mixed-precision 小节。列含义A/B/C分别为三个稀疏矩阵的 values dtype与computeType一致。格式与索引项目要求稀疏格式CSRaclsparseCreateCsr索引int32ACL_SPARSE_INDEX_32IopA / opB仅NON_TRANSPOSE与 cuSPARSE §6.6.14 一致接口保留形参传入TRANSPOSE须返回错误SpGEMM 为全新算子ops-sparse 仓当前无src/spgemm/aclsparseSpGEMM* Kernel 均须从零交付。2.1 同精度Uniform-precisionIDA / B / C / computeTypecuSPARSE 枚举ACL / KernelU1fp32CUDA_R_32F待实现U2fp16CUDA_R_16F待实现U3bf16CUDA_R_16BF待实现cuSPARSE 文档将CUDA_R_16F/CUDA_R_16BF同精度行标为[DEPRECATED]本任务仍须对齐 cuSPARSE 官方 fp16/bf16 路径。3. 算子约束输出 C 的 CSR 列索引须 sorted与 cuSPARSE 一致opA、opB须均为NON_TRANSPOSEcuSPARSE SpGEMM 不支持转置输入 A/B 索引须 sorted与 cuSPARSE 一致确定性对标 cuSPARSE bit-wise 确定性float32。4. 功能验收用例编号场景参考TC-01小矩阵 SpGEMMcuSPARSE sample / 自行构造TC-02空矩阵 / 零 nnz 边界自行构造TC-03alpha/beta ≠ 1cuSPARSE 样例TC-04高稀疏度大图性能用例TC-05aclsparse 多阶段调用完整性test/spmm/spmm_test.cpp模式5. 性能要求对标cuSPARSE SpGEMMA100NPU 性能须达到 GPU 参考实现的1.0 倍及以上即 ≥1.0×。固定参考用例必测 3 组在NVIDIA A100上实测 cuSPARSE 耗时填入「GPU 参考耗时」取多次运行avg作为 NPU 验收基准编号场景规模 (m×k×n)nnz(A)nnz(B)dtypeGPU 参考耗时 (μs)达标要求01标准 fp32 SpGEMM128×128×128819819fp323654NPU ≥ 1.0×02零 nnz 边界128×128×12800fp3213NPU ≥ 1.0×03α/β 非 1128×64×128163163fp322404NPU ≥ 1.0×泛化覆盖范围另抽 200 组用例由下列维度组合抽样或网格扫描生成须附完整用例列表性能达标 ≥1.0×维度覆盖范围矩阵规模(m,k,n)12810⁴ 及以上输出nnz(C)从 10² 到 10⁶输入稀疏度nnz(A)、nnz(B)独立变化稀疏率约 0.01%10%dtypefp32U1必测fp16 / bf16 同精度U2 / U3实现后须纳入 200 组抽样α / βαβ1外含α≠1或β≠1至少 10 组算法阶段WorkEstimation→Compute→Copy全链路边界空矩阵 / 零 nnz高稀疏度大图nnz≥10⁵输出 nnz 膨胀显著样本 5 组6. 精度要求算子计算精度需严格满足《生态算子开源精度标准》采用 AscendOpTest 测试。真值以cuSPARSE CPU 标杆或双精度参考为准。单标杆不满足时采用 ATK 双标杆cv_fused_double_benchmarkNPU/同精度 CPU 最大相对误差比例 ≤2平均相对误差比例 ≤1.2均方根误差比例 ≤1.2。7. 接口分层aclsparseSpGEMM*必选C 验收基准 → Ascend C Kernel必选8. 验收交付件1, 自测用例、测试结果报告、测试步骤指导文档2, 算子代码的私仓邀请链接、代码仓路径、分支、算子目录9. 文档规范要求算子设计文档需根据参考模板填写内容完整、格式规范且必须通过评审自验证报告需要覆盖所有功能场景参考xxx算子自验证报告含测试用例执行日志/截图、整体测试通过截图、性能数据截图可清晰指导算子使用与测试自验证报告含 aclsparse 测试、AscendOpTest/ATK 日志。README 文档内容完整、规范含aclsparse C调用示例。10. PR 合入路径https://gitcode.com/cann/ops-sparse/tree/master/src/spgemm环境获取开源仓提供100小时免费时长请不使用时及时关闭用时耗尽前请务必保存相关资料建议及时提交备份。使用 hidevlab notebook 算力。如需额外环境资源请联系昇腾小助手。特别注意事项命名必须与 ops-sparse 现有 SpMM 一致aclsparse前缀、驼峰 SpGEMM、目录src/spgemmSpGEMM 多阶段 workspace 须文档化参考 cuSPARSE ALG1/2/3 内存策略开发前阅读【社区任务】流程及注意事项。【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
CANN社区SpGEMM算子开发任务书
发布时间:2026/7/5 16:59:22
7月社区任务-SpGEMM算子开发任务书【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions基础信息技术标签算子开发适配硬件Ascend 950PR开源仓地址https://gitcode.com/cann/ops-sparseCANN 版本算子开源仓指定版本开发语言Ascend C Caclsparse 接口对标参考cuSPARSE cusparseSpGEMM §6.6.14Generic API任务概述参考 cuSPARSESpGEMM稀疏矩阵 × 稀疏矩阵在昇腾 NPU 上实现Ascend C Kernel aclsparse C 接口完成设计、开发、测试全流程验收后合入ops-sparse。验收口径C 层aclsparseSpGEMM*系列接口与 cuSPARSE 调用流程、语义对齐命名与目录结构参考现有aclsparseSpMM/src/spmm。功能定义$$ C \alpha \cdot op(A) \cdot op(B) \beta \cdot C $$A ∈ R(m×k)、B ∈ R(k×n)、C ∈ R(m×n) 均为稀疏 CSRα、β 为标量SpGEMM 输出 C 的稀疏结构由乘法确定非零元值由乘积累加得到。核心开发要求及验收标准1. C 层接口必选对齐 cuSPARSE / ops-sparse 命名接口命名、三阶段或多阶段流程须参考include/cann_ops_sparse.h中aclsparseSpMM及 cuSPARSEcusparseSpGEMM新增aclsparseSpGEMM*至cann_ops_sparse.h/* 描述符 */ aclsparseStatus_t aclsparseSpGEMMCreateDescr(aclsparseSpGEMMDescr_t *descr); aclsparseStatus_t aclsparseSpGEMMDestroyDescr(aclsparseSpGEMMDescr_t descr); /* 阶段 1工作估算 */ aclsparseStatus_t aclsparseSpGEMMWorkEstimation( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr, size_t *bufferSize1, void *externalBuffer1); aclsparseStatus_t aclsparseSpGEMMGetNumProducts( aclsparseSpGEMMDescr_t spgemmDescr, int64_t *numProds); /* 阶段 2内存估算ALG2/ALG3 */ aclsparseStatus_t aclsparseSpGEMMEstimateMemory( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr, float chunkFraction, size_t *bufferSize3, void *externalBuffer3, size_t *bufferSize2); /* 阶段 3计算 */ aclsparseStatus_t aclsparseSpGEMMCompute( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr, size_t *bufferSize2, void *externalBuffer2); /* 阶段 4拷贝结果到 matC若 compute 与 copy 分离 */ aclsparseStatus_t aclsparseSpGEMMCopy( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstSpMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSpGEMMAlg_t alg, aclsparseSpGEMMDescr_t spgemmDescr);2. 数据类型支持对标范围对齐 cuSPARSE cusparseSpGEMM §6.6.14 官方 dtype 表。SpGEMM仅同精度稀疏matA/matBvalues、稀疏matCvalues、computeType四者 dtype 相同文档无 Mixed-precision 小节。列含义A/B/C分别为三个稀疏矩阵的 values dtype与computeType一致。格式与索引项目要求稀疏格式CSRaclsparseCreateCsr索引int32ACL_SPARSE_INDEX_32IopA / opB仅NON_TRANSPOSE与 cuSPARSE §6.6.14 一致接口保留形参传入TRANSPOSE须返回错误SpGEMM 为全新算子ops-sparse 仓当前无src/spgemm/aclsparseSpGEMM* Kernel 均须从零交付。2.1 同精度Uniform-precisionIDA / B / C / computeTypecuSPARSE 枚举ACL / KernelU1fp32CUDA_R_32F待实现U2fp16CUDA_R_16F待实现U3bf16CUDA_R_16BF待实现cuSPARSE 文档将CUDA_R_16F/CUDA_R_16BF同精度行标为[DEPRECATED]本任务仍须对齐 cuSPARSE 官方 fp16/bf16 路径。3. 算子约束输出 C 的 CSR 列索引须 sorted与 cuSPARSE 一致opA、opB须均为NON_TRANSPOSEcuSPARSE SpGEMM 不支持转置输入 A/B 索引须 sorted与 cuSPARSE 一致确定性对标 cuSPARSE bit-wise 确定性float32。4. 功能验收用例编号场景参考TC-01小矩阵 SpGEMMcuSPARSE sample / 自行构造TC-02空矩阵 / 零 nnz 边界自行构造TC-03alpha/beta ≠ 1cuSPARSE 样例TC-04高稀疏度大图性能用例TC-05aclsparse 多阶段调用完整性test/spmm/spmm_test.cpp模式5. 性能要求对标cuSPARSE SpGEMMA100NPU 性能须达到 GPU 参考实现的1.0 倍及以上即 ≥1.0×。固定参考用例必测 3 组在NVIDIA A100上实测 cuSPARSE 耗时填入「GPU 参考耗时」取多次运行avg作为 NPU 验收基准编号场景规模 (m×k×n)nnz(A)nnz(B)dtypeGPU 参考耗时 (μs)达标要求01标准 fp32 SpGEMM128×128×128819819fp323654NPU ≥ 1.0×02零 nnz 边界128×128×12800fp3213NPU ≥ 1.0×03α/β 非 1128×64×128163163fp322404NPU ≥ 1.0×泛化覆盖范围另抽 200 组用例由下列维度组合抽样或网格扫描生成须附完整用例列表性能达标 ≥1.0×维度覆盖范围矩阵规模(m,k,n)12810⁴ 及以上输出nnz(C)从 10² 到 10⁶输入稀疏度nnz(A)、nnz(B)独立变化稀疏率约 0.01%10%dtypefp32U1必测fp16 / bf16 同精度U2 / U3实现后须纳入 200 组抽样α / βαβ1外含α≠1或β≠1至少 10 组算法阶段WorkEstimation→Compute→Copy全链路边界空矩阵 / 零 nnz高稀疏度大图nnz≥10⁵输出 nnz 膨胀显著样本 5 组6. 精度要求算子计算精度需严格满足《生态算子开源精度标准》采用 AscendOpTest 测试。真值以cuSPARSE CPU 标杆或双精度参考为准。单标杆不满足时采用 ATK 双标杆cv_fused_double_benchmarkNPU/同精度 CPU 最大相对误差比例 ≤2平均相对误差比例 ≤1.2均方根误差比例 ≤1.2。7. 接口分层aclsparseSpGEMM*必选C 验收基准 → Ascend C Kernel必选8. 验收交付件1, 自测用例、测试结果报告、测试步骤指导文档2, 算子代码的私仓邀请链接、代码仓路径、分支、算子目录9. 文档规范要求算子设计文档需根据参考模板填写内容完整、格式规范且必须通过评审自验证报告需要覆盖所有功能场景参考xxx算子自验证报告含测试用例执行日志/截图、整体测试通过截图、性能数据截图可清晰指导算子使用与测试自验证报告含 aclsparse 测试、AscendOpTest/ATK 日志。README 文档内容完整、规范含aclsparse C调用示例。10. PR 合入路径https://gitcode.com/cann/ops-sparse/tree/master/src/spgemm环境获取开源仓提供100小时免费时长请不使用时及时关闭用时耗尽前请务必保存相关资料建议及时提交备份。使用 hidevlab notebook 算力。如需额外环境资源请联系昇腾小助手。特别注意事项命名必须与 ops-sparse 现有 SpMM 一致aclsparse前缀、驼峰 SpGEMM、目录src/spgemmSpGEMM 多阶段 workspace 须文档化参考 cuSPARSE ALG1/2/3 内存策略开发前阅读【社区任务】流程及注意事项。【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考