算子分析
在开发算子代码之前需要分析算子的数学表达式、输入、输出以及计算逻辑的实现,明确需要调用的Ascend C接口。
- 明确算子的数学表达式及计算逻辑。
Add算子的数学表达式为:
z = x + y
计算逻辑是:Ascend C提供的矢量计算接口的操作元素都为LocalTensor,输入数据需要先搬运进片上存储,然后使用计算接口完成两个输入参数相加,得到最终结果,再搬出到外部存储上。Ascend C Add算子的计算逻辑如下图所示。
图1 算子计算逻辑 - 明确输入和输出。
- Add算子有两个输入:x与y,输出为z。
- 本样例中算子的输入支持的数据类型为half(float16),算子输出的数据类型与输入数据类型相同。
- 算子输入支持shape(8,2048),输出shape与输入shape相同。
- 算子输入支持的format为:ND。
- 确定核函数名称和参数。
- 您可以自定义核函数名称,本样例中核函数命名为add_custom。
- 根据对算子输入输出的分析,确定核函数有3个参数x,y,z;x,y为输入在Global Memory上的内存地址,z为输出在Global Memory上的内存地址。
- 确定算子实现所需接口。
通过以上分析,得到Ascend C Add算子的设计规格如下:
算子类型(OpType) |
Add |
|||
---|---|---|---|---|
算子输入输出 |
name |
shape |
data type |
format |
x(输入) |
(8, 2048) |
half |
ND |
|
y(输入) |
(8, 2048) |
half |
ND |
|
z(输出) |
(8, 2048) |
half |
ND |
|
核函数名称 |
add_custom |
|||
使用的主要接口 |
DataCopy:数据搬移接口 |
|||
Add:矢量双目指令接口 |
||||
EnQue、DeQue等接口:Queue队列管理接口 |
||||
算子实现文件名称 |
add_custom.cpp |
父主题: 矢量编程