Batch Matmul基础功能

功能介绍

Batch Matmul是指批量处理Matmul计算的场景。该场景对外提供了IterateBatch的调用接口,调用一次IterateBatch,可以计算出多个singleCoreM * singleCoreN大小的C矩阵。

Matmul单次计算的过程需要搬入和搬出数据,当进行多次Matmul计算且单次Matmul计算的输入shape较小时,搬运开销在整体耗时中占比较大。通过IterateBatch接口批量处理Matmul,可以有效提升带宽利用率。

Batch Matmul当前支持4种Layout类型:BSNGDSBNGDBNGS1S2NORMAL(BMNK的数据排布格式),相关数据排布格式请参考IterateBatch

下图为NORMAL数据排布格式的Batch Matmul计算。整个Matmul计算一共包含4个矩阵乘操作:mat_a1*mat_b1、mat_a2*mat_b2、mat_a3*mat_b3、mat_a4*mat_b4,需要单核上计算四个singleCoreM *singleCoreN。在该场景下,如果shape较小,可以将其视为Batch Matmul场景进行批量处理,以提升性能。一次IterateBatch可同时计算出mat_c1 = mat_a1 * mat_b1、mat_c2 = mat_a2 * mat_b2、mat_c3 = mat_a3 * mat_b3、mat_c4 = mat_a4 * mat_b4。

图1 NORMAL数据排布格式的Batch Matmul示意图

使用场景

Matmul计算需要计算出多个singleCoreM * singleCoreN大小的C矩阵,且单次Matmul计算处理的shape较小。

约束说明

调用示例

以下是NORMAL数据排布格式的Batch Matmul调用示例。BSNDG数据排布格式的Batch Matmul完整示例请参考BatchMatmul样例