CANN/asc-devkit GetMMConfig矩阵配置

发布时间:2026/7/17 8:30:06
CANN/asc-devkit GetMMConfig矩阵配置 GetMMConfig【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品AI Core支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持Kirin X90支持Kirin 9030不支持功能说明灵活的自定义Matmul模板参数配置。通过设置MatmulConfigMode、MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams获取自定义的MatmulConfig。MatmulConfigMode指定了获取并要修改的MatmulConfig模板各模板介绍请参考模板特性用户根据使用需求通过设置可变参数即一个或多个任意顺序的MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams修改该MatmulConfig模板的相应参数配置。相比GetNormalConfig、GetMDLConfig等获取模板的接口该接口提供了更灵活的自定义Matmul模板参数的配置方式。函数原型template MatmulConfigMode configMode, typename... ArgTypes __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes... args)参数说明表1模板参数说明参数名描述configMode获取的MatmulConfig模板。ArgTypes可变模板参数。表2参数说明参数名输入/输出描述args输入可变参数任意顺序传入需要设置的MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams中的一个或多个。表3MatmulConfigMode参数说明| 参数 | 说明 | | --- | --- | | CONFIG_NORM | 表示设置MatmulConfig默认值为Norm模板 | | CONFIG_MDL | 表示设置MatmulConfig默认值为MDL模板 | | CONFIG_SPECIALMDL | 表示设置MatmulConfig默认值为SpecialMDL模板 | | CONFIG_IBSHARE | 表示设置MatmulConfig默认值为IBShare模板 |表4MatmulShapeParams参数说明| 参数 | 数据类型 | 说明 | | --- | --- | --- | | singleCoreM | uint32_t | 单核内M轴shape大小以元素为单位。 | | singleCoreN | uint32_t | 单核内N轴shape大小以元素为单位。 | | singleCoreK | uint32_t | 单核内K轴shape大小以元素为单位。 | | basicM | uint32_t | 与TCubeTiling结构体中的baseM参数含义相同Matmul计算时base块M轴长度以元素为单位。 | | basicN | uint32_t | 与TCubeTiling结构体中的baseN参数含义相同Matmul计算时base块N轴长度以元素为单位。 | | basicK | uint32_t | 与TCubeTiling结构体中的baseK参数含义相同Matmul计算时base块K轴长度以元素为单位。 |表5MatmulQuantParams参数说明| 参数 | 数据类型 | 说明 | | --- | --- | --- | | isPerTensor | bool | A矩阵half类型输入且B矩阵int8_t类型输入场景开启B矩阵量化时是否为per tensor。trueper tensor量化。falseper channel量化。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。 | | hasAntiQuantOffset | bool | A矩阵half类型输入且B矩阵int8_t类型输入场景开启B矩阵量化时是否使用offset系数。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。 |表6MatmulBatchParams参数说明| 参数 | 数据类型 | 说明 | | --- | --- | --- | | isNBatch | bool | 是否多Batch输入多Batch输出。仅对BatchMatmul有效开启多Batch后仅支持Norm模板且需调用IterateNBatch实现多Batch输入多Batch输出。参数取值如下false不开启多Batch默认值。true开启多Batch。 | | batchMode | 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。 | | isBiasBatch | bool | 批量多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支持此参数。 | | bmmOutMode | BatchOutMode | 预留参数。 |表7MatmulFuncParams参数说明| 参数 | 数据类型 | 说明 | | --- | --- | --- | | intrinsicsLimit | bool | 当左矩阵或右矩阵在单核上内轴即尾轴大于等于65535元素个数时是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如左矩阵A[M, K]单核上的内轴数据singleCoreK大于65535配置该参数为true后API内部通过循环执行数据的搬入。参数取值如下false当左矩阵或右矩阵在单核上内轴大于等于65535时不开启循环执行数据的搬入默认值。true当左矩阵或右矩阵在单核上内轴大于等于65535时开启循环执行数据的搬入。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。 | | enVecND2NZ | bool | 开启通过vector指令进行ND2NZ。开启时需要设置SetLocalWorkspace。参数取值如下false不开启通过vector指令进行ND2NZ默认值。true开启通过vector指令进行ND2NZ。针对Atlas 推理系列产品AI Core在Unified Buffer空间足够的条件下Unified Buffer空间大于2倍TCubeTiling的transLength参数建议优先开启搬运性能更好。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。 | | enableDoubleCache | bool | 开启IBShare模板后在L1 Buffer上是否同时缓存两块数据。参数取值如下falseL1 Buffer上同时缓存一块数据默认值。true开启L1 Buffer上同时缓存两块数据。注意该参数取值为true时需要控制基本块大小防止两块数据的缓存超过L1 Buffer大小限制。包括MxMatmul场景Ascend 950PR/Ascend 950DT不支持此参数。Kirin X90不支持此参数。 | | enableL1CacheUB | bool | 是否开启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不支持该参数。 | | doMTE2Preload | uint32_t | 在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。 | | iterateOrder | 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模板。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。Atlas 推理系列产品AI Core不支持该参数。Atlas 200I/500 A2 推理产品不支持该参数。Kirin X90支持该参数。 | | scheduleType | 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_PRODUCT。Ascend 950PR/Ascend 950DT支持该参数。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。Atlas 推理系列产品AI Core不支持该参数。Atlas 200I/500 A2 推理产品不支持该参数。Kirin X90支持该参数。 | | enableReuse | bool | SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr该参数仅支持默认值true。参数取值如下true直接传递计算数据仅限单个值。false传递GM上存储的数据地址信息。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持该参数。 | | enableUBReuse | bool | 是否开启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不支持该参数。 | | isPartialOutput | bool | 是否开启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支持此参数。 | | isA2B2Shared | bool | 是否开启A2和B2的全局管理即控制所有Matmul对象是否共用A2和B2的double buffer机制。该配置为全局配置所有Matmul对象取值必须保持一致。注意开启时A矩阵、B矩阵的基本块大小均不能超过32KB。参数取值如下true开启。false关闭默认值。Atlas A3 训练系列产品/Atlas A3 推理系列产品支持该参数。Atlas A2 训练系列产品/Atlas A2 推理系列产品支持该参数。Atlas 推理系列产品AI Core不支持该参数。除MxMatmul场景外Ascend 950PR/Ascend 950DT支持该参数。Kirin X90支持此参数。该参数取值为true时建议同时设置enUnitFlag参数为true使搬运与计算流水并行提高性能。 | | isEnableChannelSplit | bool | 是否开启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不支持此参数。 | | enableKdimReorderLoad | bool | 是否开启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支持此参数。 | | enableL1BankConflictOptimise | bool | 是否开启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不支持此参数。 |返回值说明MatmulConfig结构体。约束说明无调用示例// 获取MatmulConfig模板为Norm模板 constexpr static MatmulConfigMode configMode MatmulConfigMode::CONFIG_NORM; // singleCoreM、singleCoreN、singleCoreK、basicM、basicN、basicK constexpr static MatmulShapeParams shapeParams {128, 128, 128, 64, 64, 64}; // B矩阵量化时为per channel且不使用offset系数 constexpr static MatmulQuantParams quantParams {false, false}; // 不开启多Batch constexpr static MatmulBatchParams batchParams{false}; // 不进行芯片指令搬运地址偏移量校验开启通过vector进行ND2NZ constexpr static MatmulFuncParams funcParams{false, true}; constexpr static MatmulConfig mmConfig GetMMConfigconfigMode(shapeParams, quantParams, batchParams, funcParams);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考