通用说明和约束
需要包含的头文件

Ascend C API所在头文件目录为:
- 基础API:${INSTALL_DIR}/include/ascendc/basic_api/interface
- 高阶API:(注意,如下目录头文件中包含的接口如果未在资料中声明,属于间接调用接口,开发者无需关注)
- ${INSTALL_DIR}/include/ascendc/highlevel_api/lib
- ${INSTALL_DIR}/include/tiling
${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Ascend-cann-toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/ascend-toolkit/latest。
为方便开发者使用,Ascend C基础API和高阶API均支持通过包含kernel_operator.h文件来调用相应接口。如无特殊说明,包含该头文件即可满足接口调用需求。若API文档中有特殊说明,则应遵循API的具体说明。
1 | #include "kernel_operator.h" |
逻辑位置和物理存储的映射关系
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 |
|
C2 |
|
CO1 |
L0C Buffer |
CO2 |
|
TSCM |
L1 Buffer |
SPM |
|
C2PIPE2GM |
通用地址对齐约束
通用地址重叠约束
使用基础API的Tensor高维切分计算接口时,为了节省地址空间,开发者可以定义一个Tensor,供源操作数与目的操作数同时使用(即地址重叠)。使用时需要注意以下约束:
- 单次迭代内:源操作数与目的操作数必须100%完全重叠,不支持部分重叠。
- 多次迭代间:不支持前序迭代的目的操作数与后序迭代的源操作数重叠。例如,第N次迭代的目的操作数是第N+1次的源操作数(如下图所示)。在这种情况下,第N次迭代可能会改写覆盖源操作数的数值,导致无法得到预期结果。特别地,对于部分双目计算类的API(Add、Sub、Mul、Max、Min、AddRelu、SubRelu),当数据类型为half、int32_t、float时,支持前序迭代的目的操作数与后序迭代的源操作数重叠:仅针对目的操作数和第二个源操作数重叠的情况,且src1RepStride或者dstRepStride必须为0。


本节所述地址重叠通用约束适用于一般情况,API参考中如有额外特殊说明的,则以具体API中的说明为准。
API中没有描述地址重叠约束的,视为不支持Tensor高维切分计算的地址重叠,地址重叠时计算结果可能不满足预期。