算子动态库编译是将算子实现代码及相关文件编译为动态库的过程。相比自定义算子包编译,动态库编译能够显著简化集成与部署流程。该过程包括将算子kernel实现、host侧tiling实现、入图适配文件以及自动生成的单算子调用实现代码编译链接成动态库。
同时会自动生成以下头文件:
算子动态库编译支持如下型号:
算子动态库编译的具体步骤如下:
"ASCEND_PACK_SHARED_LIBRARY": { "type": "BOOL", "value": "True" }
./build.sh
编译成功后,会在${CMAKE_INSTALL_PREFIX}/op_api目录生成算子原型定义头文件、单算子调用aclnn头文件和lib库libcust_opapi.so。具体目录结构如下:
├── op_api │ ├── include │ ├── aclnn_optype1.h // 单算子调用aclnn头文件 │ └── aclnn_optype2.h │ └── aclnn_optypexxx.h │ └── op_proto.h // 算子原型定义头文件 │ ├── lib │ ├── libcust_opapi.so // 算子动态库
export ASCEND_CUSTOM_OPP_PATH=${CMAKE_INSTALL_PREFIX}/op_api/lib/:${ASCEND_CUSTOM_OPP_PATH}
动态库编译和算子包编译功能同时使用时,前者生成的动态库优先级更高。
如下示例中,path1和path3是算子包编译生成的目录,path2和path4是动态库编译产物的存放目录,则编译产物的优先级为2>4>1>3。
ASCEND_CUSTOM_OPP_PATH=<path1>/vendor_name1:<path2>/op_api/lib/:<path3>/vendor_name3:<path4>/op_api/lib/