CANN/asc-devkit C API编程指南
C API【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkitC API开放芯片完备编程能力支持以数组形式分配内存一般基于指针编程。提供与业界一致的C语言编程体验。定位与特性C API是Ascend C三层梯度化编程接口中的语言扩展层SIMD API定位为最底层的C语言接口基于指针编程提供完备的C语言编程能力。C API可直接映射NPU硬件指令开发者自主管理内存搬运与同步与TPipe/TQue自动管理内存、同步不同开放全部底层硬件能力。适配C语言开发习惯适合对性能和可控性要求较高的算子开发场景是追求极致性能、充分释放NPU硬件潜能的核心路径。详细内容请参考C语言编程概述。需要包含的头文件[!NOTE]说明 包含asc_simd.h文件来调用C API相应接口。如无特殊说明包含该头文件即可满足接口调用需求。 若API文档中有特殊说明则应遵循API的具体说明。#include c_api/asc_simd.hAPI类型介绍前n个数据计算该类型API在计算时采用“紧密排布”的数据读取方式即从起始位置开始按顺序连续获取所需数据。例如若需处理N个数据则从源操作数的第0个位置开始依次取至第N-1个位置。高维切分计算该类型API按照设定的规则“跳过部分数据”。适合处理需要间隔采样的场景灵活度高但需要额外配置相关参数。同步计算该类型API内部自动插入同步操作易用性更强。关键字名称描述__gm__存储空间定义修饰符表示被修饰的变量位于Global Memory地址空间。__ubuf__存储空间定义修饰符表示被修饰的变量位于Unified Buffer地址空间。__aicore__执行空间限定符。表示该函数只能在Ai Core上执行。__cbuf__存储空间定义修饰符表示被修饰的变量位于L1 Buffer地址空间。__simd_callee__执行空间限定符。表示该函数只能在Reg上执行。流水类型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的操作和从UB到UB的搬运操作。PIPE_FIXFixpipe流水线。PIPE_ALL所有流水线。可通过同步控制类API控制同一流水线内的运行顺序和不同流水线间的执行顺序。API列表目录数据结构矢量计算数据搬运标量操作矩阵计算同步控制系统变量缓存控制原子操作其他操作Reg数据搬运Reg矢量计算参考样例Atlas A3 训练系列产品/Atlas A3 推理系列产品的C API样例请参考C API Add样例。 Ascend 950PR/Ascend 950DT的C API样例请参考C API Add样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考