ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

CANN SiP 头文件与库文件完全指南:接口分类、依赖关系与编译链接实战

CANN SiP 头文件与库文件完全指南:接口分类、依赖关系与编译链接实战 CANN SiP 头文件与库文件完全指南接口分类、依赖关系与编译链接实战【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库基于华为Ascend AI处理器专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip本文档基于 CANN SiPAscend SiP Boost信号处理算子加速库官方《头文件和库文件说明》结合仓库源码与示例工程系统梳理 AsdSip 接口的六大功能分类、各公开头文件的用途与依赖、主库与第三方依赖库的链接关系并给出可运行的编译链接与调用实践。读者读完即可正确选择头文件、配置链接参数完成基于 AsdSip 接口的应用程序开发。一、接口分类AsdSip 六大功能模块概览AsdSip 的所有公开接口统一位于AsdSip命名空间下FFT 头文件内部同时以extern C声明以便 C 语言引用按功能可分为以下六类。实际开发时可根据接口名前缀快速定位所属模块与对应头文件接口名前缀所属模块描述swapLast2Axes / asdMulBase基础模块基础张量操作包括轴交换、逐元素乘法等。asdFft*FFT快速傅里叶变换模块FFT/STFT/ISTFT 变换支持 1D/2D/3D支持 C2C、C2R、R2C 类型。asdBlas*BLAS线性代数模块BLAS Level 1/2/3 操作包括矩阵乘法、向量运算、三角求解等支持实数和复数类型。asdConvolve*Filter滤波器模块一维卷积操作支持 full/same/valid 三种模式。asdInterp*Interpolation插值模块基于系数的插值操作。rs*Domain领域模块面向雷达信号处理等特定领域的专用接口如 Sinc 插值。从仓库目录结构可以印证这一分类include/下直接放置了base_api.h、blas_api.h、fft_api.h、filter_api.h、interp_api.h而领域接口单独放在include/domain/rs_api.hexample/A2/目录同样按BASE/、BLAS/、FFT/、Domain/、Filter/、Interpolation/分目录组织示例代码便于按模块检索。二、头文件说明从总入口到模块级头文件编译 AsdSip 接口程序时需根据实际使用的接口 include 对应的头文件。头文件位于安装目录的include/下构建源码时对应仓库根目录的 include/ 目录。各头文件的用途、内部依赖与对应库文件如下表头文件用途对应的库文件asdsip.h总入口头文件聚合所有公开 API 头文件。用户只需#include asdsip.h即可使用全部接口。内部依次 include base_api.h、blas_api.h、fft_api.h、filter_api.h、interp_api.h 和 domain/rs_api.h。libasdsip.so 或 libasdsip_static.abase_api.h基础操作接口。定义轴交换swapLast2Axes、逐元素乘法asdMul等基础张量操作。依赖 utils/aspb_status.h 和 utils/mem_base.h。libasdsip.so 或 libasdsip_static.afft_api.hFFT 快速傅里叶变换接口。定义 FFT Handle 管理asdFftCreate/Destroy、流绑定asdFftSetStream、1D/2D/3D 计划创建asdFftMakePlan1D/2D/3D、ISTFT 计划创建asdFftIstftMakePlan、执行接口asdFftExecC2C/C2R/R2C/C2CSeparated/Istft、Workspace 管理asdFftGetWorkspaceSize/SetWorkspace、同步asdFftSynchronize等。同时定义 asdFftType、asdFftDirection、asdFft1dDimType 等枚举类型。libasdsip.so 或 libasdsip_static.ablas_api.hBLAS 线性代数接口。定义 BLAS Handle 管理asdBlasCreate/Destroy、流绑定asdBlasSetStream、计划创建MakeXxxPlan 系列、Workspace 管理、同步等。提供的 BLAS 操作包括矩阵乘法Cgemm、CgemmBatched、HCgemmBatched、矩阵向量乘Cgemv、CgemvBatched、HCgemvBatched、三角矩阵求解Strmv、Ctrmv、矩阵三角乘Strmm、秩一更新Cgerc、向量点积Sdot、Cdotu、Cdotc、向量范数Snrm2、Scnrm2、向量绝对值求和Sasum、Scasum、向量缩放Sscal、Cscal、Csscal、向量拷贝Scopy、Ccopy、向量交换Sswap、Cswap、向量线性组合Caxpy、Givens 旋转Csrot、矩阵求逆CmatinvBatched、HCmatinvBatched、列向量乘ColwiseMul、复矩阵点积ComplexMatDot、最大绝对值索引Isamax、Icamax等。同时定义 asdBlasStatus、asdBlasSideMode_t、asdBlasOperation_t、asdBlasFillMode_t、asdBlasDiagType_t 等枚举类型。依赖 acl/acl.h 和 aclnn/opdev/fp16_t.h。libasdsip.so 或 libasdsip_static.afilter_api.h滤波器/卷积接口。定义一维卷积操作asdConvolve及其 Workspace 大小查询asdConvolveGetWorkspaceSize。支持 ASD_CONVOLVE_FULL、ASD_CONVOLVE_SAME、ASD_CONVOLVE_VALID 三种卷积模式asdConvolveMode_t 枚举。libasdsip.so 或 libasdsip_static.ainterp_api.h插值接口。定义基于系数的插值操作asdInterpWithCoeff及其 Workspace 大小查询asdInterpWithCoeffGetWorkspaceSize。libasdsip.so 或 libasdsip_static.adomain/rs_api.h雷达信号处理领域接口。定义 Sinc 插值操作rsInterpolationBySinc及其 Workspace 大小查询rsInterpolationBySincGetWorkspaceSize面向雷达信号处理场景。libasdsip.so 或 libasdsip_static.a2.1 总入口头文件 asdsip.h 的聚合机制从源码看asdsip.h 的完整实现非常简洁它不定义任何接口只通过预处理指令依次引入六个模块头文件#include base_api.h #include blas_api.h #include fft_api.h #include filter_api.h #include interp_api.h #include domain/rs_api.h因此工程实践中一般建议直接包含总入口头文件asdsip.h一次获得全部接口若仅使用某个模块例如只用 FFT 接口也可只包含对应模块头文件以减小预处理面但链接目标库不变均为 libasdsip.so 或 libasdsip_static.a。2.2 头文件之间的依赖关系状态码依赖所有模块头文件都依赖 utils/aspb_status.h接口返回值统一使用AsdSip::AspbStatus状态类型FFT 接口内部也定义了asdFftStatus枚举SUCCESS 0、FAILED 1。张量类型依赖Base/BLAS/Filter/Interpolation/Domain 头文件均依赖 utils/mem_base.h 与acl/acl.h接口的输入输出张量统一使用aclTensor *类型由 Ascend CL 运行时库 libascendcl.so 提供。BLAS 特有依赖blas_api.h 额外依赖aclnn/opdev/fp16_t.h来自 Ascend NN 算子库 libaclnn.so因此 BLAS 模块对 CANN 的 aclnn 头文件有依赖FFT 头文件则通过前置声明typedef struct aclTensor aclTensor;弱化了对 acl 头文件的直接依赖。2.3 关键枚举与数据类型的取值约定结合源码可将文档中提到的枚举补充完整供参数校验参考FFT 类型asdFftTypeASCEND_FFT_C2C 0x10、ASCEND_FFT_C2R 0x11、ASCEND_FFT_R2C 0x12、ASCEND_STFT_C2C 0x20、ASCEND_STFT_C2R 0x21、ASCEND_STFT_R2C 0x22、ASCEND_FFT_C2C_SEP 0x30分离实部/虚部的 C2C对应asdFftExecC2CSeparated。FFT 方向asdFftDirectionASCEND_FFT_FORWARD 0x10、ASCEND_FFT_INVERSE 0x11。FFT 一维维度类型asdFft1dDimTypeASCEND_FFT_HORIZONTAL 0x10、ASCEND_FFT_VERTICAL 0x11且asdFftMakePlan1D中该参数有默认值 HORIZONTAL。BLAS 枚举asdBlasStatusBLAS_SUCCESS/BLAS_FAILED、asdBlasSideMode_tASDBLAS_SIDE_LEFT/ASDBLAS_SIDE_RIGHT、asdBlasOperation_tASDBLAS_OP_N/OP_T/OP_C对应不转置/转置/共轭转置、asdBlasFillMode_tASDBLAS_FILL_MODE_LOWER/UPPER/FULL、asdBlasDiagType_tASDBLAS_DIAG_NON_UNIT/UNIT。卷积模式asdConvolveMode_tASD_CONVOLVE_FULL 0、ASD_CONVOLVE_SAME 1、ASD_CONVOLVE_VALID 2。三、库文件说明主用户库、核心运行时库与第三方依赖构建完成并执行安装后库文件位于安装目录的lib/下。仓库根 CMakeLists.txt 中通过install(FILES ... DESTINATION lib)将 MKI 库一并安装到lib/目录安装布局与文档描述一致。3.1 AsdSip 自有库文件库文件类型说明libasdsip.so动态库共享库主用户库。聚合 utils、base、blas、fft、filter、interpolation 全部模块链接 libasdsip_core.so。用户应用程序应链接此库以使用 AsdSip 全部公开接口。libasdsip_static.a静态库主用户库静态版本。功能与 libasdsip.so 相同适用于需要静态链接的场景。链接时需额外链接 libasdsip_core.so。libasdsip_core.so动态库共享库算子核心运行时库。包含算子注册、Kernel 加载与调度Ops 单例、tiling 逻辑等。内部链接 MKI 静态库libmki_static.a和 Ascend CANN 算子编译框架库。由 libasdsip.so 自动依赖用户通常无需单独引用。libasdsip_host.so动态库共享库主机端工具库。包含算子参数处理等主机端辅助功能依赖 ops_utils 模块。3.2 第三方依赖库以下库文件由 CANN 软件包或 MKI 框架提供编译和运行时需确保其在链接路径中可用库文件来源说明libmki.so / libmki_static.aMKI 框架3rdparty/mkiMKI 内核抽象框架库。提供 Tensor、Kernel、Operation 等核心抽象以及运行时调度能力。libasdsip_core.so 在发布模式下静态链接 libmki_static.a在测试模式下动态链接 libmki.so。libascendcl.soCANN 软件包$ASCEND_HOME_PATH/lib64Ascend CL 运行时库。提供 aclTensor 等基础数据类型和设备管理、内存管理、Stream 管理等运行时接口。AsdSip 公开头文件中引用了 acl/acl.h。libaclnn.soCANN 软件包$ASCEND_HOME_PATH/lib64Ascend NN 算子库。提供 aclnn 系列算子接口BLAS 模块中部分操作依赖 aclnn 头文件aclnn/opdev/fp16_t.h、acl/acl_meta.h 等。链接注意点使用动态库时只需链接-lasdsip其自动依赖 libasdsip_core.so并间接携带 libmki 与 CANN 算子编译框架库使用静态库 libasdsip_static.a 时由于静态链接不会自动传递依赖需要显式追加链接 libasdsip_core.so 以及 CANN 的 libascendcl.so、libaclnn.so 等运行时库。四、编译链接实战以仓库示例工程为模板仓库 example/CMakeLists.txt 给出了标准链接配置可以直接作为用户工程的模板add_executable(Sample ${SOURCE_FILES}) target_link_libraries(Sample PUBLIC asdsip asdsip_core asdsip_host) include_directories( $ENV{ASCEND_HOME_PATH}/include $ENV{ASCEND_HOME_PATH}/include/aclnn ) target_link_libraries(Sample PUBLIC asdsip asdsip_core asdsip_host $ENV{ASCEND_HOME_PATH}/lib64/libascendcl.so $ENV{ASCEND_HOME_PATH}/lib64/libnnopbase.so $ENV{ASCEND_HOME_PATH}/lib64/libopapi.so )要点解读头文件搜索路径除 AsdSip 安装目录的include/外还需将$ASCEND_HOME_PATH/include与$ASCEND_HOME_PATH/include/aclnn加入include_directories以满足acl/acl.h、acl_meta.h、aclnn/opdev/fp16_t.h等 CANN 头文件的解析。链接目标示例同时链接asdsip、asdsip_core、asdsip_host三个目标。其中asdsip是主用户库asdsip_core提供算子注册与 Kernel 调度asdsip_host提供主机端参数处理。从源码结构看三者对应 libasdsip.so、libasdsip_core.so、libasdsip_host.so。CANN 运行时库显式链接 libascendcl.so设备/内存/Stream 管理、libnnopbase.so 与 libopapi.so算子底座这些库位于$ASCEND_HOME_PATH/lib64。环境变量CMake 配置阶段依赖ASCEND_HOME_PATH环境变量见仓库根 CMakeLists.txt 中的include_directories与link_directories编译前需确保已配置 CANN 环境例如执行source set_env.sh或安装目录下的环境初始化脚本。五、典型调用流程从头文件到库的完整落地以仓库 example/example.cpp 为例一个 AsdSip 程序的完整调用链如下可验证头文件与库的使用方式包含头文件#include asdsip.h总入口聚合全部接口并包含acl/acl.h与acl_meta.h用于 acl 初始化与张量创建。初始化 Ascend 环境依次调用aclInit(nullptr)、aclrtSetDevice(deviceId)、aclrtCreateStream(stream)获得执行 Stream。准备张量通过aclrtMalloc申请设备侧内存、aclrtMemcpy拷贝 Host 数据再调用aclCreateTensor(shape, shapeSize, dataType, strides, ...)创建aclTensor *作为接口输入输出上述过程对应示例中的CreateAclTensor模板函数。调用 AsdSip 接口在AsdSip命名空间下调用对应算子接口对需要 Handle 的模块FFT/BLAS遵循Create → SetStream → MakePlan → GetWorkspaceSize/SetWorkspace → Exec → Synchronize → Destroy的典型生命周期。链接运行按第四节方式链接 libasdsip.so 及 CANN 运行时库运行前将安装目录的lib/与$ASCEND_HOME_PATH/lib64加入LD_LIBRARY_PATH。仓库 example/ 目录下的各模块示例如 example/A2/BLAS/cgemm/example_cgemm.cpp、example/A2/FFT/1d/example_acl_fft_c2c_1d.cpp以及 tests/ut/unittest/ 下的单测代码均遵循上述模式可作为编写首个 AsdSip 程序的参考。六、小结正确使用 AsdSip 库的关键在于三点一是按接口前缀确认所属模块并选择对应头文件或直接使用asdsip.h总入口二是理解 libasdsip.so主用户库、libasdsip_core.so算子核心运行时、libasdsip_host.so主机端工具库的分工与依赖关系三是编译时同时配置 AsdSip 安装目录头文件与 CANN 头文件链接时按动态/静态两种方式补齐 CANN 运行时库。结合仓库示例工程与本文的链接配置即可快速搭建可运行的 AsdSip 应用程序。【免费下载链接】sip本项目是CANN提供的一款高效、可靠的高性能信号处理算子加速库基于华为Ascend AI处理器专门为信号处理领域而设计。项目地址: https://gitcode.com/cann/sip创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表