cann/asc-devkit: GetNormalConfig函数文档

发布时间:2026/7/17 8:30:06
cann/asc-devkit: GetNormalConfig函数文档 GetNormalConfig【免费下载链接】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不支持功能说明用于配置Norm模板的参数获取自定义Norm模板。Norm模板的介绍请参考表模板特性。函数原型__aicore__ constexpr MatmulConfig GetNormalConfig(const bool intrinsicsLimit false, const bool batchLoop false, const bool isVecND2NZ false, const BatchMode bmmMode BatchMode::BATCH_LESS_THAN_L1, const bool isMsgReuse true, const IterateOrder iterateOrder IterateOrder::UNDEF, const ScheduleType scheduleType ScheduleType::INNER_PRODUCT, const bool enUnitFlag true, const bool enableMixDualMaster false, const BatchOutMode bmmOutMode BatchOutMode::SINGLE_BATCH)参数说明本接口的所有参数用于设置MatmulConfig结构体中的参数其中互相对应的参数的功能作用相同。表1接口参数说明参数名输入/输出描述intrinsicsLimit输入用于设置参数intrinsicsCheck。当左矩阵或右矩阵在单核上内轴即尾轴大于等于65535元素个数时是否开启循环执行数据从Global Memory到L1 Buffer的搬入。例如左矩阵A[M, K]单核上的内轴数据singleCoreK大于65535配置该参数为true后API内部通过循环执行数据的搬入。参数取值如下false当左矩阵或右矩阵在单核上内轴大于等于65535时不开启循环执行数据的搬入默认值。true当左矩阵或右矩阵在单核上内轴大于等于65535时开启循环执行数据的搬入。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。batchLoop输入用于设置参数isNBatch。是否多Batch输入多Batch输出。仅对BatchMatmul有效开启多Batch后仅支持Norm模板且需调用IterateNBatch实现多Batch输入多Batch输出。参数取值如下false不开启多Batch默认值。true开启多Batch。isVecND2NZ输入用于设置参数enVecND2NZ。开启通过vector指令进行ND2NZ。开启时需要设置SetLocalWorkspace。参数取值如下false不开启通过vector指令进行ND2NZ默认值。true开启通过vector指令进行ND2NZ。针对Atlas 推理系列产品AI Core在Unified Buffer空间足够的条件下Unified Buffer空间大于2倍TCubeTiling的transLength参数建议优先开启搬运性能更好。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持此参数。bmmMode输入用于设置参数batchMode。该参数用于BatchMatmul场景。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。isMsgReuse输入用于设置参数enableReuse。SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。若未调用SetSelfDefineData设置dataPtr该参数仅支持默认值true。参数取值如下true直接传递计算数据仅限单个值。false传递GM上存储的数据地址信息。对于Ascend 950PR/Ascend 950DTMxMatmul场景不支持该参数。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支持此参数。enUnitFlag输入用于设置参数enUnitFlag。开启UnitFlag功能使计算与搬运流水并行提高性能。Norm, IBShare下默认开启MDL下默认不开启。参数取值如下false不开启UnitFlag功能。true开启UnitFlag功能。注意对于Ascend 950PR/Ascend 950DT的MxMatmul场景仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式输出到GM场景下开启UnitFlag功能有性能收益。enableMixDualMaster输入用于设置参数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不支持此参数。bmmOutMode输入预留参数。返回值说明MatmulConfig结构体。约束说明无调用示例// 配置Norm模板的参数获取自定义Norm模板 constexpr MatmulConfig MM_CFG GetNormalConfig( /* intrinsicsLimit */ false, /* batchLoop */ false, /* isVecND2NZ */ false, /* bmmMode */ BatchMode::BATCH_LESS_THAN_L1, /* isMsgReuse */ true, /* iterateOrder */ IterateOrder::UNDEF, /* scheduleType */ ScheduleType::INNER_PRODUCT, /* enUnitFlag */ true, /* enableMixDualMaster */ false, /* bmmOutMode */ BatchOutMode::SINGLE_BATCH); // 常规Matmul计算最后输出使用自定义Norm模板的计算结果 AscendC::MatmulA_TYPE, B_TYPE, C_TYPE, BIAS_TYPE, MM_CFG mm; REGIST_MATMUL_OBJ(pipe, GetSysWorkSpacePtr(), mm, tiling); mm.SetTensorA(gm_a); mm.SetTensorB(gm_b); if (tiling.isBias) { mm.SetBias(gmBias); } mm.IterateAll(gm_c); mm.End();【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考