Ascend C算子采用标准C++语法和一组类库API进行编程,您可以根据自己的需求选择合适的API。Ascend C编程类库API示意图如下所示,Ascend C API的操作数都是Tensor类型:GlobalTensor和LocalTensor;类库API的分为高阶API和基础API。
高阶API:封装常用算法逻辑的API,比如Matmul、Softmax等,可减少重复开发,提高开发者开发效率。使用高阶API可以快速的实现相对复杂的算法逻辑。
基础API:实现基础功能的API,包括计算类、数据搬运、内存管理和任务同步等。使用基础API自由度更高,可以通过API组合实现自己的算子逻辑。
随着级别增高,API使用的自由度降低,易用性增强。您可以根据需要选择合适的API,使用最通俗易懂的高级接口快速搭建算子逻辑,使用自由灵活的低级接口进行复杂的逻辑实现和性能调优。以矢量计算类API为例:
接口级别 |
接口说明 |
---|---|
0级 |
功能灵活的计算API,充分发挥硬件优势,支持对每个操作数的Block stride,Repeat stride,Mask的操作。Block stride,Repeat stride,Mask参数的详细介绍请参见基础API通用说明。 |
1级 |
slice计算API,解决多维数据中的切片计算问题。该版本暂不支持1级接口。 |
2级 |
针对源操作数的连续count个数据进行计算并连续写入目的操作数,解决一维tensor的连续计算问题。例如, Add(dst, src1, src2, count); |
3级 |
针对整个tensor进行计算,通过运算符重载的方式实现,支持+, -, *, /, |, &, <, >, <=, >=, ==, !=,实现计算的简化表达。例如, dst=src1+src2 |
下图以矢量加法计算为例,展示了不同级别矢量计算类API的特点。