GetNormalConfig
功能说明
用于配置Norm模板的参数,获取自定义Norm模板。
函数原型
1 | __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) |
参数说明
本接口的所有参数用于设置MatmulConfig结构体中的参数,其中互相对应的参数的功能作用相同。
参数名 |
输入/输出 |
描述 |
||
---|---|---|---|---|
intrinsicsLimit |
输入 |
用于设置参数intrinsicsCheck。 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535时,是否使能循环执行数据的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:
|
||
batchLoop |
输入 |
用于设置参数isNBatch。 是否多Batch输入多Batch输出。仅对BatchMatmul有效。参数取值如下:
|
||
isVecND2NZ |
输入 |
用于设置参数enVecND2NZ。 使能通过vector进行ND2NZ。使能时需要设置SetLocalWorkspace。参数取值如下:
针对Atlas推理系列产品AI Core,在UB空间足够的条件下(UB空间大于2*TCubeTiling的transLength参数),建议优先使能该参数,搬运性能更好。 |
||
bmmMode |
输入 |
用于设置参数batchMode。 Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:
|
||
isMsgReuse |
输入 |
用于设置参数enableReuse。 SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。参数取值如下:
|
||
iterateOrder |
输入 |
用于设置参数iterateOrder。 Matmul做矩阵运算的循环迭代顺序,与表1中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT或1时,本参数生效。参数取值如下:
注:MDL模板使用时,若IterateOrder取值ORDER_M,TCubeTiling结构中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。 Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
||
scheduleType |
输入 |
用于设置参数scheduleType。 配置Matmul数据搬运模式。参数取值如下:
注:
Atlas A2训练系列产品/Atlas 800I A2推理产品支持该参数。 Atlas推理系列产品AI Core不支持该参数。 Atlas 200/500 A2推理产品不支持该参数。 |
||
enUnitFlag |
输入 |
用于设置参数enUnitFlag。 使能unitflag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认使能,MDL下默认不使能。参数取值如下:
|
返回值
支持的型号
Atlas A2训练系列产品/Atlas 800I A2推理产品
Atlas推理系列产品AI Core
Atlas 200/500 A2推理产品
注意事项
无
调用示例
1 2 3 4 5 6 7 | constexpr MatmulConfig MM_CFG = GetNormalConfig(); Matmul<A_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); mm.SetBias(gm_bias); mm.IterateAll(gm_c); |