开发应用时,如果涉及执行单个算子,则应用程序中必须包含执行单个算子的代码逻辑,关于执行单个算子的接口调用流程,请依次参见主要接口调用流程以及本节中的说明。
系统支持的算子请参见《算子清单》。
对于系统不支持的算子,用户需先参见《TBE自定义算子开发指南》或《AI CPU自定义算子开发指南》完成自定义算子开发。
该种方式下编译算子,需使用ATC工具,详细描述请参见《ATC工具使用指南》,将单算子定义文件(*.json)编译成适配昇腾AI处理器的离线模型(*.om文件)。
算子选择器需由用户提前定义并实现,算子选择器的实现样例请参见《TBE自定义算子开发指南》中的“专题 > TIK自定义算子动态Shape专题”:
typedef aclError (*aclopCompileFunc)(int numInputs, const aclTensorDesc *const inputDesc[], int numOutputs, const aclTensorDesc *const outputDesc[], const aclopAttr *opAttr, aclopKernelDesc *aclopKernelDesc);
函数实现:
用户自行编写代码逻辑实现Tiling策略选择、Tiling参数生成,并将调用aclopSetKernelArgs接口,设置算子Tiling参数、执行并发数等。
如果需要将Host上数据传输到Device,则需要调用aclrtMemcpy接口(同步接口)或aclrtMemcpyAsync接口(异步接口)通过内存复制的方式实现数据传输。
如果需要将Device上的算子执行结果数据传输到Host,则需要调用aclrtMemcpy接口(同步接口)或aclrtMemcpyAsync接口(异步接口)通过内存复制的方式实现数据传输,然后再释放内存。