API接口概述
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示意图


Ascend C提供了多层级的0-3级API,随着级别增高,API使用的自由度降低,易用性增强。您可以根据需要选择合适的API,使用最通俗易懂的高级接口快速搭建算子逻辑,使用自由灵活的低级接口进行复杂的逻辑实现和性能调优。以矢量计算类API为例:
接口级别 |
接口说明 |
---|---|
0级 |
功能灵活的计算API,充分发挥硬件优势,支持对每个操作数的Block stride,Repeat stride,Mask的操作。Block stride,Repeat stride,Mask参数的详细介绍请参见0级接口通用参数说明。 |
1级 |
slice计算API,解决多维数据中的切片计算问题。该版本暂不支持1级接口。 |
2级 |
针对源操作数的连续数据进行计算并连续写入目的操作数,解决一维tensor的连续计算问题。 |
3级 |
运算符重载,支持+, -, *, /, |, &, <, >, <=, >=, ==, !=,实现2级指令的简化表达。 |
下图以矢量加法计算为例,展示了不同级别矢量计算类API的特点。
图2 不同级别矢量计算类API的特点


父主题: Ascend C API