MatmulConfig
模板参数MatmulConfig,用于配置Matmul模板信息以及相关的配置参数。不配置默认开启Norm模板,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。
- 另外,MatmulConfig可拆分为MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams二级子Config,使用GetMMConfig接口,设置需要的二级子Config和MatmulConfigMode,可以更加灵活的获取自定义的模板参数配置MatmulConfig。
表1 模板特性
| 模板 | 实现 | 优点 | 推荐使用场景 |
|---|---|---|---|
| Norm | 支持L1缓存多个基本块,MTE2分多次从GM搬运基本块到L1,每次搬运一份基本块,已搬的基本块不清空。(举例说明:Tiling结构体中的depthA1=6,代表搬入6份A矩阵基本块到L1,1次搬运一份基本块,MTE2进行6次搬运)。 | 可以提前启动MTE1流水(因为搬1份基本块就可以做MTE1后面的运算)。 | 默认开启Norm模板。 |
| MDL,SpecialMDL | 支持L1缓存多个基本块,MTE2从GM到L1的搬运为一次性“大包”搬运。(举例说明:Tiling结构体中的depthA1=6,代表一次性搬入6份A矩阵基本块到L1,MTE2进行1次搬运)。MDL模板与SpecialMDL模板的差异见表2。 | 对于一般的大shape场景,可以减少MTE2的循环搬运,提升性能。 | 大shape场景。 |
| IBShare | MIX场景下,A矩阵或B矩阵GM地址相同的时候,通过共享L1 Buffer,减少MTE2搬运。 | 减少MTE2搬运,提升性能。 | MIX场景多个AIV的A矩阵或B矩阵GM地址相同。 注意:IBShare模板要求多个AIV复用的A/B矩阵必须在L1 Buffer上全载。 |
| BasicBlock | 在无尾块的场景,基本块大小确定的情况下,通过GetBasicConfig接口配置输入的基本块大小,固定MTE1每次搬运的矩阵大小及每次矩阵乘计算的矩阵大小,减少参数计算量。 | 减少MTE1矩阵搬运和矩阵乘计算过程中的参数计算开销。 | 无尾块,基本块(baseM,baseN)大小确定。 |
| SpecialBasicBlock | 在无尾块的场景,基本块和单核内shape大小确定的情况下,通过配置MatmulConfig参数,在BasicBlock模板的基础上进一步消除头开销Scalar计算。 | 减少MTE1矩阵搬运和矩阵乘计算过程中的参数计算开销,并进一步消除头开销Scalar计算。 | 无尾块,基本块(baseM,baseN)和单核内shape(singleCoreM,singleCoreN)大小确定。 注意:相同场景下,推荐使用常量化来获得更好的性能收益。 |
表2 MatmulConfig参数说明
| 参数 | 说明 | 支持模板:Norm, MDL, SpecialMDL, IBShare, BasicBlock, SpecialBasicBlock |
|---|---|---|
| doNorm | 开启Norm模板。参数取值如下: true:开启Norm模板。false:不开启Norm模板。 不指定模板的情况默认开启Norm模板。 Kirin 9030不支持此参数。 | Norm |
| doBasicBlock | 开启BasicBlock模板。模板参数取值如下: true:开启BasicBlock模板。false:不开启BasicBlock模板。 调用GetBasicConfig接口获取BasicBlock模板时,该参数被置为true。注意: BasicBlock模板暂不支持输入为int8_t, int4_t数据类型的A、B矩阵,支持half/float/bfloat16_t数据类型的A、B矩阵。 BasicBlock模板暂不支持A矩阵为标量数据Scalar或向量数据Vector。 BasicBlock模板暂不支持ScheduleType::OUTER_PRODUCT的数据搬运模式。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持设置为true。 Atlas 200I/500 A2 推理产品不支持设置为true。 Kirin X90支持该参数。 Kirin 9030不支持此参数。 | BasicBlock |
| doMultiDataLoad | 开启MDL模板。参数取值如下: true:开启MDL模板。false:不开启MDL模板。 | MDL |
| basicM | 与TCubeTiling结构体中的baseM参数含义相同,Matmul计算时base块M轴长度,以元素为单位。 | BasicBlock、SpecialBasicBlock |
| basicN | 与TCubeTiling结构体中的baseN参数含义相同,Matmul计算时base块N轴长度,以元素为单位。 | BasicBlock、SpecialBasicBlock |
| basicK | 与TCubeTiling结构体中的baseK参数含义相同,Matmul计算时base块K轴长度,以元素为单位。 | BasicBlock、SpecialBasicBlock |
| intrinsicsCheck | 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下: false:当左矩阵或右矩阵在单核上内轴大于等于65535时,不开启循环执行数据的搬入(默认值)。 true:当左矩阵或右矩阵在单核上内轴大于等于65535时,开启循环执行数据的搬入。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030不支持此参数。 | 所有模板 |
| isNBatch | 是否多Batch输入多Batch输出。仅对BatchMatmul有效,开启多Batch后,仅支持Norm模板,且需调用IterateNBatch实现多Batch输入多Batch输出。参数取值如下: false:不开启多Batch(默认值)。true:开启多Batch。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030不支持此参数。 | Norm |
| enVecND2NZ | 开启通过vector指令进行ND2NZ。开启时需要设置SetLocalWorkspace。参数取值如下: false:不开启通过vector指令进行ND2NZ(默认值)。 true:开启通过vector指令进行ND2NZ。 针对Atlas 推理系列产品AI Core,在Unified Buffer空间足够的条件下(Unified Buffer空间大于2倍TCubeTiling的transLength参数),建议优先开启,搬运性能更好。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin 9030不支持此参数。 | 所有模板 |
| doSpecialBasicBlock | 开启SpecialBasicBlock模板。参数取值如下: true:开启SpecialBasicBlock模板。false:不开启SpecialBasicBlock模板。 本质上也是BasicBlock模板,但消除了头开销Scalar计算。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 | SpecialBasicBlock |
| doMTE2Preload | 在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下: 0:不开启(默认值)。 1:开启M方向preload。 2:开启N方向preload。 注意:开启M/N方向的预加载功能时需保证K全载且M/N方向开启DoubleBuffer;其中,M方向的K全载条件为:singleCoreK/baseK <= stepKa;N方向的K全载条件为:singleCoreK/baseK <= stepKb。 Kirin 9030仅支持默认值。 | MDL |
| singleCoreM | 单核内M轴shape大小,以元素为单位。 | SpecialBasicBlock |
| singleCoreN | 单核内N轴shape大小,以元素为单位。 | SpecialBasicBlock |
| singleCoreK | 单核内K轴shape大小,以元素为单位。 | SpecialBasicBlock |
| stepM | 左矩阵在L1 Buffer(A1)中缓存的bufferM方向上baseM的倍数。 | SpecialBasicBlock |
| stepN | 右矩阵在L1 Buffer(B1)中缓存的bufferN方向上baseN的倍数。 | SpecialBasicBlock |
| baseMN | baseM*baseN的大小。 | SpecialBasicBlock |
| singleCoreMN | singleCoreM*singleCoreN的大小。 | SpecialBasicBlock |
| enUnitFlag | 开启UnitFlag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认开启,MDL下默认不开启。参数取值如下: false:不开启UnitFlag功能。 true:开启UnitFlag功能。 注意:对于Ascend 950PR/Ascend 950DT的MxMatmul场景,仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式,输出到GM场景下,开启UnitFlag功能有性能收益。 Kirin 9030仅支持false。 | MDL、Norm、IBShare |
| isPerTensor | A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否为per tensor。 true:per tensor量化。 false:per channel量化。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030不支持此参数。 | MDL、SpecialMDL |
| hasAntiQuantOffset | A矩阵half类型输入且B矩阵int8_t类型输入场景,开启B矩阵量化时是否使用offset系数。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030不支持此参数。 | MDL、SpecialMDL |
| doIBShareNorm | 开启IBShare模板。参数取值如下: false:不开启IBShare。true:开启IBShare。 IBShare的功能是能够复用L1上相同的A矩阵或B矩阵数据,开启后在数据复用场景能够避免重复搬运数据到L1。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | IBShare |
| doSpecialMDL | 开启SpecialMDL模板。参数取值如下: true:开启SpecialMDL模板。false:不开启SpecialMDL模板。 MDL模板的一种特殊场景:Matmul K方向不全载时(singleCoreK/baseK > stepKb),默认仅支持stepN设置为1,开启SpecialMDL模板后支持stepN=2。 注意:开启SpecialMDL模板时,doMultiDataLoad参数取值必须为false。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030不支持此参数。 | SpecialMDL |
| enableInit | 是否启用Init函数,不启用Init函数能够提升常量传播效果,优化性能。默认启用。 false:不启用Init函数。true:启用Init函数。 Kirin 9030仅支持true。 | 所有模板 |
| batchMode | BatchMatmul场景中Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下: BatchMode::BATCH_LESS_THAN_L1:多batch数据总和<L1 Buffer Size; BatchMode::BATCH_LARGE_THAN_L1:多batch数据总和>L1 Buffer Size; BatchMode::SINGLE_LARGE_THAN_L1:单batch数据总和>L1 Buffer Size。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030不支持此参数。 | Norm |
| enableEnd | Matmul计算过程中是否需要调用End函数,该参数可用于优化性能。参数取值如下: true:Matmul计算过程中需要调用End函数(默认值)。 false:不需要调用End函数。End处理相关的代码都会在编译期删除,从而优化性能。例如,异步场景不需要调用End函数,可以将该参数置为false。 Kirin 9030仅支持true。 | 所有模板 |
| enableGetTensorC | Matmul计算过程中是否需要调用GetTensorC函数,该参数可用于优化性能。参数取值如下: true:Matmul计算过程中需要调用GetTensorC函数(默认值)。 false:不需要调用GetTensorC函数。GetTensorC处理相关的代码都会在编译期删除,从而优化性能。 Kirin 9030仅支持true。 | 所有模板 |
| enableSetOrgShape | Matmul计算过程中是否需要调用SetOrgShape函数,该参数可用于优化性能。参数取值如下: true:Matmul计算过程中需要调用SetOrgShape函数(默认值)。 false:不需要调用SetOrgShape函数。SetOrgShape处理相关的代码都会在编译期删除,从而优化性能。 Kirin 9030仅支持true。 | 所有模板 |
| enableSetBias | 是否开启计算Bias。该参数可用于优化性能。参数取值如下: true:开启计算Bias(默认值)。若输入带有Bias,实现过程中做Bias的搬运、计算等。 false:不计算Bias。Bias处理相关的代码都会在编译期删除,从而优化性能。 Kirin 9030仅支持false。 | 所有模板 |
| enableSetTail | Matmul计算过程中是否需要调用SetTail函数,该参数可用于优化性能。参数取值如下: true:Matmul计算过程中需要调用SetTail函数(默认值)。 false:不需要调用SetTail函数。SetTail处理相关的代码都会在编译期删除,从而优化性能。 Kirin 9030仅支持true。 | 所有模板 |
| enableQuantVector | Matmul计算过程中是否需要调用SetQuantVector和SetQuantScalar函数,该参数可用于优化性能。参数取值如下: true:Matmul计算过程中需要调用SetQuantVector和SetQuantScalar函数(默认值)。 false:不需要调用SetQuantVector和SetQuantScalar函数。SetQuantVector和SetQuantScalar处理相关的代码都会在编译期删除,从而优化性能。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030仅支持true。 | 所有模板 |
| enableSetDefineData | 启用模板参数MatmulCallBack(自定义回调函数)时,用于允许/禁止设置回调函数需要的计算数据或在GM上存储的数据地址等信息。 参数取值如下: true:允许设置(默认值)。 false:不允许设置。SetSelfDefineData处理相关的代码都会在编译期删除,从而优化性能。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持此参数。 Kirin 9030仅支持true。 | Norm、MDL |
| iterateMode | 用于优化Matmul计算的头开销。具体为,对Iterate系列接口(包括Iterate、IterateAll、IterateBatch、IterateNBatch)的优化,当开启某种模式时,表示Matmul计算过程中只调用该种模式对应的一个Iterate系列接口,其它Iterate系列接口相关的代码都会在编译期删除,从而优化性能。该参数为IterateMode类型。参数取值如下: ITERATE_MODE_NORMAL:对于Iterate系列接口,Matmul计算过程中只调用Iterate接口。 ITERATE_MODE_ALL:对于Iterate系列接口,Matmul计算过程中只调用IterateAll接口。 ITERATE_MODE_BATCH:对于Iterate系列接口,Matmul计算过程中只调用IterateBatch接口。 ITERATE_MODE_N_BATCH:对于Iterate系列接口,Matmul计算过程中只调用IterateNBatch接口。 ITERATE_MODE_DEFAULT:默认值,不限定调用Iterate系列接口的个数,不开启计算头开销的优化。 Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90支持该参数。 Kirin 9030仅支持默认值。 | 所有模板 |
| enableReuse | SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr,该参数仅支持默认值true。参数取值如下: true:直接传递计算数据,仅限单个值。 false:传递GM上存储的数据地址信息。 对于Ascend 950PR/Ascend 950DT,MxMatmul场景不支持该参数。 Kirin 9030仅支持默认值。 | Norm、MDL |
| enableUBReuse | 是否开启Unified Buffer复用。在Unified Buffer空间足够的条件下(Unified Buffer空间大于4倍TCubeTiling的transLength参数),设置开启Unified Buffer复用后,Unified Buffer空间分为互不重叠的两份,分别存储Matmul计算相邻前后两轮迭代的数据,后一轮迭代数据的搬入将不必等待前一轮迭代的Unified Buffer空间释放,从而优化流水。参数取值如下: true:开启Unified Buffer复用。 false:不开启Unified Buffer复用。 包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | MDL |
| 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。 包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | MDL |
| intraBlockPartSum | 用于分离模式下的Vector、Cube计算融合场景,开启两个AIV核的一次计算结果(baseM * baseN大小的矩阵分片)在L0C Buffer上累加,参数取值如下: false:不开启两个AIV核的计算结果在L0C Buffer上的累加(默认值)。 true:开启两个AIV核的计算结果在L0C Buffer上的累加。 包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | Norm |
| iterateOrder | Matmul做矩阵运算的循环迭代顺序,与表1中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT时,本参数生效。参数取值如下: ORDER_M:先往M轴方向偏移再往N轴方向偏移。 ORDER_N:先往N轴方向偏移再往M轴方向偏移。 UNDEF:当前无效。 注:Norm模板的Matmul场景、MDL模板使用时,若IterateOrder取值ORDER_M,TCubeTiling结构中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。 MxMatmul仅支持MDL模板。 Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90支持此参数。 Kirin 9030仅支持ORDER_M。 | Norm、MDL |
| scheduleType | 配置Matmul数据搬运模式。参数取值如下: ScheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运; ScheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运;设置该取值后,需要与IterateOrder参数配合使用。该配置当前只在BatchMatmul场景(开启Norm模板)或Matmul场景(开启MDL模板或Norm模板)生效。 若IterateOrder取值ORDER_M,则N方向循环搬运(在singleCoreN大于baseN场景可能有性能提升),即B矩阵的MTE1搬运并行; 若IterateOrder取值ORDER_N,则M方向循环搬运(在singleCoreM大于baseM场景可能有性能提升),即A矩阵的MTE1搬运并行; 不能同时开启M方向和N方向循环搬运; 注: Norm模板的Batch Matmul场景或者MDL模板中,singleCoreK>baseK时,不能设置为ScheduleType::OUTER_PRODUCT取值,需使用默认模式。 Norm模板或MDL模板的Matmul场景,仅支持在纯Cube模式(只有矩阵计算)下配置ScheduleType::OUTER_PRODUCT。 MDL模板仅在调用IterateAll计算的场景支持配置ScheduleType::OUTER_PRODUCT。 仅在C矩阵输出至GM时,支持配置ScheduleType::OUTER_PROD 对于Ascend 950PR/Ascend 950DT的MxMatmul场景仅支持MDL模板。 Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90支持此参数。 Kirin 9030仅支持INNER_PRODUCT 。 | Norm、MDL |
| enableDoubleCache | 开启IBShare模板后,在L1 Buffer上是否同时缓存两块数据。参数取值如下: false:L1 Buffer上同时缓存一块数据(默认值)。 true:开启L1 Buffer上同时缓存两块数据。 注意:该参数取值为true时,需要控制基本块大小,防止两块数据的缓存超过L1 Buffer大小限制。 包括MxMatmul场景,Ascend 950PR/Ascend 950DT不支持此参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | IBShare |
| isBiasBatch | 批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下: true:Bias带有Batch轴,Bias大小为Batch * N(默认值)。 false:Bias不带Batch轴,Bias大小为N,多Batch计算Matmul时,会复用Bias。 注意:BatchMode::SINGLE_LARGE_THAN_L1场景仅支持设置为true。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持设置为false。 Atlas 200I/500 A2 推理产品不支持设置为false。 Kirin X90支持此参数。 Kirin 9030不支持此参数。 | Norm |
| enableStaticPadZeros | 使用常量化的Tiling参数时,在左矩阵和右矩阵搬运到L1 Buffer的过程中,是否自动按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小补零。关于常量化Tiling参数的详细内容请参考GetMatmulApiTiling。 仅支持GM输入的ND2NZ格式的补零,其他场景需要用户自行补零。参数取值如下: false:搬运时不自动补零,需要用户自行补零(默认值)。 true:搬运时按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小自动补零。 Kirin 9030仅支持false。 | Norm、MDL、IBShare |
| isPartialOutput | 是否开启PartialOutput功能,即控制Matmul顺序输出K方向的基本块计算方式:Matmul一次Iterate计算的K轴是否进行累加计算。参数取值如下: true:开启PartialOutput功能,一次Iterate的K轴不进行累加计算,Matmul每次计算输出局部baseK的baseM * baseN大小的矩阵分片。 false:不开启PartialOutput功能,一次Iterate的K轴进行累加计算,Matmul每次计算输出SingleCoreK长度的baseM * baseN大小的矩阵分片。 Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90支持此参数。 Kirin 9030不支持此参数。 | MDL |
| enableMixDualMaster | 是否开启MixDualMaster(双主模式)。区别于MIX模式(包含矩阵计算和矢量计算)通过消息机制驱动AIC运行,双主模式为AIC和AIV独立运行代码,不依赖消息驱动,用于提升性能。该参数默认值为false,仅能在以下场景设置为true: 核函数的类型为MIX,同时AIC核数 : AIV核数为1:1。 核函数的类型为MIX,同时AIC核数 : AIV核数为1:2,且A矩阵和B矩阵同时开启IBSHARE参数。 注意,开启MixDualMaster场景,需要满足: 同一算子中所有Matmul对象的该参数取值必须保持一致。 A/B/Bias矩阵只支持从GM搬入。 获取矩阵计算结果只支持调用IterateAll接口输出到GlobalTensor或者LocalTensor,即计算结果放置于Global Memory或者Local Memory的地址,不能调用GetTensorC等接口获取结果。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | Norm |
| isA2B2Shared | 是否开启A2和B2的全局管理,即控制所有Matmul对象是否共用A2和B2的double buffer机制。该配置为全局配置,所有Matmul对象取值必须保持一致。注意,开启时,A矩阵、B矩阵的基本块大小均不能超过32KB。 参数取值如下: true:开启。false:关闭(默认值)。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Kirin X90支持此参数。 Kirin 9030不支持此参数。 该参数取值为true时,建议同时设置enUnitFlag参数为true,使搬运与计算流水并行,提高性能。 | Norm、MDL |
| isEnableChannelSplit | 是否开启channel_split功能。正常情况下,Matmul计算出的CubeFormat::NZ格式的C矩阵分形为16*16,假设此时的分形个数为x,channel_split功能是使获得的C矩阵分形为16*8,同时分形个数变为2x。注意,当前仅在Matmul计算结果C矩阵的Format为CubeFormat::NZ,TYPE为float类型,矩阵乘结果L0C Buffer(CO1)为float类型,输出到Global Memory的场景,支持开启该参数。参数取值如下: false:默认值,不开启channel_split功能,输出的分形为16*16。 true:开启channel_split功能,输出的分形为16*8。 Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | 所有模板 |
| enableKdimReorderLoad | 是否开启K轴错峰加载数据。基于相同Tiling参数,执行Matmul计算时,如果多核的左矩阵或者右矩阵相同,且存储于Global Memory,多个核一般会同时访问相同地址以加载矩阵数据,引发同地址访问冲突,影响性能。开启K轴错峰加载数据后,多核执行Matmul时,将尽量在相同时间访问矩阵的不同Global Memory地址,减少地址访问冲突概率,提升性能。该参数功能只支持MDL模板,建议K轴较大且左矩阵和右矩阵均非全载场景开启该功能。参数取值如下。 false:默认值,关闭K轴错峰加载数据的功能。 true:开启K轴错峰加载数据的功能。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90支持此参数。 Kirin 9030不支持此参数。 | MDL |
| isCO1Shared | 是否开启L0C Buffer(CO1)内存共享,由该参数与sharedCO1BufferSize参数指定L0C Buffer(CO1)划分块数,缓存到L0C Buffer(CO1)中的数据块数不能超过L0C Buffer(CO1)划分的块数,即未被GetTensorC获取的Iterate计算生成的结果个数不能超过L0C Buffer(CO1)划分的块数。该配置为全局配置,所有Matmul对象取值必须保持一致。参数取值如下: true:开启L0C Buffer(CO1)内存共享。 false:默认值,关闭L0C Buffer(CO1)内存共享。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | Norm、IBShare |
| sharedCO1BufferSize | 指定L0C Buffer(CO1)共享的一份Buffer大小。uint32_t类型,支持的取值为32*1024、64*1024、128*1024。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | Norm、IBShare |
| bmmOutMode | 预留参数,默认值为BatchOutMode::SINGLE_BATCH。 | 预留参数 |
| enableL1BankConflictOptimise | 是否开启L1上的Bank冲突优化。在Tiling侧调用EnableL1BankConflictOptimise接口获取能否开启该优化的结果,并与TilingKey机制配合使用,在Kernel侧增加代码实现分支。若开启该优化,基于相同Tiling参数执行Matmul计算时,对A、B矩阵和MxMatmul场景的ScaleA、ScaleB矩阵不再连续分配L1 Buffer的空间,在DoubleBuffer场景下,并行计算的数据分别被分配在L1 Buffer的上半部空间和下半部空间,非DoubleBuf场景,数据被分配在L1 Buffer的上半部空间;另外,Bias被分配在L1 Buffer的上半部空间,向量的量化/反量化场景的量化系数被分配在L1 Buffer的下半部空间。参数取值如下。 false:默认值,关闭L1 Bank冲突优化。true:开启L1 Bank冲突优化。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | MDL |
| enableRelu | 是否开启对矩阵乘的输出矩阵C做Relu修正。开启该功能后,输出矩阵中负数值被修正为0。参数取值如下。 false:默认值,关闭对输出矩阵C的Relu修正功能。true:开启对输出矩阵C的Relu修正功能。 除MxMatmul场景外,Ascend 950PR/Ascend 950DT支持该参数。 Atlas A3 训练系列产品/Atlas A3 推理系列产品不支持该参数。 Atlas A2 训练系列产品/Atlas A2 推理系列产品不支持该参数。 Atlas 推理系列产品AI Core不支持该参数。 Atlas 200I/500 A2 推理产品不支持该参数。 Kirin X90不支持此参数。 Kirin 9030不支持此参数。 | 所有模板 |