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)