每调用一次Iterate,会计算出一块baseM * baseN的C矩阵。接口内部会维护迭代进度,调用一次后会对A、B矩阵首地址进行偏移。默认以先M轴再N轴的迭代顺序,也可以通过调整tiling参数iterateOrder,转换为先N轴再M轴的迭代顺序。当传入数据未对齐,存在尾块时,会在最后一次迭代输出尾块的计算结果。
一次Iterate矩阵乘的结果C矩阵存放在逻辑位置CO1的内存中,对于CO1内存中计算结果的获取,当前支持如下两种方式:
参数名 |
描述 |
---|---|
sync |
迭代获取C矩阵分片的过程分为同步和异步两种模式。通过该参数设置同步或者异步模式:同步模式设置为true;异步模式设置为false。默认为同步模式。具体模式的介绍和使用方法请参考GetTensorC。 |
参数名 |
输入/输出 |
描述 |
---|---|---|
enPartialSum |
输入 |
是否将矩阵乘的结果累加于现有的CO1数据,默认值false。在L0C累加时,只支持C矩阵规格为singleCoreM==baseM && singleCoreN==baseN。 针对 |
参数名 |
输入/输出 |
描述 |
---|---|---|
enPartialSum |
输入 |
是否将矩阵乘的结果累加于现有的CO1数据。在L0C累加时,只支持C矩阵规格为singleCoreM==baseM && singleCoreN==baseN。 |
localCmatrix |
输入 |
由用户申请的CO1上的LocalTensor内存,用于存放矩阵乘的计算结果。 |
false:单核上的所有数据全部算完。
true:数据仍在迭代计算中。
同步模式及异步模式的简单调用示例如下,更多完整算子样例请参考异步场景样例、异步场景Matmul矩阵乘法。
1 2 3 4 5 6 7 8 9 10 11 |
// 同步模式样例 while (mm.Iterate()) { mm.GetTensorC(ubCmatrix); } // 异步模式样例 mm.template Iterate<false>(); // …… ……其它计算 for (int i = 0; i < singleM/baseM*singleN/baseN; ++i) { mm.GetTensorC<false>(ubCmatrix); } |