下载
中文
注册

GetMMConfig

功能说明

灵活的自定义Matmul模板参数配置。通过设置MatmulConfigModeMatmulShapeParamsMatmulQuantParamsMatmulBatchParamsMatmulFuncParams,获取自定义的MatmulConfig

MatmulConfigMode指定了获取并要修改的MatmulConfig模板,各模板介绍请参考表 模板特性;用户根据使用需求通过设置可变参数,即一个或多个任意顺序的MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams,修改该MatmulConfig模板的相应参数配置。

函数原型

1
2
template <MatmulConfigMode configMode, typename... ArgTypes>
__aicore__ inline constexpr MatmulConfig GetMMConfig(ArgTypes&&... args)

参数说明

表1 模板参数说明

参数名

描述

configMode

获取的MatmulConfig模板。

ArgTypes

可变模版参数。

表2 参数说明

参数名

输入/输出

描述

args

输入

可变参数,任意顺序传入需要设置的MatmulShapeParams、MatmulQuantParams、MatmulBatchParams、MatmulFuncParams中的一个或多个。

表3 MatmulConfigMode参数说明

参数

说明

CONFIG_NORM

表示设置MatmulConfig默认值为Norm模板

CONFIG_MDL

表示设置MatmulConfig默认值为MDL模板

CONFIG_SPECIALMDL

表示设置MatmulConfig默认值为SpecialMDL模板

CONFIG_IBSHARE

表示设置MatmulConfig默认值为IBShare模板

表4 MatmulShapeParams参数说明

参数

数据类型

说明

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

表5 MatmulQuantParams参数说明

参数

数据类型

说明

isPerTensor

bool

A矩阵half类型输入且B矩阵int8类型输入场景,使能B矩阵量化时是否为per tensor,true为per tensor,false为per channel。

hasAntiQuantOffset

bool

A矩阵half类型输入且B矩阵int8类型输入场景,使能B矩阵量化时是否使用offset系数。

表6 MatmulBatchParams参数说明

参数

数据类型

说明

batchLoop

bool

是否多Batch输入多Batch输出。参数取值如下:

  • false:不使能多Batch(默认值)
  • true:使能多Batch

仅对BatchMatmul有效。

bmmMode

BatchMode

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。

isBiasBatch

bool

批量多Batch的Matmul场景,即BatchMatmul场景,Bias的大小是否带有Batch轴。参数取值如下:

  • true:Bias带有Batch轴,Bias大小为Batch * N(默认值)
  • false:Bias不带Batch轴,Bias大小为N,多Batch计算Matmul时,会复用Bias。

    Atlas A2 训练系列产品/Atlas 800I A2 推理产品支持设置为false。

    Atlas 推理系列产品AI Core不支持设置为false。

    Atlas 200I/500 A2 推理产品不支持设置为false。

表7 MatmulFuncParams参数说明

参数

数据类型

说明

intrinsicsLimit

bool

进行芯片指令搬运地址偏移量校验,影响性能。参数取值如下:

  • false:不进行芯片指令搬运地址偏移量校验(默认值)
  • true:进行芯片指令搬运地址偏移量校验

enVecND2NZ

bool

使能通过vector进行ND2NZ。参数取值如下:

  • false:不使能通过vector进行ND2NZ(默认值)
  • true:使能通过vector进行ND2NZ

使能时需要设置SetLocalWorkspace。

doMTE2Preload

uint32_t

在MTE2流水间隙较大,且M/N数值较大时可通过该参数开启对应M/N方向的预加载功能,开启后能减小MTE2间隙,提升性能。预加载功能仅在MDL模板有效。参数取值如下:

  • 0:不开启(默认值)
  • 1:开启M方向preload
  • 2:开启N方向preload

注意,开启M/N预加载功能时需保证K全载,且M/N开启Double Buffer。

enableReuse

bool

SetSelfDefineData函数设置的回调函数中的dataPtr是否直接传递计算数据。参数取值如下:

  • true:直接传递计算数据,仅限单个值
  • false:传递GM上存储的数据地址信息

enableUBReuse

bool

是否使能UB复用。参数取值如下:

  • true:使能UB复用
  • false:不使能UB复用

Atlas A2 训练系列产品/Atlas 800I A2 推理产品不支持该参数。

Atlas 推理系列产品AI Core支持该参数。

Atlas 200I/500 A2 推理产品不支持该参数。

enableL1CacheUB

bool

是否使能L1缓存UB计算块。参数取值如下:

  • true:使能L1缓存UB计算块
  • false:不使能L1缓存UB计算块

若要使能L1缓存UB计算块,必须在tiling实现中调用SetMatmulConfigParams接口配置相关信息。

Atlas A2 训练系列产品/Atlas 800I A2 推理产品不支持该参数。

Atlas 推理系列产品AI Core支持该参数。

Atlas 200I/500 A2 推理产品不支持该参数。

iterateOrder

IterateOrder

Matmul做矩阵运算的循环迭代顺序,与表1中的iterateOrder参数含义相同。当ScheduleType参数取值为ScheduleType::OUTER_PRODUCT或1时,本参数生效。参数取值如下:

1
2
3
4
5
enum class IterateOrder {
    ORDER_M = 0,   // 先往M轴方向偏移再往N轴方向偏移
    ORDER_N,       // 先往N轴方向偏移再往M轴方向偏移
    UNDEF,         // 当前无效
};

注:MDL模板使用时,若IterateOrder取值ORDER_M,TCubeTiling结构中的stepN需要大于1,IterateOrder取值ORDER_N时,TCubeTiling结构中的stepM需要大于1。

Atlas A2 训练系列产品/Atlas 800I A2 推理产品支持该参数。

Atlas 推理系列产品AI Core不支持该参数。

Atlas 200I/500 A2 推理产品不支持该参数。

scheduleType

ScheduleType

配置Matmul数据搬运模式。参数取值如下:

  • ScheduleType::INNER_PRODUCT或0:默认模式,在K方向上做MTE1的循环搬运;
  • ScheduleType::OUTER_PRODUCT或1:在M或N方向上做MTE1的循环搬运;使能后,需要与IterateOrder参数配合使用。该配置当前只在Norm模板的Batch Matmul场景、MDL模板生效。
    • 若IterateOrder取值ORDER_M,则N方向循环搬运(在singleCoreN大于baseN场景可能有性能提升),即B矩阵的MTE1搬运并行;
    • 若IterateOrder取值ORDER_N,则M方向循环搬运(在singleCoreM大于baseM场景可能有性能提升),即A矩阵的MTE1搬运并行;
    • 不能同时使能M方向和N方向循环搬运;

注:

  • singleCoreK>baseK的场景,不能使能ScheduleType::OUTER_PRODUCT取值,需使用默认模式
  • MDL模板仅在调用IterateAll计算的场景支持配置ScheduleType::OUTER_PRODUCT或1

Atlas A2 训练系列产品/Atlas 800I A2 推理产品支持该参数。

Atlas 推理系列产品AI Core不支持该参数。

Atlas 200I/500 A2 推理产品不支持该参数。

enableDoubleCache

bool

开启IBShare模板后,在L1上是否同时缓存两块数据。注意,需要控制base块大小,防止两块缓存超过L1大小限制。参数取值如下:

  • false:L1上同时缓存一块数据(默认值)
  • true:使能L1上同时缓存两块数据

支持的型号

Atlas A2 训练系列产品/Atlas 800I A2 推理产品

Atlas 推理系列产品AI Core

注意事项

调用示例

 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);