TSCM输入的矩阵乘

功能介绍

TSCM表示L1 Buffer空间对应的逻辑内存,L1 Buffer相关内容见存储单元,开发者可以自行管理TSCM以高效利用硬件资源。比如,开发者可缓存一份TSCM数据,在不同使用场景中灵活配置为Matmul操作的A矩阵、B矩阵或Bias偏置矩阵,实现内存复用与计算效率优化。在TSCM输入场景,用户管理整块TSCM内存空间,Matmul直接使用传入的TSCM内存地址,不进行Global Memory到TSCM的数据搬入。

使用场景

用户需要自定义数据搬入到TSCM及自定义管理的场景,即需要自定义实现数据搬入功能,如非连续搬入或对搬入数据进行预处理等。用户通过自定义管理TSCM可灵活配置MTE2流水,实现跨Matmul对象的全局DoubleBuffer,MTE2相关内容见基本架构

约束说明

设置为TSCM输入的矩阵必须在TSCM中全载,全载即全部的矩阵数据同时搬入及保持在TSCM中。

调用示例

完整的算子样例请参考自定义TSCM输入的算子样例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
TQue<TPosition::A1, 1> scm; // 队列逻辑位置A1,队列深度为1
pipe->InitBuffer(scm, 1, tiling.M * tiling.Ka * sizeof(A_T)); 
// A_TYPE的TPosition为TSCM, B_TYPE的TPosition为GM
Matmul<A_TYPE, B_TYPE, C_TYPE, BIAS_TYPE> mm1;
REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm1);
mm1.Init(&tiling);
// 自定义A矩阵GM到TSCM的搬运
auto scmTensor = scm.AllocTensor<A_T>();
DataCopy(scmTensor, gm_a, tiling.M * tiling.Ka);
scm.EnQue(scmTensor);
LocalTensor<A_T> scmLocal = scm.DeQue<A_T>();
// A矩阵设置为TSCM输入,B矩阵为GM输入
mm1.SetTensorA(scmLocal);
mm1.SetTensorB(gm_b);
mm1.SetBias(gm_bias);
mm1.IterateAll(gm_c);
scm.FreeTensor(scmLocal);