文档首页 > > 推理场景> 应用软件开发指南 (C&C++)> 开发典型功能点的介绍> 单算子调用> 未被封装成AscendCL接口的算子>

固定Shape算子

固定Shape算子

分享
更新时间:2021/01/27 GMT+08:00

对于昇腾AI处理器不支持的算子,用户需参考TBE自定义算子开发指南先完成自定义算子的开发,再参考如下内容执行单算子。

基本原理

单算子执行的基本流程如下,详细样例请参见数据后处理(调用单算子),回传结果到Host

  1. 资源初始化,包括AscendCL初始化、设置单算子模型文件的加载目录、指定用于运算的Device等。
    • 调用aclInit接口实现AscendCL初始化。
    • 单算子模型文件,需要用户提前参见ATC工具使用指南将单算子定义文件(*.json)编译成适配昇腾AI处理器的离线模型(*.om文件)。
    • 加载单算子模型文件,有两种方式:

      调用aclopSetModelDir接口,设置加载模型文件的目录,目录下存放单算子模型文件(*.om文件)。

      调用aclopLoad接口,从内存中加载单算子模型数据,由用户管理内存。单算子模型数据是指“单算子编译成*.om文件后,再将om文件读取到内存中”的数据。

    • 调用aclrtSetDevice接口指定运算的Device。
    • 调用aclrtCreateContext接口显式创建一个Context,调用aclrtCreateStream接口显式创建一个Stream。

      若没有显式创建Stream,则使用默认Stream,默认Stream是在调用aclrtSetDevice接口时隐式创建的,默认Stream作为接口入参时,直接传NULL。

  2. 将算子输入数据从Host复制到Device上。
  3. 执行单算子。

    AscendCL支持以下两种方式执行单算子:

    • 您需自行构造算子描述信息(输入输出Tensor描述、算子属性等)、申请存放算子输入输出数据的内存、调用aclopExecute接口加载并执行算子。

      该方式下,每次调用aclopExecute接口执行算子,系统内部都会根据算子描述信息匹配内存中的模型。

    • 您需自行构造算子描述信息(输入输出Tensor描述、算子属性等)、申请存放算子输入输出数据的内存、调用aclopCreateHandle接口创建一个Handle、再调用aclopExecWithHandle接口加载并执行算子。

      该方式下,在调用aclopCreateHandle接口时,系统内部将算子描述信息匹配到内存中的模型,并缓存在Handle中,每次调用aclopExecWithHandle接口执行算子时,无需重复匹配算子与模型,因此在涉及多次执行同一个算子时,效率更高。Handle使用结束后,需调用aclopDestroyHandle接口释放。

  4. 将算子运算的输出数据从Device上复制到Host上(提前申请Host上的内存)。
  5. 按顺序先释放Stream资源,再释放Context资源,最后释放Device资源。
  6. 调用aclFinalize接口实现AscendCL去初始化。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!非常感谢您的反馈,我们会继续努力做到更好!
反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

智能客服提问云社区提问