GetMMConfig
功能说明
灵活的自定义Matmul模板参数配置。通过设置MatmulConfigMode、MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams,获取自定义的MatmulConfig。
MatmulConfigMode指定了获取并要修改的MatmulConfig模板,各模板介绍请参考表 模板特性;用户根据使用需求通过设置可变参数,即一个或多个任意顺序的MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams,修改该MatmulConfig模板的相应参数配置。
函数原型
1 2 | template <MatmulConfigMode configMode, typename... ArgTypes> __aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args) |
参数说明
参数名 |
描述 |
---|---|
configMode |
获取的MatmulConfig模板。 |
ArgTypes |
可变模版参数。 |
参数名 |
输入/输出 |
描述 |
---|---|---|
args |
输入 |
可变参数,任意顺序传入需要设置的MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams中的一个或多个。 |
参数 |
说明 |
---|---|
CONFIG_NORM |
表示设置MatmulConfig默认值为Norm模板 |
CONFIG_MDL |
表示设置MatmulConfig默认值为MDL模板 |
CONFIG_SPECIALMDL |
表示设置MatmulConfig默认值为SpecialMDL模板 |
CONFIG_IBSHARE |
表示设置MatmulConfig默认值为IBShare模板 |
参数 |
数据类型 |
说明 |
---|---|---|
singleCoreM |
uint32_t |
单核内M轴shape大小,以元素为单位 |
singleCoreN |
uint32_t |
单核内N轴shape大小,以元素为单位 |
singleCoreK |
uint32_t |
单核内K轴shape大小,以元素为单位 |
basicM |
uint32_t |
相当于baseM |
basicN |
uint32_t |
相当于baseN |
basicK |
uint32_t |
相当于baseK |
参数 |
数据类型 |
说明 |
---|---|---|
isPerTensor |
bool |
A矩阵half类型输入且B矩阵int8类型输入场景,使能B矩阵量化时是否为per tensor,true为per tensor,false为per channel。 |
hasAntiQuantOffset |
bool |
A矩阵half类型输入且B矩阵int8类型输入场景,使能B矩阵量化时是否使用offset系数。 |
参数 |
数据类型 |
说明 |
---|---|---|
batchLoop |
bool |
是否多Batch输入多Batch输出。参数取值如下:
仅对BatchMatmul有效。 |
bmmMode |
BatchMode |
Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:
|
isBiasBatch |
bool |
批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下:
|
参数 |
数据类型 |
说明 |
||
---|---|---|---|---|
intrinsicsLimit |
bool |
进行芯片指令搬运地址偏移量校验,影响性能。参数取值如下:
|
||
enVecND2NZ |
bool |
使能通过vector进行ND2NZ。参数取值如下:
使能时需要设置SetLocalWorkspace。 |
||
doMTE2Preload |
uint32_t |
在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效。参数取值如下:
注意,开启M/N预加载功能时需保证K全载,且M/N开启Double Buffer。 |
||
enableReuse |
bool |
SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。参数取值如下:
|
||
enableUBReuse |
bool |
是否使能UB复用。参数取值如下:
|
||
enableL1CacheUB |
bool |
是否使能L1缓存UB计算块。参数取值如下:
若要使能L1缓存UB计算块,必须在tiling实现中调用SetMatmulConfigParams接口配置相关信息。 |
||
iterateOrder |
IterateOrder |
Matmul做矩阵运算的循环迭代顺序,与表1中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT或1时,本参数生效。参数取值如下:
注:MDL模板使用时,若IterateOrder取值ORDER_M,TCubeTiling结构中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。 |
||
scheduleType |
ScheduleType |
配置Matmul数据搬运模式。参数取值如下:
注:
|
||
enableDoubleCache |
bool |
开启IBShare模板后,在L1上是否同时缓存两块数据。注意,需要控制base块大小,防止两块缓存超过L1大小限制。参数取值如下:
|
返回值
支持的型号
注意事项
无
调用示例
1 2 3 4 5 6 7 8 9 10 11 | // 获取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 = GetMMConfig<configMode>(shapeParams, quantParams, batchParams, funcParams); |