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)