CANN/asc-devkit Matmul配置参数
MatmulConfig【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit模板参数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结构体中的depthA16代表搬入6份A矩阵基本块到L11次搬运一份基本块MTE2进行6次搬运。 | 可以提前启动MTE1流水因为搬1份基本块就可以做MTE1后面的运算。 | 默认开启Norm模板。 | | MDLSpecialMDL | 支持L1缓存多个基本块MTE2从GM到L1的搬运为一次性“大包”搬运。举例说明Tiling结构体中的depthA16代表一次性搬入6份A矩阵基本块到L1MTE2进行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和单核内shapesingleCoreM,singleCoreN大小确定。注意相同场景下推荐使用常量化来获得更好的性能收益。 |表2MatmulConfig参数说明| 参数 | 说明 | 支持模板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 950DTMxMatmul场景不支持此参数。Kirin 9030不支持此参数。 | 所有模板 | | isNBatch | 是否多Batch输入多Batch输出。仅对BatchMatmul有效开启多Batch后仅支持Norm模板且需调用IterateNBatch实现多Batch输入多Batch输出。参数取值如下false不开启多Batch默认值。true开启多Batch。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。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 950DTMxMatmul场景不支持此参数。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 950DTMxMatmul场景不支持此参数。 | 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 stepKaN方向的K全载条件为singleCoreK/baseK stepKb。Kirin 9030仅支持默认值。 | MDL | | singleCoreM | 单核内M轴shape大小以元素为单位。 | SpecialBasicBlock | | singleCoreN | 单核内N轴shape大小以元素为单位。 | SpecialBasicBlock | | singleCoreK | 单核内K轴shape大小以元素为单位。 | SpecialBasicBlock | | stepM | 左矩阵在L1 BufferA1中缓存的bufferM方向上baseM的倍数。 | SpecialBasicBlock | | stepN | 右矩阵在L1 BufferB1中缓存的bufferN方向上baseN的倍数。 | SpecialBasicBlock | | baseMN | baseMbaseN的大小。 | SpecialBasicBlock | | singleCoreMN | singleCoreMsingleCoreN的大小。 | 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。trueper tensor量化。falseper channel量化。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。Kirin 9030不支持此参数。 | MDL、SpecialMDL | | hasAntiQuantOffset | A矩阵half类型输入且B矩阵int8_t类型输入场景开启B矩阵量化时是否使用offset系数。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。Kirin 9030不支持此参数。 | MDL、SpecialMDL | | doIBShareNorm | 开启IBShare模板。参数取值如下false不开启IBShare。true开启IBShare。IBShare的功能是能够复用L1上相同的A矩阵或B矩阵数据开启后在数据复用场景能够避免重复搬运数据到L1。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。Kirin X90不支持此参数。Kirin 9030不支持此参数。 | IBShare | | doSpecialMDL | 开启SpecialMDL模板。参数取值如下true开启SpecialMDL模板。false不开启SpecialMDL模板。MDL模板的一种特殊场景Matmul K方向不全载时singleCoreK/baseK stepKb默认仅支持stepN设置为1开启SpecialMDL模板后支持stepN2。注意开启SpecialMDL模板时doMultiDataLoad参数取值必须为false。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。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 SizeBatchMode::BATCH_LARGE_THAN_L1多batch数据总和L1 Buffer SizeBatchMode::SINGLE_LARGE_THAN_L1单batch数据总和L1 Buffer Size。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。Kirin 9030不支持此参数。 | Norm | | enableEnd | Matmul计算过程中是否需要调用End函数该参数可用于优化性能。参数取值如下trueMatmul计算过程中需要调用End函数默认值。false不需要调用End函数。End处理相关的代码都会在编译期删除从而优化性能。例如异步场景不需要调用End函数可以将该参数置为false。Kirin 9030仅支持true。 | 所有模板 | | enableGetTensorC | Matmul计算过程中是否需要调用GetTensorC函数该参数可用于优化性能。参数取值如下trueMatmul计算过程中需要调用GetTensorC函数默认值。false不需要调用GetTensorC函数。GetTensorC处理相关的代码都会在编译期删除从而优化性能。Kirin 9030仅支持true。 | 所有模板 | | enableSetOrgShape | Matmul计算过程中是否需要调用SetOrgShape函数该参数可用于优化性能。参数取值如下trueMatmul计算过程中需要调用SetOrgShape函数默认值。false不需要调用SetOrgShape函数。SetOrgShape处理相关的代码都会在编译期删除从而优化性能。Kirin 9030仅支持true。 | 所有模板 | | enableSetBias | 是否开启计算Bias。该参数可用于优化性能。参数取值如下true开启计算Bias默认值。若输入带有Bias实现过程中做Bias的搬运、计算等。false不计算Bias。Bias处理相关的代码都会在编译期删除从而优化性能。Kirin 9030仅支持false。 | 所有模板 | | enableSetTail | Matmul计算过程中是否需要调用SetTail函数该参数可用于优化性能。参数取值如下trueMatmul计算过程中需要调用SetTail函数默认值。false不需要调用SetTail函数。SetTail处理相关的代码都会在编译期删除从而优化性能。Kirin 9030仅支持true。 | 所有模板 | | enableQuantVector | Matmul计算过程中是否需要调用SetQuantVector和SetQuantScalar函数该参数可用于优化性能。参数取值如下trueMatmul计算过程中需要调用SetQuantVector和SetQuantScalar函数默认值。false不需要调用SetQuantVector和SetQuantScalar函数。SetQuantVector和SetQuantScalar处理相关的代码都会在编译期删除从而优化性能。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。Kirin 9030仅支持true。 | 所有模板 | | enableSetDefineData | 启用模板参数MatmulCallBack自定义回调函数时用于允许/禁止设置回调函数需要的计算数据或在GM上存储的数据地址等信息。参数取值如下true允许设置默认值。false不允许设置。SetSelfDefineData处理相关的代码都会在编译期删除从而优化性能。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。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 950DTMxMatmul场景不支持该参数。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_MTCubeTiling结构中的stepN需要大于1IterateOrder取值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模板中singleCoreKbaseK时不能设置为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上是否同时缓存两块数据。参数取值如下falseL1 Buffer上同时缓存一块数据默认值。true开启L1 Buffer上同时缓存两块数据。注意该参数取值为true时需要控制基本块大小防止两块数据的缓存超过L1 Buffer大小限制。包括MxMatmul场景Ascend 950PR/Ascend 950DT不支持此参数。Kirin X90不支持此参数。Kirin 9030不支持此参数。 | IBShare | | isBiasBatch | 批量多Batch的Matmul场景即BatchMatmul场景Bias的大小是否带有Batch轴。参数取值如下trueBias带有Batch轴Bias大小为Batch * N默认值。falseBias不带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假设此时的分形个数为xchannel_split功能是使获得的C矩阵分形为16*8同时分形个数变为2x。注意当前仅在Matmul计算结果C矩阵的Format为CubeFormat::NZTYPE为float类型矩阵乘结果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 | 是否开启CO1内存共享由该参数与sharedCO1BufferSize参数指定CO1划分块数缓存到CO1中的数据块数不能超过CO1划分的块数即未被GetTensorC获取的Iterate计算生成的结果个数不能超过CO1划分的块数。该配置为全局配置所有Matmul对象取值必须保持一致。参数取值如下true开启CO1内存共享。false默认值关闭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 | 指定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不支持此参数。 | 所有模板 |【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考