CANN开发套件包中提供了自定义算子工程生成工具msOpGen,可基于算子原型定义输出算子工程:包括算子host侧代码实现文件、算子kernel侧实现文件以及工程编译配置文件等。
[object Object]
使用msOpGen工具创建算子开发工程的步骤如下:
编写算子的原型定义json文件,用于生成算子开发工程。
例如,AddCustom算子的json文件命名为add_custom.json,文件内容如下:
[object Object]例如,ReduceMaxCustom算子(包含属性)的json文件命名为reduce_max_custom.json,文件内容如下:
[object Object][object Object]
使用msOpGen工具生成算子的开发工程。以生成AddCustom的算子工程为例,下文仅针对关键参数进行解释,详细参数说明请参见。
[object Object]${INSTALL_DIR}为CANN软件安装后文件存储路径,请根据实际环境进行替换。
-i:指定算子原型定义文件_add_custom_.json所在路径,请根据实际情况修改。
-c:ai_core-_<soc_version>代表算子在AI Core上执行,<soc_version>_为AI处理器的型号。
[object Object]
[object Object]
-lan: 参数cpp代表算子基于Ascend C编程框架,使用C/C++编程语言开发。
-out:生成文件所在路径,可配置为绝对路径或者相对路径,并且工具执行用户对路径具有可读写权限。若不配置,则默认生成在执行命令的当前路径。
命令执行完后,会在-out指定目录或者默认路径下生成算子工程目录,工程中包含算子实现的模板文件,编译脚本等,以AddCustom算子为例,目录结构如下所示:
[object Object][object Object]
工程目录中的op_kernel和op_host包含了算子的核心实现文件。op_kernel下存放。op_host下存放host侧代码实现,包括、。其中kernel侧算子实现和host侧tiling实现在章节已经介绍了其核心的实现方法,在该章节会侧重于介绍接入CANN框架后的编程模式和API的使用。工程目录中的CMakePresets.json,用于开发者完成工程编译相关配置,之后即可进行编译部署。