7月社区任务-SpSM算子开发任务书【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions基础信息技术标签算子开发适配硬件Ascend 950PR开源仓地址https://gitcode.com/cann/ops-sparseCANN 版本算子开源仓指定版本开发语言Ascend C Caclsparse 接口对标参考cuSPARSE cusparseSpSM §6.6.12任务概述参考 cuSPARSESpSMSparse triangular Solve with Multiple right-hand sides在昇腾 NPU 上实现稀疏三角求解$$ op(A) \cdot X \alpha \cdot op(B) \quad\Rightarrow\quad X \alpha \cdot op(A)^{-1} op(B) $$或等价形式 $C \alpha \cdot op(A)^{-1} op(B)$cuSPARSE 以稠密matC存解。各参数含义说明$A$稀疏三角系数矩阵仅支持上三角/下三角格式存储格式为CSR$op(\cdot)$矩阵操作符可选不转置op(A)A或转置op(A)A^T$X$方程组求解输出稠密矩阵与等价式中 $C$ 完全等同$B$多右端稠密输入矩阵多列代表多组并行方程组$\alpha$全局浮点缩放标量用于整体缩放计算结果$A^{-1}$稀疏三角矩阵的逆算子内部通过三角回代间接求解不生成显式逆矩阵。验收口径CaclsparseSpSM*与 cuSPARSE 调用流程对齐bufferSize预备 →analysis→solveupdateMatrix为可选数值更新路径。典型场景图预条件、三角分解回代ILU/IC 求解、稀疏三角系统多 RHS 求解。核心开发要求及验收标准1. C 层接口必选对齐 cuSPARSEcuSPARSE SpSM 核心流程为bufferSize预备 →analysis→solve三步骤另含描述符createDescr/destroyDescr与可选updateMatrix须完整实现aclsparseStatus_t aclsparseSpSMCreateDescr(aclsparseSpSMDescr_t *spsmDescr); aclsparseStatus_t aclsparseSpSMDestroyDescr(aclsparseSpSMDescr_t spsmDescr); aclsparseStatus_t aclsparseSpSMGetBufferSize( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstDnMatDescr_t matB, aclsparseDnMatDescr_t matC, aclDataType computeType, aclsparseSpSMAlg_t alg, aclsparseSpSMDescr_t spsmDescr, size_t *bufferSize); aclsparseStatus_t aclsparseSpSMAnalysis( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstDnMatDescr_t matB, aclsparseDnMatDescr_t matC, aclDataType computeType, aclsparseSpSMAlg_t alg, aclsparseSpSMDescr_t spsmDescr, void *externalBuffer); aclsparseStatus_t aclsparseSpSMSolve( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstSpMatDescr_t matA, aclsparseConstDnMatDescr_t matB, aclsparseDnMatDescr_t matC, aclDataType computeType, aclsparseSpSMAlg_t alg, aclsparseSpSMDescr_t spsmDescr); aclsparseStatus_t aclsparseSpSMUpdateMatrix( aclsparseHandle_t handle, aclsparseSpSMDescr_t spsmDescr, void *newValues, aclsparseSpSMUpdate_t updatePart);格式仅支持CSR与 cuSPARSE 对齐。调用语义与 cuSPARSE §6.6.12 一致bufferSize/analysismatB、matC的values 指针可为 NULL仅用于 workspace 估算与符号分析描述符本身不可为 NULLsolvematB、matC须指向有效 valuesin-placematB与matC可使用同一 values 设备指针其余稠密描述符字段如order可独立设置。工程目录ops-sparse/src/spsm/2. 数据类型支持对标范围对齐 cuSPARSE cusparseSpSM §6.6.12 官方 dtype 表。SpSM 为同精度matAvalues、matB、matC、computeType四者 dtype 相同cuSPARSE 文档无 Mixed-precision 小节。列含义A稀疏三角系数矩阵matA的 valuesB稠密右端项matB多 RHSC稠密解matCcomputeType实际计算精度。稀疏格式与索引项目本任务稀疏格式CSR索引int32INDEX_32Ifill / diagLOWER/UPPER、UNIT/NON_UNIT映射 cuSPARSE fill/diag 属性SpSM 为全新算子ops-sparse 仓当前无src/spsm/aclsparseSpSM* Kernel 均须从零交付。2.1 dtype 组合A / B / C / computeTypecuSPARSE 枚举状态fp32CUDA_R_32F待实现alpha标量 dtype 与computeType一致为float32。验收须覆盖 ACLaclsparseSpSM*bufferSize / analysis / solveupdateMatrix全链路。3. 算子约束analysis 与 solve 间不得修改 matA 结构、externalBuffer、spsmDescr与 cuSPARSE 一致updateMatrix仅更新数值、结构不变时可跳过 re-analysis对标 cuSPARSEsolve 阶段 bit-wise 确定性cuSPARSE 保证多 RHSmatB/matC为[m, nrhs]稠密矩阵in-placematB与matC可共用同一 values 指针cuSPARSE 支持bufferSize/analysismatB/matC的 values 可为 NULLsolve须提供有效 values描述符不可为 NULL。4. 功能验收用例编号场景参考TC-01下三角 unit_diagFalsecuSPARSE CSR sampleTC-02上三角 transpose自行构造TC-03nrhs1 与 nrhs1自行构造TC-04updateMatrix 后 re-solvecuSPARSETC-05matB/matC in-place同一 values 指针cuSPARSETC-06bufferSize/analysis 阶段 matB/matC values 为 NULLcuSPARSE5. 性能要求对标cuSPARSE SpSMA100NPU 性能须达到 GPU 参考实现的1.0 倍及以上即 ≥1.0×。固定参考用例必测 3 组在NVIDIA A100上实测 cuSPARSE 耗时填入「GPU 参考耗时」取多次运行avganalysis 一次性开销可单独报告作为 NPU 验收基准编号场景mnnznrhsdtypeGPU 参考耗时 (μs)达标要求01下三角多 RHS 基础 solve25627258fp322203NPU ≥ 1.0×02updateMatrix 后 re-solve12813224fp322291NPU ≥ 1.0×03analysis 阶段 NULL values12813274fp322014NPU ≥ 1.0×泛化覆盖范围另抽 200 组用例由下列维度组合抽样或网格扫描生成须附完整用例列表solve 阶段性能达标 ≥1.0×维度覆盖范围矩阵规模m10²10⁵nnz与m成比例平均度约 550多 RHSnrhs1、8、32、128三角属性下三角 / 上三角unit_diagTrue / FalsetransTrue / False 等组合须纳入 200 组抽样稀疏结构随机三角 CSR更新路径updateMatrix后 re-solve 至少 5 组数值变、结构不变in-place / NULL valuesmatB/matC 共用 values 至少 5 组bufferSize/analysis 阶段 NULL values 至少 5 组边界m1nrhs1近奇异对角条件数偏大样本 5 组仅功能验收6. 精度要求《生态算子开源精度标准》 AscendOpTest ATK 双标杆L22 / 1.2 / 1.2。真值以cuSPARSE CPU 标杆或双精度参考为准。7. 接口分层aclsparseSpSM*必选 → Ascend C Kernel必选8. 验收交付件1, 自测用例、测试结果报告、测试步骤指导文档2, 算子代码的私仓邀请链接、代码仓路径、分支、算子目录9. PR 合入路径https://gitcode.com/cann/ops-sparse/tree/master/src/spsm环境获取开源仓提供100小时免费时长请不使用时及时关闭用时耗尽前请务必保存相关资料建议及时提交备份。使用 hidevlab notebook 算力。如需额外环境资源请联系昇腾小助手。特别注意事项SpSManalysis 缓存是性能关键须在文档中说明复用条件新增接口需对齐 cuSPARSE 风格三角性、对角类型须在描述符层显式设置映射 cuSPARSE fill/diag 属性设计文档按社区模板README 含aclsparse C调用示例自验证报告含 aclsparse 测试、AscendOpTest/ATK 日志。【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考