Ascend C算子采用标准C++语法和一组类库API进行编程,您可以在核函数的实现中根据自己的需求选择合适的API。
Ascend C API的计算操作数都是Tensor类型:GlobalTensor和LocalTensor。
类库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的特点。