IterateBatch

功能说明

单次Matmul计算处理的shape比较小时,由于每次计算均涉及到内部的通信,可能会影响性能,该接口提供批量处理Matmul的功能,调用一次IterateBatch,可以计算出多个singleCoreM * singleCoreN大小的C矩阵。

在使用该接口前,需要了解一些必备的数据排布格式:

实例化Matmul时,需要通过MatmulType设置输入输出的Layout格式,当前支持4种Layout类型:BSNGD、SBNGD、BNGS1S2、NORMAL(BMNK的数据排布格式使用NORMAL表示)。

对于BSNGD、SBNGD、BNGS1S2 Layout格式,调用该接口之前需要在host Tiling实现中使用SetALayoutSetBLayoutSetCLayoutSetBatchNum设置A/B/C的Layout轴信息和最大BatchNum数;对于NORMAL Layout格式则需使用SetBatchInfoForNormal设置A/B/C的M/N/K轴信息和A/B矩阵的BatchNum数。

单个矩阵乘迭代顺序可通过tiling参数iterateOrder调整。

更多矩阵编程batch场景的相关内容请参考batch场景

函数原型

参数说明

表1 模板参数说明

参数名

描述

sync

获取C矩阵过程分为同步和异步两种模式:

  • 同步:需要同步等待IterateBatch执行结束。
  • 异步:不需要同步等待IterateBatch执行结束。

通过该参数设置同步或者异步模式:同步模式设置为true;异步模式设置为false。默认为同步模式。异步场景需要配合WaitIterateBatch接口使用。

waitIterateBatch

是否需要通过WaitIterateBatch接口等待IterateBatch执行结束,仅在异步场景下使用。默认为false。

true:需要通过WaitIterateBatch接口等待IterateBatch执行结束。

false:不需要通过WaitIterateBatch接口等待IterateBatch执行结束,开发者自行处理等待IterateBatch执行结束的过程。

参数名

输入/输出

描述

gm

输入

C矩阵放置于Global Memory的地址。

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:half/float/bfloat16_t/int32_t

Atlas推理系列产品AI Core,支持的数据类型为:half/float/bfloat16_t/int32_t

ubCmatrix

输入

C矩阵放置于Local Memory的地址。

Atlas A2训练系列产品/Atlas 800I A2推理产品,支持的数据类型为:half/float/bfloat16_t/int32_t

Atlas推理系列产品AI Core,支持的数据类型为:half/float/bfloat16_t/int32_t

batchA

输入

左矩阵的batch数。

batchB

输入

右矩阵的batch数。在batchA/batchB不相同的情况下,默认做broadcast操作。

多batch计算支持在G轴上做输入broadcast和输出reduce,左矩阵、右矩阵G轴维度必须是整数倍的关系。

enSequentialWrite

输入

输出是否连续存放数据。

  • 左右矩阵和输出矩阵的存储位置为Unified Buffer,则enSequentialWrite参数应配置为true;
  • 输出矩阵的存储位置为GM,则enSequentialWrite参数应配置为false。

matrixStrideA

输入

A矩阵源操作数相邻nd矩阵起始地址间的偏移,单位是元素。

matrixStrideB

输入

B矩阵源操作数相邻nd矩阵起始地址间的偏移,单位是元素。

matrixStrideC

输入

C矩阵目的操作数相邻nd矩阵起始地址间的偏移,单位是元素。

enPartialSum

输入

是否将矩阵乘的结果累加于现有的CO1数据,默认值false。在L0C累加时,只支持A矩阵和B矩阵相乘的输出C矩阵规格为singleM==baseM &&singleN==baseN。

enAtomic

输入

是否开启Atomic操作,默认值为0

参数取值:

0:不开启Atomic操作

1:开启AtomicAdd累加操作

2:开启AtomicMax求最大值操作

3:开启AtomicMin求最小值操作

返回值

支持的型号

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas推理系列产品AI Core

约束说明

调用示例