Ascend C算子采用标准C++语法和一组类库API进行编程,您可以在核函数的实现中根据自己的需求选择合适的API。
Ascend C API的计算操作数都是Tensor类型:GlobalTensor和LocalTensor。
类库API的分类如下:
- 高阶API:提供Matmul、SoftMax等高阶API,封装常用算法逻辑,可减少重复开发,提高开发者开发效率。
- 基础API:提供基础功能API。
- 计算类API,包括标量计算API、向量计算API、矩阵计算API,分别实现调用Scalar计算单元、Vector计算单元、Cube计算单元执行计算的功能。
- 数据搬运API,计算API基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算接口完成计算,最后从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬移接口,比如DataCopy接口。
- 内存管理API,用于分配管理内存,比如AllocTensor、FreeTensor接口。
- 任务同步API,完成任务间的通信和同步,比如EnQue、DeQue接口。不同的API指令间有可能存在依赖关系,从AI Core内部并行计算架构抽象可知,不同的指令异步并行执行,为了保证不同指令队列间的指令按照正确的逻辑关系执行,需要向不同的组件发送同步指令。任务同步类API内部即完成这个发送同步指令的过程,开发者无需关注内部实现逻辑,使用简单的API接口即可完成。
图1 Ascend C编程类库API示意图