算子运行
算子的计算算法实现通过Ascend C API来完成,而算子的加载调用则使用Runtime API来完成。本章节将结合核函数调用介绍CANN软件栈中Ascend C算子运行时常用的Runtime接口。Runtime接口更多信息与细节可以参考“acl API(C&C++)”章节。
加载和运行代码
加载和运行算子时,需要使用Runtime API,完成运行时管理和配置。主要流程和使用到的API如下:
- 初始化:aclInit。
- 运行时资源申请:通过aclrtSetDevice和aclrtCreateStream分别申请Device、Stream运行管理资源。
- 分配Host内存,并进行数据初始化。
- 分配Device内存,并将数据从Host上拷贝到Device上,参与核函数计算。
- 使用<<<>>>调用算子核函数。
- 执行核函数后,将Device上的运算结果拷贝回Host。
- 异步等待核函数执行完成:aclrtSynchronizeStream。
- 资源释放:通过aclrtDestroyStream和aclrtResetDevice分别释放Stream、Device运行管理资源。
- 去初始化:aclFinalize。

Kernel加载与执行的更多方式
Kernel的加载与执行也可以通过二进制加载方式实现,这是最底层的接口实现方式。内核调用符<<<...>>>为对底层接口的封装实现。使用时需要bisheng命令行编译将算子源文件编译为二进制.o文件,再通过aclrtLaunchKernelWithConfig等Kernel加载与执行接口完成算子调用。
- bisheng命令行编译选项的使用介绍请参考常用的编译选项。
父主题: 编译与运行
