CANN/sip:AscendSiPBoost信号处理加速库
2026/5/10 0:41:55 网站建设 项目流程

AscendSiPBoost 信号处理加速库

【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip

🔥 [2025/10] AscendSiPBoost项目(下文简称为SiP库)首次上线。

内容总览

  1. 学习资源
  2. 什么是SiP
  3. 环境构建
  4. 快速上手
  5. 自定义算子开发
  6. 参与贡献
  7. 参考文档

1. 学习资源

  • 编译与构建:SiP库的编译命令说明。
  • API文档:介绍了SiP库的接口和相关术语。
  • 问题报告:通过issue提交发现的问题。

2. 什么是SiP

Ascend Signal Processing Boost(昇腾信号处理加速库,下文简称为SiP库)基于华为Ascend AI处理器打造,深度适配硬件算力、存储及内存带宽特性,提供FFT、BLAS、FIR滤波、插值等高性能NPU算子,为信号处理领域提供高效可靠的算力加速。

加速库接口功能主要分成六个部分:

  • 信号处理加速库框架:负责算子的管理,算子在Device侧的二进制加载以及Host侧的tiling;负责对上层提供接口支持单算子调用、多算子批量调用等。
  • FFT库:包括专用的NPU Kernel、PLAN框架;实现FFT系列算子,对外提供接口以支持C2C、C2R和R2C功能,供开发者使用。
  • BLAS库:依照BLAS相关的标准定义,提供专用的Kernel,实现BLAS系列算子功能,对外提供从level1到level3的接口,供开发者使用。
  • 复数基础计算库:提供基础的复数类型算子支持。
  • 信号领域融合算子库:包含PC、MTD、CFAR、Interpolation等融合算子,支撑脉冲信号分析,动态目标检测,恒虚警等场景。
  • Solver库:主要提供基于BLAS的复杂线性代数函数,例如矩阵分解、特征值求解等。

3. 环境构建

3.1 快速安装CANN软件

本节提供快速安装CANN软件的示例命令,更多安装步骤请参考CANN官网的CANN软件安装指南。

3.1.1 安装前准备

本项目源码编译用到的依赖如下,请注意版本要求。

  • python >= 3.7.0
  • pyyaml
  • gcc >= 7.3.0
  • g++ >= 7.3.0
  • cmake >= 3.16.0
  • pigz(安装后可提升打包速度,建议版本 >= 2.4)
  • dos2unix
  • gawk
  • googletest(仅执行UT时依赖,建议版本 1.14.0)

注意:当前 ascend-boost-comm 第三方库与 GCC 14 存在兼容性问题(函数声明不匹配),建议使用GCC 12进行编译。

3.1.2 安装社区版CANN toolkit包
  • Atlas A2/A3系列产品:单击下载链接获取软件包
# 确保安装包具有可执行权限 chmod +x Ascend-cann-toolkit_${cann_version}_linux-${arch}.run # 安装命令 ./Ascend-cann-toolkit_${cann_version}_linux-${arch}.run --install --force --install-path=${install_path}
  • ${cann_version}:表示CANN包版本号。
  • ${arch}:表示CPU架构,如aarch64、x86_64。
  • ${install_path}:表示指定安装路径,默认安装在/usr/local/Ascend目录。
3.1.3 安装社区版CANN ops包
  • Atlas A2/A3系列产品:单击下载链接获取软件包。
# 确保安装包具有可执行权限 chmod +x Ascend-cann-${soc_name}-ops_${cann_version}_linux-${arch}.run # 安装命令 ./Ascend-cann-${soc_name}-ops_${cann_version}_linux-${arch}.run --install --install-path=${install_path}
  • ${soc_name}:表示NPU型号名称,即${soc_version}删除“ascend”后剩余的内容。
  • ${install_path}:表示指定安装路径,需要与toolkit包安装在相同路径,默认安装在/usr/local/Ascend目录。
3.1.4 环境变量配置
# 默认路径安装,以root用户为例(非root用户,将/usr/local替换为${HOME}) source /usr/local/Ascend/cann/set_env.sh # 指定路径安装 # source ${install_path}/cann/set_env.sh
3.1.4 基础工具版本要求与安装

安装CANN之后,您可安装一些工具方便后续开发,参见以下内容:

  • CANN依赖列表
  • CANN安装后操作

4. 快速上手

4.1 SiP编译

  • 加速库下载

    git clone https://gitcode.com/cann/sip.git

    您可自行选择需要的分支。

  • SiP库编译
    编译加速库,设置加速库环境变量:

    cd ${sip_root_path} bash build.sh source output/set_env.sh

    特别说明:

    • Ascend-cann-SIP_${version}_linux_${arch}.run是编译后通过makeself打包的包含算子执行所需文件的可执行产物,用户可以通过以下命令执行run包将包含算子信息的文件安装到指定目录;

      # 确保安装包具有可执行权限 chmod +x Ascend-cann-SIP_${version}_linux_${arch}.run # 安装命令 ./Ascend-cann-SIP_${version}_linux_${arch}.run --install --install-path=${install_path}
    • 上述编译方式仅支持编译通过git下载的加速库,以zip压缩包方式下载的加速库不支持该编译方式;

    • 由于编译过程需要联网下载依赖库,因此编译环境需要联网;

    • 该编译过程包括获取ascend-boost-comm(昇腾分布式通信加速库)组件并编译该组件,和编译信号加速库两个步骤。更多命令介绍可查看SiP仓库build.sh文件。

  • 更多编译命令说明请参考编译与构建

