GetBasicConfig
功能说明
用于配置BasicBlock模板的参数,获取自定义BasicBlock模板。BasicBlock模板的介绍请参考表 模板特性。
使用该接口时可以优先考虑使用模板常量化。相比BasicBlock模板可以实现baseM/N/K常量化,模板常量化可以在此基础上实现singleCoreM/N/K、baseM/N/K的常量化,模板常量化的具体使用方式请参考Matmul Tiling常量化。
函数原型
1
|
__aicore__ constexpr MatmulConfig GetBasicConfig(const uint32_t basicM, const uint32_t basicN, const uint32_t basicK, const bool intrinsicsLimit = false, const bool batchLoop = false, const BatchMode bmmMode = BatchMode::BATCH_LESS_THAN_L1) |
参数说明
本接口的所有参数用于设置MatmulConfig结构体中的参数,其中互相对应的参数的功能作用相同。
参数名 |
输入/输出 |
描述 |
---|---|---|
basicM |
输入 |
用于设置参数basicM。 与TCubeTiling结构体中的baseM参数含义相同,Matmul计算时base块M轴长度,以元素为单位。 |
basicN |
输入 |
用于设置参数basicN。 与TCubeTiling结构体中的baseN参数含义相同,Matmul计算时base块N轴长度,以元素为单位。 |
basicK |
输入 |
用于设置参数basicK。 与TCubeTiling结构体中的baseK参数含义相同,Matmul计算时base块K轴长度,以元素为单位。 |
intrinsicsLimit |
输入 |
用于设置参数intrinsicsCheck。 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否使能循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:
|
batchLoop |
输入 |
用于设置参数isNBatch。 是否多Batch输入多Batch输出。仅对BatchMatmul有效。参数取值如下:
|
bmmMode |
输入 |
用于设置参数batchMode。该参数用于BatchMatmul场景,关于BatchMatmul的介绍请参考batch场景。 BatchMatmul场景中Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:
|
返回值
支持的型号
约束说明
无
调用示例
BasicBlock模板的完整使用样例请参考basic_block_matmul。
1 2 3 4 5 6 7 |
constexpr MatmulConfig MM_CFG = GetBasicConfig(128, 256, 64); // baseM, baseN, baseK AscendC::Matmul<A_TYPE, B_TYPE, C_TYPE, BIAS_TYPE, MM_CFG> mm; REGIST_MATMUL_OBJ(&pipe, GetSysWorkSpacePtr(), mm, &tiling); mm.SetTensorA(gm_a); mm.SetTensorB(gm_b); mm.SetBias(gm_bias); mm.IterateAll(gm_c); |