7月社区任务-SDDMM算子开发任务书【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions基础信息技术标签算子开发适配硬件Ascend 950PR开源仓地址https://gitcode.com/cann/ops-sparseCANN 版本算子开源仓指定版本开发语言Ascend C Caclsparse 接口对标参考cuSPARSE cusparseSDDMM §6.6.13任务概述参考 cuSPARSESDDMMSampled Dense-Dense Matrix Multiplication在昇腾 NPU 上实现 Ascend C Kernel aclsparseC 接口。验收口径CaclsparseSDDMM*与 cuSPARSE 对齐命名参考aclsparseSpMM。功能定义$$ C \alpha \cdot (op(A) \cdot op(B)) \circ spy(C_{pattern}) \beta \cdot C $$A ∈ R(m×k)、B ∈ R(k×n) 为稠密矩阵C ∈ R(m×n) 为稀疏 CSR仅更新已有非零位置的值⊙ 为 Hadamard 积spy(C) 为 C 的结构掩码须支持 cuSPARSE 通用 α/β。GNN 典型用途在固定边结构邻接上计算注意力分数 (Q * K^T) ⊙ A。核心开发要求及验收标准1. C 层接口必选对齐 cuSPARSE参考aclsparseSpMMGetBufferSize/Preprocess/SpMM三阶段新增aclsparseStatus_t aclsparseSDDMMGetBufferSize( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstDnMatDescr_t matA, aclsparseConstDnMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSDDMMAlg_t alg, size_t *bufferSize); aclsparseStatus_t aclsparseSDDMMPreprocess( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstDnMatDescr_t matA, aclsparseConstDnMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSDDMMAlg_t alg, void *externalBuffer); aclsparseStatus_t aclsparseSDDMM( aclsparseHandle_t handle, aclsparseOperation_t opA, aclsparseOperation_t opB, const void *alpha, aclsparseConstDnMatDescr_t matA, aclsparseConstDnMatDescr_t matB, const void *beta, aclsparseSpMatDescr_t matC, aclDataType computeType, aclsparseSDDMMAlg_t alg, void *externalBuffer);稠密矩阵描述符复用aclsparseCreateDnMat/aclsparseCreateConstDnMat同 SpMM。工程目录ops-sparse/src/sddmm/2. 数据类型支持对标范围对齐 cuSPARSE cusparseSDDMM §6.6.13 官方 dtype 表。列含义A/B稠密matA、matB使用相同dtype文档单列A/BC稀疏输出matC的valuesdtype结构由已有 nnz 决定computeType实际计算/累加精度α/β亦为此类型。文档 NOTECUDA_R_16F、CUDA_R_16BF一律视为混精度混精行computeType均为CUDA_R_32F。稀疏格式与索引项目本任务稀疏 CCSR索引 int32稠密 A/Brow/col major 须满足 cuSPARSE 性能推荐组合见 §4索引int32SDDMM 为全新算子ops-sparse 仓当前无src/sddmm/aclsparseSDDMM* Kernel 均须从零交付。2.1 同精度Uniform-precision稠密 A/B、稀疏 C values、computeType四者相同IDA/B / C / computeTypecuSPARSE 枚举状态U1fp32CUDA_R_32F待实现2.2 混精度Mixed-precision— CSR与线上一致computeType均为CUDA_R_32FIDA/B稠密 matA/matBC稀疏 valuescomputeType状态M1CUDA_R_16FCUDA_R_32FCUDA_R_32F待实现M2CUDA_R_16FCUDA_R_16FCUDA_R_32F待实现M1fp16 稠密输入、fp32 稀疏输出 valuesM2fp16 稠密输入、fp16 稀疏输出 valuesfp32 累加。3. 算子约束仅更新 matC 已有 nnz 位置index 可 unsortedcuSPARSE 允许opA/opB与DnMat order组合须满足 cuSPARSE 性能说明row-major NON_TRANSPOSE 等确定性对标 cuSPARSE bit-wisefloat32。4. 功能验收用例编号场景参考TC-01基础 SDDMMβ0cuSPARSE sampleTC-02含 β·C 累加cuSPARSETC-031D 向量外积语义cuSPARSE / DGL 语义TC-04GNN 边特征 (E,1)·(1,E)自行构造TC-05非连续 / 非方阵自行构造TC-06空 nnz边界5. 性能要求对标cuSPARSE SDDMMA100NPU 性能须达到 GPU 参考实现的1.0 倍及以上即 ≥1.0×。固定参考用例必测 3 组在NVIDIA A100上实测 cuSPARSE 耗时填入「GPU 参考耗时」取多次运行avg作为 NPU 验收基准编号场景m×nnnzkdtypeGPU 参考耗时 (μs)达标要求01fp32 基础 SDDMMβ0256×25632764fp321912NPU ≥ 1.0×02含 β·C 累加128×12816332fp321683NPU ≥ 1.0×03fp16 混精 M1256×25632764A/B fp16C fp321768NPU ≥ 1.0×泛化覆盖范围另抽 200 组用例由下列维度组合抽样或网格扫描生成须附完整用例列表性能达标 ≥1.0×维度覆盖范围矩阵规模m、n10³10⁵k16、64、128、256、512稀疏度nnz10⁴10⁷含「宽短矩阵」m≫n或n≫mdtypefp32U1必测fp16 混精 M1 / M2 实现后须纳入 200 组抽样α / β默认β0必测含β≠0累加至少 10 组布局row-major 推荐组合§3与非连续 stride 各 10 组边界nnz01D 外积语义GNN 边特征(E,1)·(1,E)6. 精度要求满足《生态算子开源精度标准》AscendOpTest 必要时 ATK 双标杆L22 / 1.2 / 1.2。真值以cuSPARSE CPU 标杆或双精度参考为准。7. 接口分层aclsparseSDDMM*必选 → Ascend C Kernel必选8. 验收交付件1, 自测用例、测试结果报告、测试步骤指导文档2, 算子代码的私仓邀请链接、代码仓路径、分支、算子目录9. 合入路径https://gitcode.com/cann/ops-sparse/tree/master/src/sddmm环境获取开源仓提供100小时免费时长请不使用时及时关闭用时耗尽前请务必保存相关资料建议及时提交备份。使用 hidevlab notebook 算力。如需额外环境资源请联系昇腾小助手。特别注意事项命名遵循aclsparseSDDMM*与 ops-sparse 现有 SpMM 风格一致设计文档按社区模板README 含aclsparse C调用示例自验证报告含 aclsparse 测试、AscendOpTest/ATK 日志。【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考