asc.language.adv.get_mm_config
asc.language.adv.get_mm_config(*args, **kwargs) → MatmulConfig
灵活的自定义Matmul模板参数配置。
对应的Ascend C函数原型
template <MatmulConfigMode configMode, typename... ArgTypes>
__aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)
参数说明
MatmulShapeParams参数:
- single_core_m: 单核内M轴shape大小,以元素为单位。
- single_core_n: 单核内N轴shape大小,以元素为单位。
- single_core_n: 单核内K轴shape大小,以元素为单位。
- basic_m: Matmul计算时base块M轴长度,以元素为单位。
- basic_n: Matmul计算时base块N轴长度,以元素为单位。
- basic_k: Matmul计算时base块K轴长度,以元素为单位。
MatmulQuantParams参数:
- is_per_tensor: A矩阵half类型输入且B矩阵int8_t类型输入场景,使能B矩阵量化时是否为per tensor。
- True:per tensor量化。
- False:per channel量化。
- has_anti_quant_offset: A矩阵half类型输入且B矩阵int8_t类型输入场景,使能B矩阵量化时是否使用offset系数。
MatmulBatchParams参数:
- is_n_batch: 是否多Batch输入多Batch输出。仅对BatchMatmul有效。参数取值如下:
- False:不使能多Batch(默认值)。
- True:使能多Batch。
- batch_mode: 用于设置参数BatchMode。
batchMatmul场景中Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。
参数取值如下:
- batchMode::BATCH_LESS_THAN_L1:多batch数据总和<L1 Buffer Size;
- batchMode::BATCH_LARGE_THAN_L1:多batch数据总和>L1 Buffer Size;
- batchMode::SINGLE_LARGE_THAN_L1:单batch数据总和>L1 Buffer Size。
- is_bias_batch: 批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下:
- True: Bias带有Batch轴,Bias大小为Batch * N(默认值)。
- False: Bias不带Batch轴,Bias大小为N,多Batch计算Matmul时,会复用Bias。
- MatmulFuncParams参数:
- intrinsics_limit: 用于设置参数intrinsicsCheck。参数取值如下:
- False:当左矩阵或右矩阵在单核上内轴大于等于65535时,不使能循环执行数据的搬入(默认值);
- True:当左矩阵或右矩阵在单核上内轴大于等于65535时,使能循环执行数据的搬入。
- en_vec_nd2_nz: 使能通过vector指令进行ND2NZ。参数取值如下:
- False:不使能通过vector指令进行ND2NZ(默认值);
- True:使能通过vector指令进行ND2NZ。
- enable_l1_cache: 是否使能L1 Buffer缓存Unified Buffer计算块。参数取值如下:
- True: 使能L1 Buffer缓存Unified Buffer计算块。
- False: 不使能L1 Buffer缓存Unified Buffer计算块。
- do_mte2_preload: 在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。
预加载功能仅在MDL模板有效(不支持SpecialMDL模板)。参数取值如下:
- 0: 不开启(默认值)。
- 1: 开启M方向preload。
- 2: 开启N方向preload。
- iterate_order: 用于设置参数iterateOrder。
- schedule_type: 用于设置参数scheduleType。配置Matmul数据搬运模式。参数取值如下:
- scheduleType::INNER_PRODUCT:默认模式,在K方向上做MTE1的循环搬运;
- scheduleType::OUTER_PRODUCT:在M或N方向上做MTE1的循环搬运。
- enable_reuse: SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。参数取值如下:
- False:直接传递计算数据,仅限单个值。
- True:传递GM上存储的数据地址信息。
- enable_ub_reuse: 是否使能Unified Buffer复用。参数取值如下:
- False:使能Unified Buffer复用。
- True:不使能Unified Buffer复用。
- is_partial_output: 是否开启PartialOutput功能。参数取值如下:
- False:开启PartialOutput功能,一次Iterate的K轴不进行累加计算,Matmul每次计算输出局部baseK的baseM * baseN大小的矩阵分片。
- True:不开启PartialOutput功能,一次Iterate的K轴进行累加计算,Matmul每次计算输出SingleCoreK长度的baseM * baseN大小的矩阵分片。
- is_a2_b2_shared: 是否开启A2和B2的全局管理,即控制所有Matmul对象是否共用A2和B2的double buffer机制。参数取值如下:
- True:开启。
- False:关闭(默认值)。
- is_enable_channel_split: 是否使能channel_split功能。参数取值如下:
- False:默认值,不使能channel_split功能,输出的分形为16*16。
- True:使能channel_split功能,输出的分形为16*8。
- enable_kdim_reorder_load: 是否使能K轴错峰加载数据。
- False:默认值,关闭K轴错峰加载数据的功能。
- True:开启K轴错峰加载数据的功能。
返回值说明
MatmulConfig结构体。
调用示例
# 获取MatmulConfig模板为Norm模板
config_mode = asc.adv.MatmulConfigMode.CONFIG_NORM
# single_core_m、single_core_n、single_core_k、basic_m、basic_n、basic_k
shape_params = asc.adv.MatmulShapeParams(128, 128, 128, 64, 64, 64)
# B矩阵量化时为per channel且不适用offset系数
quant_params = asc.adv.MatmulQuantParams(False, False)
# 不使能多Batch
batch_params = asc.adv.MatmulBatchParams(False)
#不进行芯片指令搬运地址偏移量校验,使能通过vector进行ND2NZ
func_params = asc.adv.MatmulFuncParams(False, True)
mm_config = asc.adv.get_mm_config(shape_params, quant_params, batch_params, func_params, config_mode)