在开发算子代码之前需要分析算子的数学表达式、输入、输出以及计算逻辑的实现,明确需要调用的Ascend C接口。
c = a * b
注意需要处理的数据过大时,需要对数据进行切分并分块搬运到A2、B2,分别计算后再进行汇聚。下文的计算逻辑为了展示Split和Aggregate阶段的样例,请您根据实际需要处理的数据大小决定是否需要切分和汇聚。
由于硬件架构对矩阵乘计算的输入输出有格式约束,需要在算子实现中增加格式转换的流程。
通过以上分析,得到Ascend C Matmul算子的计算流程图和设计规格如下:
算子类型(OpType) |
Matmul |
|||
---|---|---|---|---|
算子输入 |
name |
shape |
data type |
format |
a |
(m, k) = (32, 32) |
half |
ND |
|
b |
(k, n) = (32, 32) |
half |
ND |
|
算子输出 |
c |
(m, n) = (32, 32) |
float32 |
ND |
核函数名称 |
matmul_custom |
|||
使用的主要接口 |
DataCopy:数据搬移接口 |
|||
LoadData:矩阵数据格式转换接口 |
||||
Mmad:矩阵乘计算接口 |
||||
EnQue、DeQue等接口:Queue队列管理接口 |
||||
算子实现文件名称 |
matmul_custom.cpp |