下载
EN
注册

GetMDLConfig

功能说明

用于配置MDL模板的参数,获取自定义MDL模板。MDL模板的介绍请参考表 模板特性

函数原型

1
__aicore__ constexpr MatmulConfig GetMDLConfig(const bool intrinsicsLimit = false, const bool batchLoop = false, const uint32_t doMTE2Preload = 0, const bool isVecND2NZ = false, bool isPerTensor = false, bool hasAntiQuantOffset = false, const bool enUnitFlag = false, const bool isMsgReuse = true, const bool enableUBReuse = true, const bool enableL1CacheUB = false)

参数说明

本接口的所有参数用于设置MatmulConfig结构体中的参数,其中互相对应的参数的功能作用相同。

表1 接口参数说明

参数名

输入/输出

描述

intrinsicsLimit

输入

用于设置参数intrinsicsCheck。

当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否使能循环执行数据从Global MemoryL1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:

  • false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不使能循环执行数据的搬入(默认值)。
  • true:当左矩阵或右矩阵在单核上内轴大于等于65535时,使能数循环执行数据的搬入。

batchLoop

输入

用于设置参数isNBatch。

是否多Batch输入多Batch输出。仅对BatchMatmul有效。参数取值如下:

  • false:不使能多Batch(默认值)。
  • true:使能多Batch。

doMTE2Preload

输入

用于设置参数doMTE2Preload。

在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下:

  • 0:不开启(默认值)。
  • 1:开启M方向preload。
  • 2:开启N方向preload。

注意:开启M/N方向的预加载功能时需保证K全载且M/N方向开启Double Buffer;其中,M方向的K全载条件为:singleCoreK/baseK <= stepKa;N方向的K全载条件为:singleCoreK/baseK <= stepKb。

isVecND2NZ

输入

用于设置参数enVecND2NZ。

使能通过vector指令进行ND2NZ。使能时需要设置SetLocalWorkspace。参数取值如下:

  • false:不使能通过vector指令进行ND2NZ(默认值)。
  • true:使能通过vector指令进行ND2NZ。

针对Atlas 推理系列产品AI Core,在Unified Buffer空间足够的条件下(Unified Buffer空间大于2倍TCubeTiling的transLength参数),建议优先使能该参数,搬运性能更好。

isPerTensor

输入

用于设置参数isPerTensor。

A矩阵half类型输入且B矩阵int8_t类型输入场景,使能B矩阵量化时是否为per tensor,true为per tensor,false为per channel。

hasAntiQuantOffset

输入

用于设置参数hasAntiQuantOffset。

A矩阵half类型输入且B矩阵int8_t类型输入场景,使能B矩阵量化时是否使用offset系数。

enUnitFlag

输入

用于设置参数enUnitFlag。

使能unitflag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认使能,MDL下默认不使能。参数取值如下:

  • false:不使能unitflag功能
  • true:使能unitflag功能

isMsgReuse

输入

用于设置参数enableReuse。

SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。参数取值如下:

  • true:直接传递计算数据,仅限单个值
  • false:传递GM上存储的数据地址信息

enableUBReuse

输入

用于设置参数enableUBReuse。

是否使能Unified Buffer复用。在Unified Buffer空间足够的条件下(Unified Buffer空间大于4倍TCubeTiling的transLength参数),使能该参数后,Unified Buffer空间分为互不重叠的两份,分别存储Matmul计算相邻前后两轮迭代的数据,后一轮迭代数据的搬入将不必等待前一轮迭代的Unified Buffer空间释放,从而优化流水。参数取值如下:

  • true:使能Unified Buffer复用。
  • false:不使能Unified Buffer复用。

Atlas A2 训练系列产品/Atlas 800I A2 推理产品不支持该参数。

Atlas 推理系列产品AI Core支持该参数。

Atlas 200I/500 A2 推理产品不支持该参数。

enableL1CacheUB

输入

用于设置参数enableL1CacheUB 。

是否使能L1 Buffer缓存Unified Buffer计算块。建议在MTE3和MTE2流水串行较多的场景使用。参数取值如下:

  • true:使能L1 Buffer缓存Unified Buffer计算块。
  • false:不使能L1 Buffer缓存Unified Buffer计算块。

若要使能L1 Buffer缓存Unified Buffer计算块,必须在Tiling实现中调用SetMatmulConfigParams接口将参数enableL1CacheUBIn设置为true。

Atlas A2 训练系列产品/Atlas 800I A2 推理产品不支持该参数。

Atlas 推理系列产品AI Core支持该参数。

Atlas 200I/500 A2 推理产品不支持该参数。

支持的型号

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

Atlas 推理系列产品AI Core

注意事项

调用示例

1
2
3
4
5
6
7
constexpr MatmulConfig MM_CFG = GetMDLConfig();
Matmul<A_TYPE, B_TYPE, C_TYPE, BIAS_TYPE, MM_CFG> mm;
REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm, &tiling);
mm.SetTensorA(gm_a);
mm.SetTensorB(gm_b);
mm.SetBias(gm_bias);
mm.IterateAll(gm_c);