C API

C API开放芯片完备编程能力,支持以数组形式分配内存,一般基于指针编程。提供与业界一致的C语言编程体验。

需要包含的头文件

说明

包含asc_simd.h文件来调用C API相应接口。如无特殊说明,包含该头文件即可满足接口调用需求。 若API文档中有特殊说明,则应遵循API的具体说明。

#include "c_api/asc_simd.h"

API类型介绍

  • 前n个数据计算:该类型API在计算时采用“紧密排布”的数据读取方式,即从起始位置开始,按顺序连续获取所需数据。例如,若需处理N个数据,则从源操作数的第0个位置开始,依次取至第N-1个位置。
  • 高维切分计算:该类型API按照设定的规则“跳过部分数据”。适合处理需要间隔采样的场景,灵活度高,但需要额外配置相关参数。
  • 同步计算:该类型API内部自动插入同步操作,易用性更强。

关键字

名称 描述
__gm__ 存储空间定义修饰符,表示被修饰的变量位于Global Memory地址空间。
__ubuf__ 存储空间定义修饰符,表示被修饰的变量位于Unified Buffer地址空间。
__aicore__ 执行空间限定符。表示该函数只能在Ai Core上执行。

流水类型

NPU内部有不同的计算单元,在计算时往往需要把计算数据搬运到计算单元上。不同计算单元上的计算过程、数据搬运过程可划分为不同的流水线。在AI Core上执行的操作会被分配到不同的流水线(PIPE)上执行,包括以下几种:

  • PIPE_S:标量流水线,负责指令分发和标量计算。
  • PIPE_V:矢量计算流水线。
  • PIPE_M:矩阵计算流水线。
  • PIPE_MTE1:搬运操作。包括从L1 Buffer到L0A Buffer或L0B Buffer,从L1 Buffer到UB的搬运操作和L0A Buffer或L0B Buffer的初始化操作。
  • PIPE_MTE2:搬运操作。包括从GM到L1 Buffer、从GM到L0A Buffer或L0B Buffer、从GM到UB的搬运操作和L1 Buffer的初始化操作。
  • PIPE_MTE3:搬运操作。包括从UB到GM,从UB到L1 Buffer的操作。
  • PIPE_FIX:Fixpipe流水线。
  • PIPE_ALL:所有流水线。

可通过同步控制类API控制同一流水线内的运行顺序和不同流水线建的执行顺序。

API列表

目录
数据结构
矢量计算
数据搬运
同步控制
系统变量
原子操作
其他操作