---
title: MatmulConfig
description: "模板参数MatmulConfig，用于配置Matmul模板信息以及相关的配置参数。不配置默认使能Norm模板，Norm模板的介绍请参考表 模板特性。MatmulConfig的参数说明见表2。MatmulConfig的定义方式有："
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendcopapi/atlasascendc_api_07_0616.html
sourcePath: /source/zh/canncommercial/900/API/ascendcopapi/atlasascendc_api_07_0616.html
indexId: 7c75684e7550a1eac56198ad30fe71d8cad7ba2f9d4693a50a3f951c86a2d1e276
---
# 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 | 在无尾块(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/Ascendcopdevg/atlas\_ascendc\_10\_10014.html)的场景，基本块大小确定的情况下，通过GetBasicConfig接口配置输入的基本块大小，固定MTE1每次搬运的矩阵大小及每次矩阵乘计算的矩阵大小，减少参数计算量。 | 减少MTE1矩阵搬运和矩阵乘计算过程中的参数计算开销。 | 无尾块，基本块（baseM,baseN）大小确定。 |
| SpecialBasicBlock | 在无尾块(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/Ascendcopdevg/atlas\_ascendc\_10\_10014.html)的场景，基本块和单核内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模板。 | 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场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持设置为true。 Atlas 200I/500 A2 推理产品 不支持设置为true。 | 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时，使能循环执行数据的搬入。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | 所有模板 |
| isNBatch | 是否多Batch输入多Batch输出。仅对BatchMatmul有效，使能该参数后，仅支持Norm模板，且需调用IterateNBatch实现多Batch输入多Batch输出。参数取值如下： false：不使能多Batch（默认值）。 true：使能多Batch。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | Norm |
| enVecND2NZ | 使能通过vector指令进行ND2NZ。使能时需要设置SetLocalWorkspace。参数取值如下： false：不使能通过vector指令进行ND2NZ（默认值）。 true：使能通过vector指令进行ND2NZ。 针对 Atlas 推理系列产品 AI Core，在Unified Buffer空间足够的条件下（Unified Buffer空间大于2倍TCubeTiling的transLength参数），建议优先使能该参数，搬运性能更好。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 所有模板 |
| doSpecialBasicBlock | 使能SpecialBasicBlock模板。参数取值如下： true：使能SpecialBasicBlock模板。 false：不使能SpecialBasicBlock模板。 本质上也是BasicBlock模板，但消除了头开销Scalar计算。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | SpecialBasicBlock |
| doMTE2Preload | 在MTE2流水间隙较大，且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能，开启后能减小MTE2间隙，提升性能。预加载功能仅在MDL模板有效（不支持SpecialMDL模板）。参数取值如下： 0：不开启（默认值）。 1：开启M方向preload。 2：开启N方向preload。 注意：开启M/N方向的预加载功能时需保证K全载且M/N方向开启DoubleBuffer(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/Ascendcopdevg/atlas\_ascendc\_10\_0090.html)；其中，M方向的K全载条件为：singleCoreK/baseK <= stepKa；N方向的K全载条件为：singleCoreK/baseK <= stepKb。 该参数的使用样例请参考M方向预加载Matmul算子样例(https://gitcode.com/cann/asc\-devkit/tree/9.0.0/examples/01\_simd\_cpp\_api/03\_libraries/00\_matrix/matmul\_preload)。 | MDL |
| singleCoreM | 单核内M轴shape大小，以元素为单位。 | SpecialBasicBlock |
| singleCoreN | 单核内N轴shape大小，以元素为单位。 | SpecialBasicBlock |
| singleCoreK | 单核内K轴shape大小，以元素为单位。 | SpecialBasicBlock |
| stepM | 左矩阵在A1中缓存的bufferM方向上baseM的倍数。 | SpecialBasicBlock |
| stepN | 右矩阵在B1中缓存的bufferN方向上baseN的倍数。 | SpecialBasicBlock |
| baseMN | baseM\*baseN的大小。 | SpecialBasicBlock |
| singleCoreMN | singleCoreM\*singleCoreN的大小。 | SpecialBasicBlock |
| enUnitFlag | 使能UnitFlag功能，使计算与搬运流水并行，提高性能。Norm, IBShare下默认使能，MDL下默认不使能。参数取值如下： false：不使能UnitFlag功能。 true：使能UnitFlag功能。 注意：对于Atlas 350 加速卡，MxMatmul场景，仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式，输出到GM场景下，使能UnitFlag功能有性能收益。 该参数的使用样例请参考matmul\_unitflag算子样例(https://gitcode.com/cann/asc\-devkit/tree/9.0.0/examples/01\_simd\_cpp\_api/03\_libraries/00\_matrix/matmul\_unitflag)。 | MDL、Norm、IBShare |
| isPerTensor | A矩阵half类型输入且B矩阵int8\_t类型输入场景，使能B矩阵量化时是否为per tensor。 true：per tensor量化。 false：per channel量化。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | MDL、SpecialMDL |
| hasAntiQuantOffset | A矩阵half类型输入且B矩阵int8\_t类型输入场景，使能B矩阵量化时是否使用offset系数。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | MDL、SpecialMDL |
| doIBShareNorm | 使能IBShare模板。参数取值如下： false：不使能IBShare。 true：使能IBShare。 IBShare的功能是能够复用L1上相同的A矩阵或B矩阵数据，开启后在数据复用场景能够避免重复搬运数据到L1。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | IBShare |
| doSpecialMDL | 使能SpecialMDL模板。参数取值如下： true：使能SpecialMDL模板。 false：不使能SpecialMDL模板。 MDL模板的一种特殊场景：Matmul K方向不全载时（singleCoreK/baseK > stepKb），默认仅支持stepN设置为1，使能SpecialMDL模板后支持stepN=2。 注意：使能SpecialMDL模板时，doMultiDataLoad参数取值必须为false。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | SpecialMDL |
| enableInit | 是否启用Init函数，不使能Init函数能够提升常量传播效果，优化性能。默认使能。 false：不使能Init函数。 true：使能Init函数。 | 所有模板 |
| 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。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | Norm |
| enableEnd | Matmul计算过程中是否需要调用End函数，该参数可用于优化性能。参数取值如下： true：Matmul计算过程中需要调用End函数（默认值）。 false：不需要调用End函数。End处理相关的代码都会在编译期删除，从而优化性能。例如，异步场景不需要调用End函数，可以将该参数置为false。 | 所有模板 |
| enableGetTensorC | Matmul计算过程中是否需要调用GetTensorC函数，该参数可用于优化性能。参数取值如下： true：Matmul计算过程中需要调用GetTensorC函数（默认值）。 false：不需要调用GetTensorC函数。GetTensorC处理相关的代码都会在编译期删除，从而优化性能。 | 所有模板 |
| enableSetOrgShape | Matmul计算过程中是否需要调用SetOrgShape函数，该参数可用于优化性能。参数取值如下： true：Matmul计算过程中需要调用SetOrgShape函数（默认值）。 false：不需要调用SetOrgShape函数。SetOrgShape处理相关的代码都会在编译期删除，从而优化性能。 | 所有模板 |
| enableSetBias | 是否使能计算Bias。该参数可用于优化性能。参数取值如下： true：使能计算Bias（默认值）。若输入带有Bias，实现过程中做Bias的搬运、计算等。 false：不计算Bias。Bias处理相关的代码都会在编译期删除，从而优化性能。 | 所有模板 |
| enableSetTail | Matmul计算过程中是否需要调用SetTail函数，该参数可用于优化性能。参数取值如下： true：Matmul计算过程中需要调用SetTail函数（默认值）。 false：不需要调用SetTail函数。SetTail处理相关的代码都会在编译期删除，从而优化性能。 | 所有模板 |
| enableQuantVector | Matmul计算过程中是否需要调用SetQuantVector和SetQuantScalar函数，该参数可用于优化性能。参数取值如下： true：Matmul计算过程中需要调用SetQuantVector和SetQuantScalar函数（默认值）。 false：不需要调用SetQuantVector和SetQuantScalar函数。SetQuantVector和SetQuantScalar处理相关的代码都会在编译期删除，从而优化性能。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | 所有模板 |
| enableSetDefineData | 使能模板参数MatmulCallBack（自定义回调函数）时，用于允许/禁止设置回调函数需要的计算数据或在GM上存储的数据地址等信息。 参数取值如下： true：允许设置（默认值）。 false：不允许设置。SetSelfDefineData处理相关的代码都会在编译期删除，从而优化性能。 对于Atlas 350 加速卡，MxMatmul场景不支持此参数。 | 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系列接口的个数，不使能计算头开销的优化。 Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 所有模板 |
| enableReuse | SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr，该参数仅支持默认值true。参数取值如下： true：直接传递计算数据，仅限单个值。 false：传递GM上存储的数据地址信息。 对于Atlas 350 加速卡，MxMatmul场景不支持该参数。 | Norm、MDL |
| enableUBReuse | 是否使能Unified Buffer复用。在Unified Buffer空间足够的条件下（Unified Buffer空间大于4倍TCubeTiling的transLength参数），使能该参数后，Unified Buffer空间分为互不重叠的两份，分别存储Matmul计算相邻前后两轮迭代的数据，后一轮迭代数据的搬入将不必等待前一轮迭代的Unified Buffer空间释放，从而优化流水。参数取值如下： true：使能Unified Buffer复用。 false：不使能Unified Buffer复用。 包括MxMatmul场景，Atlas 350 加速卡不支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 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场景，Atlas 350 加速卡不支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | MDL |
| intraBlockPartSum | 用于分离模式下的Vector、Cube计算融合场景，使能两个AIV核的一次计算结果（baseM \* baseN大小的矩阵分片）在L0C Buffer上累加，参数取值如下： false：不使能两个AIV核的计算结果在L0C Buffer上的累加（默认值）。 true：使能两个AIV核的计算结果在L0C Buffer上的累加。 包括MxMatmul场景，Atlas 350 加速卡不支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 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模板。 该参数的使用样例请参考M/N方向流水并行Matmul算子样例(https://gitcode.com/cann/asc\-devkit/tree/9.0.0/examples/01\_simd\_cpp\_api/03\_libraries/00\_matrix/matmul\_mndb)。 Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 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\_PRODUCT。 对于Atlas 350 加速卡，MxMatmul仅支持MDL模板。 Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | Norm、MDL |
| enableDoubleCache | 开启IBShare模板后，在L1 Buffer上是否同时缓存两块数据。参数取值如下： false：L1 Buffer上同时缓存一块数据（默认值）。 true：使能L1 Buffer上同时缓存两块数据。 注意：该参数取值为true时，需要控制基本块大小，防止两块数据的缓存超过L1 Buffer大小限制。 包括MxMatmul场景，Atlas 350 加速卡不支持此参数。 | 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场景外，Atlas 350 加速卡支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持设置为false。 Atlas 200I/500 A2 推理产品 不支持设置为false。 | Norm |
| enableStaticPadZeros | 使用常量化的Tiling参数时，在左矩阵和右矩阵搬运到L1 Buffer的过程中，是否自动按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小补零。关于常量化Tiling参数的详细内容请参考GetMatmulApiTiling。 仅支持GM输入的ND2NZ格式的补零，其他场景需要用户自行补零。参数取值如下： false：搬运时不自动补零，需要用户自行补零（默认值）。 true：搬运时按照常量化的singleM/singleN/singleK及baseM/baseN/baseK大小自动补零。 | 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大小的矩阵分片。 Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 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等接口获取结果。 该参数的具体使用请参考使能双主模式的算子样例(https://gitcode.com/cann/asc\-devkit/tree/9.0.0/examples/01\_simd\_cpp\_api/03\_libraries/00\_matrix/matmul\_mixdualmaster)。 除MxMatmul场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 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场景外，Atlas 350 加速卡支持该参数。 该参数取值为true时，建议同时设置enUnitFlag参数为true，使搬运与计算流水并行，提高性能。该参数的使用样例请参考Matmul A2和B2全局管理样例(https://gitcode.com/cann/asc\-devkit/tree/9.0.0/examples/01\_simd\_cpp\_api/03\_libraries/00\_matrix/matmul\_a2b2\_share)。 | 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类型，矩阵乘结果CO1为float类型，输出到Global Memory的场景，支持使能该参数。参数取值如下： false：默认值，不使能channel\_split功能，输出的分形为16\*16。 true：使能channel\_split功能，输出的分形为16\*8。 Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 所有模板 |
| enableKdimReorderLoad | 是否使能K轴错峰加载数据。基于相同Tiling参数，执行Matmul计算时，如果多核的左矩阵或者右矩阵相同，且存储于Global Memory，多个核一般会同时访问相同地址以加载矩阵数据，引发同地址访问冲突，影响性能。使能该参数后，多核执行Matmul时，将尽量在相同时间访问矩阵的不同Global Memory地址，减少地址访问冲突概率，提升性能。该参数功能只支持MDL模板，建议K轴较大且左矩阵和右矩阵均非全载场景使能参数。参数取值如下，具体样例请参考K轴错峰加载数据的算子样例(https://gitcode.com/cann/asc\-devkit/tree/9.0.0/examples/01\_simd\_cpp\_api/03\_libraries/00\_matrix/matmul\_k\_reorder\_load)。 false：默认值，关闭K轴错峰加载数据的功能。 true：开启K轴错峰加载数据的功能。 除MxMatmul场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | MDL |
| isCO1Shared | 是否使能CO1内存共享，由该参数与sharedCO1BufferSize参数指定CO1划分块数，缓存到CO1中的数据块数不能超过CO1划分的块数，即未被GetTensorC获取的Iterate计算生成的结果个数不能超过CO1划分的块数。该配置为全局配置，所有Matmul对象取值必须保持一致。参数取值如下： true：开启CO1内存共享。 false：默认值，关闭CO1内存共享。 除MxMatmul场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | Norm、IBShare |
| sharedCO1BufferSize | 指定CO1共享的一份Buffer大小。uint32\_t类型，支持的取值为32\*1024、64\*1024、128\*1024。 除MxMatmul场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | Norm、IBShare |
| bmmOutMode | 预留参数，默认值为BatchOutMode::SINGLE\_BATCH。 | 预留参数 |
| enableL1BankConflictOptimise | 是否使能L1上的Bank冲突优化。在Tiling侧调用EnableL1BankConflictOptimise接口获取能否使能该参数的结果，并与TilingKey(https://www.hiascend.comdocument/detail/zh/canncommercial/900/programug/Ascendcopdevg/atlas\_ascendc\_10\_00021.html\#ZH\-CN\_TOPIC\_0000002531522256\_\_li578045965)机制配合使用，在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场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | MDL |
| enableRelu | 是否使能对矩阵乘的输出矩阵C做Relu修正。开启该功能后，输出矩阵中负数值被修正为0。参数取值如下。 false：默认值，关闭对输出矩阵C的Relu修正功能。 true：开启对输出矩阵C的Relu修正功能。 除MxMatmul场景外，Atlas 350 加速卡支持该参数。 Atlas A3 训练系列产品 / Atlas A3 推理系列产品 不支持该参数。 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 不支持该参数。 Atlas 推理系列产品 AI Core不支持该参数。 Atlas 200I/500 A2 推理产品 不支持该参数。 | 所有模板 |
