开发应用时,如果涉及执行单个算子,则应用程序中必须包含执行单个算子的代码逻辑。关于执行单个算子的接口调用流程,请先参见pyACL接口调用流程了解整体流程,再查看本节中的流程说明。
系统支持的算子请参见《算子清单》。
对于系统不支持的算子,用户需先参见《TBE&AI CPU算子开发指南》完成自定义算子开发。
如果需要将Host上数据传输到Device,则需要调用acl.rt.memcpy接口(同步接口)或acl.rt.memcpy_async接口(异步接口)通过内存复制的方式实现数据传输。
需用户调用acl.op.infer_shape接口、acl.get_tensor_desc_num_dims接口、acl.get_tensor_desc_dim_v2接口、acl.get_tensor_desc_dim_range等接口,推导或预估算子的输出Shape,作为算子执行接口acl.op.execute_v2的输入。
不以handle方式执行算子时,每次执行算子时,系统内部都会根据算子描述信息匹配内存中的模型。
以handle方式执行算子时,系统内部将算子描述信息匹配到内存中的模型,并缓存在Handle中,每次执行算子时,无需重复匹配算子与模型,因此在涉及多次执行同一个算子时,效率更高。但Handle使用结束后,需调用acl.op.destroy_handle接口释放。
如果需要将Device上的算子执行结果数据传输到Host,则需要调用acl.rt.memcpy接口(同步接口)或acl.rt.memcpy_async接口(异步接口)通过内存复制的方式实现数据传输,然后再释放内存。