开发者
资源
[object Object][object Object]

算子动态库和静态库编译是将算子实现代码及相关文件编译为动态库和静态库的过程。相比自定义算子包编译,动态库和静态库编译能够显著简化集成与部署流程。该过程包括将算子Kernel实现、Host侧Tiling实现、以及编译链接成动态库和静态库。

同时会自动生成以下头文件:

  • 单算子调用aclnn头文件,用于
  • 算子原型定义头文件,用于
[object Object]

算子动态库和静态库编译的具体步骤如下:

  1. 完成工程编译相关配置。

    除了上文介绍的,算子动态库和静态库编译需要在工程目录下的CMakePresets.json cacheVariables的配置项中配置ASCEND_PACK_SHARED_LIBRARY为True,默认为False(会生成run包)。

    [object Object]
  2. 在算子工程目录下执行如下命令,进行算子工程编译。

    [object Object]

    编译成功后,会在/op_api目录生成以下文件:

    • 算子原型定义头文件,用于算子入图场景,定义算子的原型。
    • 单算子调用aclnn头文件,用于单算子调用场景,提供直接调用算子的接口。
    • 动态库libcust_opapi.so,用于动态链接。
    • 静态库lib${vendor_name}.a,用于静态链接。
    • 安装文件{vendor_name}config.cmake\{vendor\_name\}-config.cmake和{vendor_name}-targets.cmake,方便开发者将多个厂商的算子动态库或静态库集成到一个公共的动态库中,其中${vendor_name}是厂商名,也可以理解成同一个算子工程生成的算子package名称。具体集成方式可以参考

    具体目录结构如下:

    [object Object]
[object Object]
  • 单算子调用场景

    单算子调用场景可以通过如下方式对中生成的动态库和静态库进行集成和使用。

    完整样例可参考

    • 动态库集成

      [object Object]
    • 静态库集成

      [object Object]
    • 静态库和动态库混合使用场景

      [object Object]
[object Object]
  • 算子入图场景
    • 配置ASCEND_CUSTOM_OPP_PATH环境变量,将动态库libcust_opapi.so的绝对路径追加到该环境变量。由GE框架在图编译和执行时根据该环境变量搜索算子动态库并使用。环境变量位置越靠前,算子的优先级越高。

      [object Object]
      [object Object]
    • 如果开发者通过Ascend Graph进行图开发,除了配置环境变量的方式也可以采用直接在应用程序的编译文件中链接动态库libcust_opapi.so的方式。Ascend Graph图开发的相关信息请参考。动态库链接方式的so加载优先级高于环境变量配置方式。