GetIBShareNormConfig
产品支持情况
|
产品 |
是否支持 |
|---|---|
|
Atlas 350 加速卡 |
√ |
|
|
√ |
|
|
√ |
|
|
x |
|
|
x |
|
|
x |
|
|
x |
功能说明
用于配置IBShare模板的参数,获取自定义IBShare模板。IBShare模板的介绍请参考表 模板特性。
函数原型
1
|
__aicore__ constexpr MatmulConfig GetIBShareNormConfig(const bool intrinsicsLimit = false, const bool batchLoop = false, const bool isVecND2NZ = false, const BatchMode bmmMode = BatchMode::BATCH_LESS_THAN_L1, const bool isDoubleCache = false, const bool enUnitFlag = true) |
参数说明
本接口的所有参数用于设置MatmulConfig结构体中的参数,其中互相对应的参数的功能作用相同。
|
参数名 |
输入/输出 |
描述 |
|---|---|---|
|
intrinsicsLimit |
输入 |
用于设置参数intrinsicsCheck。 当左矩阵或右矩阵在单核上内轴(即尾轴)大于等于65535(元素个数)时,是否使能循环执行数据从Global Memory到L1 Buffer的搬入。例如,左矩阵A[M, K],单核上的内轴数据singleCoreK大于65535,配置该参数为true后,API内部通过循环执行数据的搬入。参数取值如下:
对于Atlas 350 加速卡,MxMatmul场景不支持此参数。 |
|
batchLoop |
输入 |
用于设置参数isNBatch。 是否多Batch输入多Batch输出。仅对BatchMatmul有效,使能该参数后,仅支持Norm模板,且需调用IterateNBatch实现多Batch输入多Batch输出。参数取值如下:
|
|
isVecND2NZ |
输入 |
用于设置参数enVecND2NZ。 使能通过vector指令进行ND2NZ。使能时需要设置SetLocalWorkspace。参数取值如下:
针对 对于Atlas 350 加速卡,MxMatmul场景不支持此参数。 |
|
bmmMode |
输入 |
用于设置参数batchMode。该参数用于BatchMatmul场景,关于BatchMatmul的介绍请参考Batch Matmul基础功能。 BatchMatmul场景中Layout类型为NORMAL时,设置BatchMatmul输入A/B矩阵的多batch数据总和与L1 Buffer的大小关系。参数取值如下:
|
|
isDoubleCache |
输入 |
用于设置参数enableDoubleCache。 开启IBShare模板后,在L1 Buffer上是否同时缓存两块数据。参数取值如下:
注意:该参数取值为true时,需要控制基本块大小,防止两块数据的缓存超过L1 Buffer大小限制。 包括MxMatmul场景,Atlas 350 加速卡不支持此参数。 |
|
enUnitFlag |
输入 |
用于设置参数enUnitFlag。 使能UnitFlag功能,使计算与搬运流水并行,提高性能。Norm, IBShare下默认使能,MDL下默认不使能。参数取值如下:
注意:对于Atlas 350 加速卡,MxMatmul场景,仅在NORM/MDL模板、A和scaleA不转置、 B和scaleB转置、C为ND格式,输出到GM场景下,使能UnitFlag功能有性能收益。 |
返回值说明
约束说明
IBShare模板当前仅适用于MIX场景,不支持纯CUBE场景。
调用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 配置IBShare模板的参数,获取自定义IBShare模板。 constexpr MatmulConfig MM_CFG = GetIBShareNormConfig( /* intrinsicsLimit */ false, /* batchLoop */ false, /* isVecND2NZ */ false, /* bmmMode */ BatchMode::BATCH_LESS_THAN_L1, /* isMsgReuse */ false, /* enableUBReuse */ true ); // 常规Matmul计算,最后输出使用自定义IBShare模板的计算结果 typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, half> aType; typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, half, true/*开启矩阵转置*/, LayoutMode::NONE/*不使能BatchMatmul*/, true/*使能IBShare*/> bType; typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, float> cType; typedef AscendC::MatmulType<AscendC::TPosition::GM, CubeFormat::ND, float> biasType; 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); if (tiling.isBias) { mm.SetBias(gmBias); } mm.IterateAll(gm_c); mm.End(); |