当前位置: 首页 > news >正文

CANN社区任务-SpSM算子开发

7月社区任务-SpSM算子开发任务书

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

基础信息

  • 技术标签:算子开发
  • 适配硬件:Ascend 950PR
  • 开源仓地址:https://gitcode.com/cann/ops-sparse
  • CANN 版本:算子开源仓指定版本
  • 开发语言:Ascend C + C++(aclsparse 接口)
  • 对标参考:cuSPARSE cusparseSpSM §6.6.12

任务概述

参考 cuSPARSESpSM(Sparse 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存解)。

各参数含义说明:

  1. $A$:稀疏三角系数矩阵,仅支持上三角/下三角格式,存储格式为CSR
  2. $op(\cdot)$:矩阵操作符,可选不转置op(A)=A或转置op(A)=A^T
  3. $X$:方程组求解输出,稠密矩阵,与等价式中 $C$ 完全等同;
  4. $B$:多右端稠密输入矩阵,多列代表多组并行方程组;
  5. $\alpha$:全局浮点缩放标量,用于整体缩放计算结果;
  6. $A^{-1}$:稀疏三角矩阵的逆,算子内部通过三角回代间接求解,不生成显式逆矩阵。

验收口径

  • C++aclsparseSpSM*与 cuSPARSE 调用流程对齐(bufferSize预备 →analysissolveupdateMatrix为可选数值更新路径)。

典型场景

图预条件、三角分解回代(ILU/IC 求解)、稀疏三角系统多 RHS 求解。


核心开发要求及验收标准

1. C++ 层接口(必选,对齐 cuSPARSE

cuSPARSE SpSM 核心流程为bufferSize预备 →analysissolve三步骤(另含描述符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/analysismatBmatCvalues 指针可为 NULL(仅用于 workspace 估算与符号分析);描述符本身不可为 NULL
  • solvematBmatC须指向有效 values;
  • in-placematBmatC可使用同一 values 设备指针(其余稠密描述符字段如order可独立设置)。

工程目录

ops-sparse/src/spsm/

2. 数据类型支持

对标范围:对齐 cuSPARSE cusparseSpSM §6.6.12 官方 dtype 表。SpSM 为同精度matAvalues、matBmatCcomputeType四者 dtype 相同(cuSPARSE 文档无 Mixed-precision 小节)。

列含义

  • A:稀疏三角系数矩阵matA的 values;
  • B:稠密右端项matB(多 RHS);
  • C:稠密解matC
  • computeType:实际计算精度。

稀疏格式与索引

项目本任务
稀疏格式CSR
索引int32INDEX_32I
fill / 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 / solve)+updateMatrix全链路。

3. 算子约束

  1. analysis 与 solve 间不得修改 matA 结构、externalBufferspsmDescr(与 cuSPARSE 一致);
  2. updateMatrix仅更新数值、结构不变时可跳过 re-analysis(对标 cuSPARSE);
  3. solve 阶段 bit-wise 确定性(cuSPARSE 保证);
  4. 多 RHS:matB/matC[m, nrhs]稠密矩阵;
  5. in-placematBmatC可共用同一 values 指针(cuSPARSE 支持);
  6. bufferSize/analysismatB/matC的 values 可为 NULL;solve须提供有效 values;描述符不可为 NULL。

4. 功能验收用例

编号场景参考
TC-01下三角 unit_diag=FalsecuSPARSE CSR sample
TC-02上三角 + transpose自行构造
TC-03nrhs=1 与 nrhs>1自行构造
TC-04updateMatrix 后 re-solvecuSPARSE
TC-05matB/matC in-place(同一 values 指针)cuSPARSE
TC-06bufferSize/analysis 阶段 matB/matC values 为 NULLcuSPARSE

5. 性能要求

对标cuSPARSE SpSM(A100),NPU 性能须达到 GPU 参考实现的1.0 倍及以上(即 ≥1.0×)。

固定参考用例(必测 3 组;在NVIDIA A100上实测 cuSPARSE 耗时填入「GPU 参考耗时」,取多次运行avg,analysis 一次性开销可单独报告,作为 NPU 验收基准):

编号场景mnnznrhsdtypeGPU 参考耗时 (μs)达标要求
01下三角多 RHS 基础 solve25627258fp322203NPU ≥ 1.0×
02updateMatrix 后 re-solve12813224fp322291NPU ≥ 1.0×
03analysis 阶段 NULL values12813274fp322014NPU ≥ 1.0×

泛化覆盖范围另抽 200 组用例;由下列维度组合抽样或网格扫描生成,须附完整用例列表;solve 阶段性能达标 ≥1.0×):

