API接口概述
Ascend C定义了计算类、数据搬运类、内存管理及任务同步等API,接口功能描述如下表。
接口类别 |
功能描述 |
---|---|
矢量计算 |
调用Vector计算资源执行计算。 |
矩阵计算 |
调用Cube计算资源执行计算。 |
数据转换 |
将数据格式进行转换,如转置,2d到3d转换等。 |
数据搬移 |
计算接口基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算接口完成计算,最后再从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬移接口。 |
内存管理及任务同步 |
任务同步类API,完成任务间的通信和同步,简化流水并行的处理。 Ascend C对于内存资源进行了抽象,用于管理片上内存资源,避免硬件结构变化导致的算子代码修改。内存管理类API用于计算任务之间的数据传递。 |
数据填充 |
实现数据填充到向量的功能。 |
目标识别 |
使用Region proposal格式进行计算,通常用于目标识别功能。 |
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的特点。