文档
注册

接口概述

Ascend C算子采用标准C++语法和一组类库API进行编程,您可以根据自己的需求选择合适的API。Ascend C编程类库API示意图如下所示,Ascend C API的操作数都是Tensor类型:GlobalTensor和LocalTensor;类库API分为基础API和高阶API。

基础API:实现对硬件能力的抽象,开放芯片的能力,保证完备性和兼容性。

高阶API:实现一些常用的计算算法,用于提高编程开发效率,通常会调用多种基础API实现。高阶API包括数学库、Matmul、Softmax等API。

图1 Ascend C编程类库API示意图
对于基础API,主要分为以下几类:
  • 计算API,包括标量计算API、向量计算API、矩阵计算API,分别实现调用Scalar计算单元、Vector计算单元、Cube计算单元执行计算的功能。
  • 数据搬运API,计算API基于Local Memory数据进行计算,所以数据需要先从Global Memory搬运至Local Memory,再使用计算API完成计算,最后从Local Memory搬出至Global Memory。执行搬运过程的接口称之为数据搬移API,比如DataCopy接口。
  • 内存管理API,用于分配管理内存,比如AllocTensor、FreeTensor接口。
  • 同步控制API,完成任务间的通信和同步,比如EnQue、DeQue接口。不同的API指令间有可能存在依赖关系,从AI Core内部并行计算架构抽象可知,不同的指令异步并行执行,为了保证不同指令队列间的指令按照正确的逻辑关系执行,需要向不同的组件发送同步指令。同步控制API内部即完成这个发送同步指令的过程,开发者无需关注内部实现逻辑,使用简单的API接口即可完成。

对于基础API中的计算API,根据对数据操作方法的不同,分为以下几种计算方式:

  • 整个tensor参与计算:通过运算符重载的方式实现,支持+, -, *, /, |, &, <, >, <=, >=, ==, !=,实现计算的简化表达。例如:
    dst=src1+src2
  • tensor前n个数据计算针对源操作数的连续n个数据进行计算并连续写入目的操作数,解决一维tensor的连续计算问题。例如:
    Add(dst, src1, src2, n);
  • tensor高维切分计算:功能灵活的计算API,充分发挥硬件优势支持对每个操作数的DataBlock strideRepeat strideMask等参数的操作DataBlock strideRepeat strideMask等参数的详细介绍请参见基础API通用说明

下图以矢量加法为例,展示了几种计算方式的特点。

图2 计算API几种计算方式的特点

Ascend C API所在头文件目录为:

  • 基础API:{install_path}/{arch-os}/tikcpp/tikcfw/interface
  • 高阶API:(注意,如下目录头文件中包含的接口如果未在资料中声明,属于间接调用接口,开发者无需关注)
    • {install_path}/{arch-os}/tikcpp/tikcfw/lib
    • {install_path}/include/tiling

其中{install_path}表示CANN软件安装目录,{arch-os}为运行环境的架构和操作系统

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词