已关闭
[Bug-Report|缺陷反馈]: Ascend 950PR(arch35)下 build.sh --soc=ascend950 构建失败:test/spmm 源文件路径错误、spgemm_common.h 头文件无法找到、spgemm_kernel 缺少 kernel 类型属性 #169
moonlife创建于 23 天前关闭于 21 天前
HKFLYE
23 天前 评论:
23 天前 评论:
您好,感谢反馈,问题确认中。


HKFLYE
23 天前 评论:
23 天前 评论:
@gcw_gYpnrvNC
问题①,当前master分支主线已修复,请在开发分支同步后再次尝试编译。
问题②和③,当前master分支不存在sparse/spGEMM目录,请确认是否为本地开发分支引入的问题。
若有开发分支上的咨询问题,请提交咨询pr并提供对应的个人分支链接或者源码。
本issue仅跟踪当前master分支上已有代码的工程问题。


23 天前 添加了label:wait-feedback
23 天前 将 HuangKun8682 设为负责人
moonlife
22 天前 评论:
22 天前 评论:
抱歉,问题②和③是误反馈了。问题①我稍后验证。


22 天前 删除了label:wait-feedback
HKFLYE
21 天前 评论:
21 天前 评论:
@gcw_gYpnrvNC
感谢反馈,当前issue问题已解决,此issue关闭。若后续还有相关的问题,可以重新开启issue,提供相关的环境和报错信息来提问。


21 天前 issue状态由 待办的 改变为 已解决
21 天前 关闭了 issue
Thanks for sending an issue! Please fill in the following template to help quickly solve your problem.
Describe the current behavior / 问题描述 (Mandatory / 必填)
在 Ascend 950PR(arch35 / DAV-3510)上执行
bash build.sh --soc=ascend950 --ops=spmm,构建在配置/编译阶段连续报三类错误,无法产出libops_sparse.so与测试二进制(按出现顺序):①
test/spmm测试源文件路径错误(CMake Configure 阶段)②
spgemm_common.h头文件找不到(编译阶段)③
spgemm_kernel缺少 kernel 类型属性(链接/编译阶段)Environment / 环境信息 (Mandatory / 必填)
/usr/local/Ascend/cann-9.1.0;编译器bisheng,基于 clang 15.0.5;链接器ld.lld)bash build.sh --soc=ascend950 --ops=spmmmaster(commitae60d05)基础上 fork 的开发分支moonlife/spgemmSteps to reproduce the issue / 重现步骤 (Mandatory / 必填)
master或ae60d05);source <CANN>/set_env.sh等);test/spmm找不到spmm_test.cpp);spgemm_common.hnot found);spgemm_kernel类型推导失败)。Describe the expected behavior / 预期结果 (Mandatory / 必填)
bash build.sh --soc=ascend950 --ops=spmm应无错误完成配置与构建,正常产出libops_sparse.so、libops_sparseLt.so以及spmm_test测试二进制;test/<op>/CMakeLists.txt应按 SOC 分支正确引用对应archXX/子目录下的测试源文件(与arch22分支写法一致);archXX/头文件引用的公共头(如spgemm_common.h)应能正常解析,无需逐个算子向根CMakeLists.txt追加 include 目录;__global__kernel 入口应携带与sparse/spmm/arch35一致的 kernel 任务类型属性(KERNEL_TASK_TYPE_DEFAULT(...)),使工具链能正确推导 kernel 类型。Related log / screenshot / 日志 / 截图 (Mandatory / 必填)
构建日志关键片段(
SOC_VERSION=ascend950, NPU_ARCH=dav-3510, SOC_ARCH_DIRS=arch35):错误 ①(test/spmm)
错误 ②(spgemm_common.h)
错误 ③(spgemm_kernel 类型)
Special notes for this issue/备注 (Optional / 选填)
根因小结:
test/spmm/CMakeLists.txt的ascend950分支漏写arch35/前缀(spmm_test.cpp→ 应为arch35/spmm_test.cpp);arch22分支写的是arch22/spmm_test.cpp,正确。sparse/spgemm/arch35/spgemm.h以裸名#include "spgemm_common.h",而该头位于sparse/spgemm/;ops_sparse库的 include 路径仅含./include、./sparse/common,不含./sparse/spgemm。sparse/spgemm/arch35/spgemm_kernel.cpp的__global__入口spgemm_kernel是 M1 骨架,缺少 Ascend C kernel 任务类型属性,bisheng/ld.lld 无法自动推导。建议(已在本 fork 分支验证通过):
test/spmm/CMakeLists.txt:ascend950分支源文件改为arch35/spmm_test.cpp;sparse/spgemm/arch35/spgemm.h:改用相对路径#include "../spgemm_common.h"(按头文件自身目录解析,无需修改根CMakeLists.txt,保持新增算子可扩展性);sparse/spgemm/arch35/spgemm_kernel.cpp:入口体内补充KERNEL_TASK_TYPE_DEFAULT(KERNEL_TYPE_AIV_ONLY);,与sparse/spmm/arch35既有 kernel 写法保持一致。参考提交(fork 分支
moonlife/spgemm):91ce6e7fix(test/spmm): ascend950 分支源文件改为 arch35/spmm_test.cppca11768fix(spgemm): 修复 arch35 编译(公共头相对 include + kernel 类型属性)建议上游统一约定:各
test/<op>/CMakeLists.txt的 arch 源文件引用方式、以及archXX/引用公共头的方式建议统一,避免后续新增算子/芯片架构时重复出现同类问题。