算子动态库和静态库编译是将算子实现代码及相关文件编译为动态库和静态库的过程。相比自定义算子包编译,动态库和静态库编译能够显著简化集成与部署流程。该过程包括将算子Kernel实现、Host侧Tiling实现、以及编译链接成动态库和静态库。
同时会自动生成以下头文件:
[object Object]
算子动态库和静态库编译的具体步骤如下:
完成工程编译相关配置。
除了上文介绍的,算子动态库和静态库编译需要在工程目录下的CMakePresets.json cacheVariables的配置项中配置ASCEND_PACK_SHARED_LIBRARY为True,默认为False(会生成run包)。
[object Object]在算子工程目录下执行如下命令,进行算子工程编译。
[object Object]- 算子原型定义头文件,用于算子入图场景,定义算子的原型。
- 单算子调用aclnn头文件,用于单算子调用场景,提供直接调用算子的接口。
- 动态库libcust_opapi.so,用于动态链接。
- 静态库lib${vendor_name}.a,用于静态链接。
- 安装文件{vendor_name}-targets.cmake,方便开发者将多个厂商的算子动态库或静态库集成到一个公共的动态库中,其中${vendor_name}是厂商名,也可以理解成同一个算子工程生成的算子package名称。具体集成方式可以参考。
具体目录结构如下:
[object Object]
单算子调用场景
单算子调用场景可以通过如下方式对中生成的动态库和静态库进行集成和使用。
动态库集成
[object Object]静态库集成
[object Object]静态库和动态库混合使用场景
[object Object]
[object Object]