CANN/asc-devkit SIMD API通用约束说明

发布时间:2026/7/17 14:33:37
CANN/asc-devkit SIMD API通用约束说明 通用说明和约束【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit所需头文件和库文件[!NOTE]说明 Ascend C API所在头文件目录为基础API${INSTALL_DIR}/asc/include/basic_api/interface高阶API注意如下目录头文件中包含的接口如果未在资料中声明属于间接调用接口开发者无需关注${INSTALL_DIR}/asc/include/highlevel_api/lib${INSTALL_DIR}/asc/include/tiling${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例安装后文件默认存储路径为/usr/local/Ascend/cann。 使用Ascend C API依赖的库文件说明如下基础API不涉及高阶API因高阶API配套Host Tiling接口需要链接libtiling_api.a。为方便开发者使用Ascend C基础API和高阶API均支持通过包含kernel_operator.h文件来调用相应接口。如无特殊说明包含该头文件即可满足接口调用需求。若API文档中有特殊说明则应遵循API的具体说明。#include kernel_operator.h逻辑位置和物理存储的映射关系Ascend C API的操作数通常为GlobalTensor和LocalTensorTensor数据的存储位置均使用逻辑位置TPosition来表达从而隐藏了硬件架构的差异。TPosition类型包括VECIN、VECOUT、VECCALC、A1、A2、B1、B2、CO1、CO2等其与物理内存的映射关系如下表所示。表1TPosition与物理内存映射关系| TPosition | 物理内存 | | --- | --- | | GM | Global Memory | | VECIN | Unified Buffer | | VECCALC | Unified Buffer | | VECOUT | Unified Buffer | | A1 | L1 Buffer | | A2 | L0A Buffer | | B1 | L1 Buffer | | B2 | L0B Buffer | | C1 | Ascend 950PR/Ascend 950DTL1 Buffer。Atlas 训练系列产品Unified Buffer。Atlas 推理系列产品AI CoreUnified Buffer。Atlas A2 训练系列产品/Atlas A2 推理系列产品L1 Buffer。Atlas A3 训练系列产品/Atlas A3 推理系列产品L1 Buffer。Atlas 200I/500 A2 推理产品Unified Buffer。 | | C2 | Ascend 950PR/Ascend 950DTBiasTable Buffer。Atlas 训练系列产品L0C Buffer。Atlas 推理系列产品AI CoreL0C Buffer。Atlas A2 训练系列产品/Atlas A2 推理系列产品BiasTable Buffer。Atlas A3 训练系列产品/Atlas A3 推理系列产品BiasTable Buffer。Atlas 200I/500 A2 推理产品BiasTable Buffer。 | | CO1 | L0C Buffer | | CO2 | Ascend 950PR/Ascend 950DTGlobal Memory。Atlas 训练系列产品Unified Buffer。Atlas 推理系列产品AI CoreUnified Buffer。Atlas A2 训练系列产品/Atlas A2 推理系列产品Global Memory。Atlas A3 训练系列产品/Atlas A3 推理系列产品Global Memory。Atlas 200I/500 A2 推理产品Global Memory。 | | TSCM | L1 Buffer | | SPM | Ascend 950PR/Ascend 950DTGlobal Memory。Atlas 训练系列产品L1 Buffer。Atlas 推理系列产品AI CoreL1 Buffer。Atlas A2 训练系列产品/Atlas A2 推理系列产品Global Memory。Atlas A3 训练系列产品/Atlas A3 推理系列产品Global Memory。 | | C2PIPE2GM | Ascend 950PR/Ascend 950DTFixpipe Buffer。Atlas A2 训练系列产品/Atlas A2 推理系列产品Fixpipe Buffer。Atlas A3 训练系列产品/Atlas A3 推理系列产品Fixpipe Buffer。 |通用地址对齐约束AI Core上的存储单元用于存储矢量计算、矩阵计算的源操作数和目的操作数各类存储单元的对齐要求如表2所示因此Ascend C API操作数的起始地址对齐要求应与这些存储单元的对齐要求保持一致。需要注意的是如果接口中已明确说明操作数起始地址对齐要求则以具体API中的说明为准。表2不同存储单元的对齐要求| 存储单元 | 对齐要求 | | --- | --- | | Global Memory | 无对齐要求。 | | Unified Buffer | 32Byte对齐。 | | L1 Buffer | 32Byte对齐。 | | L0A Buffer/L0B Buffer | 512Byte对齐。 | | L0C Buffer | 64Byte对齐。 | | BiasTable Buffer | 64Byte对齐。 | | Fixpipe Buffer | 64Byte对齐。 |通用地址重叠约束使用基础API的Tensor高维切分计算接口时为了节省地址空间开发者可以定义一个Tensor供源操作数与目的操作数同时使用即地址重叠。使用时需要注意以下约束单次迭代内源操作数与目的操作数必须100%完全重叠不支持部分重叠。多次迭代间不支持前序迭代的目的操作数与后序迭代的源操作数重叠。例如第N次迭代的目的操作数是第N1次的源操作数如下图所示。在这种情况下第N次迭代可能会改写覆盖源操作数的数值导致无法得到预期结果。特别地对于部分双目计算类的APIAdd、Sub、Mul、Max、Min、AddRelu、SubRelu当数据类型为half、int32_t、float时支持前序迭代的目的操作数与后序迭代的源操作数重叠仅针对目的操作数和第二个源操作数重叠的情况且src1RepStride或者dstRepStride必须为0。图1地址重叠示例不支持![](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/地址重叠示例不支持.png 地址重叠示例不支持?utm_sourcegitcode_repo_files)[!NOTE]说明 本节所述地址重叠通用约束适用于一般情况API参考中如有额外特殊说明的则以具体API中的说明为准。 API中没有描述地址重叠约束的视为不支持Tensor高维切分计算的地址重叠地址重叠时计算结果可能不满足预期。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考