维度覆盖范围
矩阵规模m:10²~10⁵;nnzm成比例(平均度约 5~50)
多 RHSnrhs:1、8、32、128
三角属性下三角 / 上三角;unit_diagTrue / False;transTrue / False 等组合须纳入 200 组抽样
稀疏结构随机三角 CSR
更新路径updateMatrix后 re-solve 至少 5 组(数值变、结构不变)
in-place / NULL valuesmatB/matC 共用 values 至少 5 组;bufferSize/analysis 阶段 NULL values 至少 5 组
边界m=1nrhs=1;近奇异对角(条件数偏大样本 5 组,仅功能验收)

6. 精度要求

《生态算子开源精度标准》+ AscendOpTest + ATK 双标杆L2(2 / 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

环境获取

  1. 开源仓提供100小时免费时长,请不使用时及时关闭,用时耗尽前请务必保存相关资料,建议及时提交备份。
  2. 使用 hidevlab notebook 算力。
  3. 如需额外环境资源,请联系昇腾小助手。

特别注意事项

  1. SpSManalysis 缓存是性能关键,须在文档中说明复用条件;
  2. 新增接口需对齐 cuSPARSE 风格;
  3. 三角性、对角类型须在描述符层显式设置(映射 cuSPARSE fill/diag 属性);
  4. 设计文档按社区模板;
  5. README 含aclsparse C++调用示例;
  6. 自验证报告含 aclsparse 测试、AscendOpTest/ATK 日志。

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/1129817/

相关文章:

  • 5 分钟上手 Swift Protobuf:最新官方仓库使用教程
  • 数据可视化终极指南:Tableau与Power BI的全面对比与实战应用
  • activerecord-multi-tenant 性能优化:10 个提升多租户查询效率的终极技巧 [特殊字符]
  • Axure中文界面终极指南:3分钟完成完整汉化安装
  • Perlite Mermaid集成教程:创建交互式图表与流程图
  • DeepTraffic部署指南:在Linux系统中高效运行深度学习流量分类模型
  • AcDisplay项目架构解析:模块化设计与组件通信机制
  • 从R到Julia:SageMaker Studio Lab多语言环境配置指南
  • PIC18F86K22与SLO2016协议在嵌入式通信中的应用
  • OpenEduCat ERP财务管理:教育机构费用管理的完整教程
  • Mastering Embedded Linux Programming设备树配置:从基础到高级的完整教程
  • Project Restoration:终极Majora‘s Mask 3D修复补丁完全指南
  • caxlsx_rails测试策略:确保Excel导出功能稳定可靠的完整指南
  • Perlite插件系统解析:扩展功能的无限可能
  • Justice.js:革命性网页性能监控工具,让前端性能问题无所遁形
  • ChatGPT整合Codex:从AI代码补全到代理式编程的实战指南
  • Miyagi核心功能揭秘:个性化财务 coaching 与智能推荐实战
  • Tilt Brush Toolkit开发指南:构建自定义3D绘画应用的完整路线图
  • 三分钟搞定Windows优化:WinUtil让你的电脑焕然一新
  • 终极指南:如何无缝过渡到 apple/swift-protobuf 新仓库
  • 3分钟免费激活Windows和Office:KMS_VL_ALL_AIO智能激活工具完全指南
  • FXTest多项目协作指南:团队接口测试平台的最佳实践
  • Lunalytics部署指南:使用Docker快速搭建私有监控面板
  • 西工大软院大二数据库课程设计:nwpu-cram物流系统完整指南 [特殊字符]
  • PCF8591与PIC18F4680的嵌入式信号处理系统设计
  • CMS用户体验改进:Instatic界面优化建议
  • RESPX版本升级指南:如何平滑迁移到最新版本的完整教程
  • DC-DC降压转换与智能控制:TPS62130与Kinetis K24实战
  • CANN/ops-sparse日志规范
  • CANN MatmulPermute算子开发