MatmulConfig
模板参数MatmulConfig,用于配置Matmul模板信息以及相关的配置参数。不配置默认使能Norm模板。MatmulConfig的参数说明见表2。MatmulConfig的定义方式有:
- 该模板参数可选取提供的模板默认值之一,当前提供的MatmulConfig模板取值范围为【CFG_NORM、CFG_MDL、CFG_IBSHARE_NORM、MM_CFG_BB】,分别对应默认的Norm、MDL、IBShare、BasicBlock模板。各模板的介绍请参考表1。
- 该模板参数可以通过各类获取模板的接口,自定义模板参数配置,获取自定义模板。各类获取模板的接口包括:GetNormalConfig、GetMDLConfig、GetSpecialMDLConfig、GetIBShareNormConfig、GetBasicConfig、GetSpecialBasicConfig。
- 另外,MatmulConfig可拆分为MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams二级子Config,使用GetMMConfig接口,设置需要的二级子Config和MatmulConfigMode,可以更加灵活的获取自定义的模板参数配置MatmulConfig。
模板 |
实现 |
优点 |
推荐使用场景 |
---|---|---|---|
Norm |
支持L1缓存多个基本块,MTE2分多次从GM搬运基本块到L1,每次搬运一份基本块,已搬的基本块不清空。(举例说明:depthA1=6,代表搬入6份A矩阵基本块到L1,1次搬运一份基本块,MTE2进行6次搬运) |
可以提前启动MTE1流水(因为搬1份基本块就可以做MTE1后面的运算) |
默认使能Norm模板 |
MDL,SpecialMDL |
支持L1缓存多个基本块,MTE2从GM到L1的搬运为一次性"大包"搬运。(举例说明:depthA1=6,代表一次性搬入6份A矩阵基本块到L1,MTE2进行1次搬运) |
对于一般的大shape场景,可以减少MTE2的循环搬运,提升性能 |
大shape场景 |
IBShare |
MIX场景下,多个AIV的A矩阵或B矩阵GM地址相同的时候,通过共享L1 Buffer,减少MTE2搬运 |
减少MTE2搬运,提升性能 |
MIX场景多个AIV的A矩阵或B矩阵GM地址相同 注意:IBShare模板要求复用的A/B矩阵能在L1 Buffer上全载 |
BasicBlock |
在无尾块的场景,base块大小确定的情况下,通过GetBasicConfig接口配置输入的基本块大小,固定MTE1每次搬运的矩阵大小及MMAD每次计算的矩阵大小,减少参数计算量 |
减少MTE1矩阵搬运和MMAD矩阵计算过程中的参数计算开销 |
无尾块,base块(baseM,baseN)大小确定 |
参数 |
说明 |
支持模板:Norm, MDL, SpecialMDL, IBShare, BasicBlock |
||
---|---|---|---|---|
doNorm |
使能Norm模板。参数取值如下:
不指定模板的情况默认使能Norm模板。 |
Norm |
||
doBasicBlock |
是否使能BasicBlock模板。模板参数取值如下:
调用GetBasicConfig接口获取BasicBlock模板时,该参数被置为true。注意:
Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持设置为true。 Atlas 200/500 A2推理产品不支持设置为true。 |
BasicBlock |
||
doMultiDataLoad |
使能MDL模板。参数取值如下:
|
MDL |
||
doSpecialMDL |
使能SpecialMDL模板。参数取值如下:
本质上也是MDL模板。MDL模板Matmul K方向不全载时(singleCoreK/baseK > stepKb),仅支持stepN设置为1,开启后支持stepN=2。 |
SpecialMDL |
||
doIBShareNorm |
使能IBShare模板。参数取值如下:
IBShare的功能是能够复用L1上相同的A矩阵或B矩阵数据,开启后在数据复用场景能够避免重复搬运数据到L1。 |
IBShare |
||
intrinsicsCheck |
当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535时,是否使能循环执行数据的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:
|
所有模板 |
||
isNBatch |
是否多Batch输入多Batch输出。仅对BatchMatmul有效。参数取值如下:
|
所有模板 |
||
enVecND2NZ |
使能通过vector进行ND2NZ。使能时需要设置SetLocalWorkspace。参数取值如下:
针对Atlas推理系列产品AI Core,在UB空间足够的条件下(UB空间大于2*TCubeTiling的transLength参数),建议优先使能该参数,搬运性能更好。 |
所有模板 |
||
enableInit |
是否启用Init函数,不使能Init函数能够提升常量传播效果,优化性能。默认使能。 |
所有模板 |
||
batchMode |
Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:
|
Norm, IBShare |
||
enUnitFlag |
使能unitflag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认使能,MDL下默认不使能。参数取值如下:
|
MDL, Norm, IBShare |
||
isPerTensor |
A矩阵half类型输入且B矩阵int8类型输入场景,使能B矩阵量化时是否为per tensor,true为per tensor,false为per channel。 |
MDL, SpecialMDL |
||
hasAntiQuantOffset |
A矩阵half类型输入且B矩阵int8类型输入场景,使能B矩阵量化时是否使用offset系数。 |
MDL, SpecialMDL |
||
doMTE2Preload |
在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效。参数取值如下:
注意,开启M/N预加载功能时需保证K全载,且M/N开启Double Buffer。 |
MDL, SpecialMDL |
||
enableReuse |
SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。参数取值如下:
|
Norm, MDL |
||
enableUBReuse |
是否使能Unified Buffer复用。参数取值如下:
Atlas A2训练系列产品/Atlas 800I A2推理产品不支持该参数。 Atlas推理系列产品AI Core支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
MDL |
||
enableL1CacheUB |
是否使能L1 Buffer缓存Unified Buffer计算块。参数取值如下:
若要使能L1 Buffer缓存Unified Buffer计算块,必须在tiling实现中调用SetMatmulConfigParams接口配置相关信息。 Atlas A2训练系列产品/Atlas 800I A2推理产品不支持该参数。 Atlas推理系列产品AI Core支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
MDL |
||
enableDoubleCache |
开启IBShare模板后,在L1 Buffer上是否同时缓存两块数据。注意,需要控制base块大小,防止两块缓存超过L1 Buffer大小限制。参数取值如下:
|
IBShare |
||
IterateOrder |
Matmul做矩阵运算的循环迭代顺序,与表1中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT或1时,本参数生效。参数取值如下:
注:MDL模板使用时,若IterateOrder取值ORDER_M,TCubeTiling结构中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。 Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
Norm、MDL |
||
ScheduleType |
配置Matmul数据搬运模式。参数取值如下:
注:
Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
Norm、MDL |
||
enableStaticPadZeros |
使用常量化的Tiling参数时,在左矩阵和右矩阵搬运到L1 Buffer的过程中,是否自动按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小补零。关于常量化Tiling参数的详细内容请参考GetMatmulApiTiling。 仅支持GM输入的ND2NZ格式的补零,其他场景需要用户自行补零。参数取值如下:
|
Norm |
||
isBiasBatch |
批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下: |
Norm |
||
basicM |
相当于baseM,Matmul计算时base块M轴长度,以元素为单位 |
BasicBlock |
||
basicN |
相当于baseN,Matmul计算时base块N轴长度,以元素为单位 |
BasicBlock |
||
basicK |
相当于baseK,Matmul计算时base块K轴长度,以元素为单位 |
BasicBlock |
||
enableSetBias |
是否使能计算Bias。该参数可用于优化性能。参数取值如下:
|
MDL |
||
enableEnd |
Matmul计算过程中是否需要调用End函数,该参数可用于优化性能。参数取值如下:
|
所有模板 |
||
enableGetTensorC |
Matmul计算过程中是否需要调用GetTensorC函数,该参数可用于优化性能。参数取值如下:
|
所有模板 |
||
enableSetOrgShape |
Matmul计算过程中是否需要调用SetOrgShape函数,该参数可用于优化性能。参数取值如下:
|
所有模板 |
||
enableSetTail |
Matmul计算过程中是否需要调用SetTail函数,该参数可用于优化性能。参数取值如下:
|
所有模板 |
||
enableQuantVector |
Matmul计算过程中是否需要调用SetQuantVector和SetQuantScalar函数,该参数可用于优化性能。参数取值如下:
|
所有模板 |
||
enableSetDefineData |
使能模板参数MatmulCallBack(自定义回调函数)时,用于允许/禁止设置回调函数需要的计算数据或在GM上存储的数据地址等信息。 参数取值如下:
|
MDL |
||
iterateMode |
在分离架构上,用于优化Matmul计算的头开销。具体为,对Iterate系列接口(包括Iterate、IterateAll、IterateBatch、IterateNBatch)的优化,当使能某种模式时,表示Matmul计算过程中只调用该种模式对应的一个Iterate系列接口,其它Iterate系列接口相关的代码都会在编译期删除,从而优化性能。该参数为IterateMode类型。参数取值如下:
Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
所有模板 |
||
intraBlockPartSum |
用于分离架构上的Vector、Cube计算融合场景,使能两个AIV核的一次计算结果(baseM * baseN大小的矩阵分片)在L0C Buffer上累加,参数取值如下:
Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
Norm |
||
doSpecialBasicBlock |
使能SpecialBasicBlock模板。参数取值如下:
本质上也是BasicBlock模板,但消除了头开销scalar计算。 |
预留参数 |
||
singleCoreM |
单核内M轴shape大小,以元素为单位。 |
预留参数 |
||
singleCoreN |
单核内N轴shape大小,以元素为单位。 |
预留参数 |
||
singleCoreK |
单核内K轴shape大小,以元素为单位。 |
预留参数 |
||
stepM |
左矩阵在A1中缓存的bufferM方向上baseM的倍数。 |
预留参数 |
||
stepN |
右矩阵在B1中缓存的bufferN方向上baseN的倍数。 |
预留参数 |
||
baseMN |
baseM*baseN的大小。 |
预留参数 |
||
singleCoreMN |
singleCoreM*singleCoreN的大小。 |
预留参数 |