4.2 调用示例说明

本节示例代码分别展示了如何通过C++调用算子。

4.2.1 C++

在SiP仓库的example目录下,存放了多个不依赖测试框架、即编可用的算子调用Demo示例。本节示例代码展示通过C++调用SiP asdBlasSdot算子实现向量点乘(内积)功能,代码完整内容可参考example,下面仅展示其核心内容:

int main(int argc, char **argv) { // 设置算子使用的device id int deviceId = 0; //(固定写法)创建执行流 aclrtStream stream; Init(deviceId, &stream); // 创造tensor的Host侧数据 int64_t n = 5; int64_t incx = 1; int64_t incy = 1; int64_t xSize = 5; std::vector<float> tensorInXData; tensorInXData.reserve(xSize); for (int64_t i = 0; i < xSize; i++) { tensorInXData[i] = 1.0 + i; } int64_t ySize = 5; std::vector<float> tensorInYData; tensorInYData.reserve(xSize); for (int64_t i = 0; i < ySize; i++) { tensorInYData[i] = 10.0 + i; } int64_t resultSize = 1; std::vector<float> resultData; resultData.reserve(resultSize); std::cout << "------- input x -------" << std::endl; for (int64_t i = 0; i < xSize; i++) { std::cout << tensorInXData[i] << " "; } std::cout << std::endl; std::cout << "------- input y -------" << std::endl; for (int64_t i = 0; i < ySize; i++) { std::cout << tensorInYData[i] << " "; } std::cout << std::endl; // 创造输入/输出tensor std::vector<int64_t> xShape = {xSize}; std::vector<int64_t> yShape = {ySize}; std::vector<int64_t> resultShape = {resultSize}; aclTensor *inputX = nullptr; aclTensor *inputY = nullptr; aclTensor *result = nullptr; void *inputXDeviceAddr = nullptr; void *inputYDeviceAddr = nullptr; void *resultDeviceAddr = nullptr; CreateAclTensor(tensorInXData, xShape, &inputXDeviceAddr, aclDataType::ACL_FLOAT, &inputX); CreateAclTensor(tensorInYData, yShape, &inputYDeviceAddr, aclDataType::ACL_FLOAT, &inputY); CreateAclTensor(resultData, resultShape, &resultDeviceAddr, aclDataType::ACL_FLOAT, &result); // 创建算子执行句柄 asdBlasHandle handle; asdBlasCreate(handle); // 创造算子执行所需workspace size_t lwork = 0; void *buffer = nullptr; asdBlasMakeDotPlan(handle); asdBlasGetWorkspaceSize(handle, lwork); if (lwork > 0) { aclrtMalloc(&buffer, static_cast<int64_t>(lwork), ACL_MEM_MALLOC_HUGE_FIRST); } asdBlasSetWorkspace(handle, buffer); // 配置算子执行信息 asdBlasSetStream(handle, stream); // 调用接口执行算子(固定调用逻辑) asdBlasSdot(handle, n, inputX, incx, inputY, incy, result); asdBlasSynchronize(handle); // 调用算子后销毁算子句柄 asdBlasDestroy(handle); // 将输出tensor的Device侧数据复制到Host侧内存上 aclrtMemcpy(resultData.data(), resultSize * sizeof(float), resultDeviceAddr, resultSize * sizeof(float), ACL_MEMCPY_DEVICE_TO_HOST); std::cout << "------- result -------" << std::endl; for (int64_t i = 0; i < 1; i++) { std::cout << resultData[i] << " "; } std::cout << std::endl; // 资源释放 aclDestroyTensor(inputX); aclDestroyTensor(inputY); aclDestroyTensor(result); aclrtFree(inputXDeviceAddr); aclrtFree(inputYDeviceAddr); aclrtFree(resultDeviceAddr); if (lwork > 0) { aclrtFree(buffer); } // 调用算子后重置算子使用的deviceId aclrtDestroyStream(stream); aclrtResetDevice(deviceId); aclFinalize(); return 0; }

文件编译说明:进入example目录,执行bash build.sh完成编译和执行。

cd example bash build.sh

算子使用指导:可访问头文件列表-CANN社区版-昇腾社区。

4.2.2 样例安全声明

example目录下的样例旨在提供快速上手、开发和调试SiP特性的最小化实现,其核心目标是使用最精简的代码展示SiP核心功能,而非提供生产级的安全保障。与成熟的生产级使用方法相比,此样例中的安全功能(如输入校验、边界校验)相对有限。

SiP不推荐用户直接将样例作为业务代码,也不保证此种做法的安全性。若用户将example中的示例代码应用在自身的真实业务场景中且发生了安全问题,则由用户自行承担。

4.3 日志和环境变量说明

  • 加速库日志现在已经部分适配CANN日志,环境变量说明请参考CANN社区版文档/环境变量参考

5. 自定义算子开发

详细步骤可参考从开发一个简单算子出发

6. 参与贡献

  1. fork仓库
  2. 修改并提交代码
  3. 新建Pull-Request

详细步骤可参考贡献指南

7. 参考文档

CANN社区版文档SiP社区版文档

【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库,基于华为Ascend AI处理器,专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询