API接口概述

Ascend C算子采用标准C++语法和一组类库API进行编程,您可以在核函数的实现中根据自己的需求选择合适的API。

Ascend C API的计算操作数都是Tensor类型:GlobalTensor和LocalTensor。

类库API的分类如下:

图1 Ascend C编程类库API示意图

Ascend C提供了多层级的0-3级API,随着级别增高,API使用的自由度降低,易用性增强。您可以根据需要选择合适的API,使用最通俗易懂的高级接口快速搭建算子逻辑,使用自由灵活的低级接口进行复杂的逻辑实现和性能调优。以矢量计算类API为例:

表1 多级矢量计算类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的特点