SetMatmulConfigParams
功能说明
在计算Tiling时,用于自定义设置表1中的MatmulConfig参数。本接口中配置的参数对应的功能在Tiling与Kernel中需要保持一致,所以本接口中的参数取值,需要与Kernel侧对应的MatmulConfig参数值保持一致,详细MatmulConfig参数请见表2。
函数原型
void SetMatmulConfigParams(int32_t mmConfigTypeIn = 1, bool enableL1CacheUBIn = false, ScheduleType scheduleTypeIn = ScheduleType::INNER_PRODUCT, MatrixTraverse traverseIn = MatrixTraverse::NOSET, bool enVecND2NZIn = false)
void SetMatmulConfigParams(const MatmulConfigParams& configParams)
参数说明
表 1 参数说明
设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。
|
||
配置是否使能L1缓存UB计算块;参考使能场景:MTE3和MTE2流水串行较多的场景。
|
||
|
||
Matmul做矩阵运算的循环迭代顺序,即一次迭代计算出[baseM, baseN]大小的C矩阵分片后,自动偏移到下一次迭代输出的C矩阵位置的偏移顺序。参数取值如下: enum class MatrixTraverse{
NOSET = 0, // 当前无效
FIRSTM, // 先往M轴方向偏移再往N轴方向偏移
FIRSTN, // 先往N轴方向偏移再往M轴方向偏移
};
|
||
config相关参数,类型为MatmulConfigParams,结构体具体定义如下。其中的参数说明请参考表2。 struct MatmulConfigParams
{
int32_t mmConfigType;
bool enableL1CacheUB;
ScheduleType scheduleType;
MatrixTraverse traverse;
bool enVecND2NZ;
MatmulConfigParams(int32_t mmConfigTypeIn = 1, bool enableL1CacheUBIn = false,
ScheduleType scheduleTypeIn = ScheduleType::INNER_PRODUCT, MatrixTraverse traverseIn = MatrixTraverse::NOSET,
bool enVecND2NZIn = false) {
mmConfigType = mmConfigTypeIn;
enableL1CacheUB = enableL1CacheUBIn;
scheduleType = scheduleTypeIn;
traverse = traverseIn;
enVecND2NZ = enVecND2NZIn;
}
};
|
表 2 MatmulConfigParams结构体内参数说明
设置Matmul的模板类型,需要与Matmul对象创建的模板一致,当前只支持配置为0或1。
|
|
配置是否使能L1缓存UB计算块;参考使能场景:MTE3和MTE2流水串行较多的场景。
|
|
|
|
Matmul做矩阵运算的循环迭代顺序,即一次迭代计算出[baseM, baseN]大小的C矩阵分片后,自动偏移到下一次迭代输出的C矩阵位置的偏移顺序。参数取值如下: enum class MatrixTraverse{
NOSET = 0, // 当前无效
FIRSTM, // 先往M轴方向偏移再往N轴方向偏移
FIRSTN, // 先往N轴方向偏移再往M轴方向偏移
};
|
|
返回值说明
无
约束说明
- 本接口必须在GetTiling接口前调用。
- 若Matmul对象使用NBuffer33模板策略,即MatmulPolicy为NBuffer33MatmulPolicy,则在调用GetTiling接口生成Tiling参数前,必须通过本接口将scheduleTypeIn参数设置为ScheduleType::N_BUFFER_33,以启用NBuffer33模板策略的Tiling生成逻辑。
调用示例
auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo());
matmul_tiling::MatmulApiTiling tiling(ascendcPlatform);
tiling.SetAType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16);
tiling.SetBType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16);
tiling.SetCType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT);
tiling.SetBiasType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT);
tiling.SetShape(1024, 1024, 1024);
tiling.SetOrgShape(1024, 1024, 1024);
tiling.SetBias(true);
tiling.SetBufferSpace(-1, -1, -1);
tiling.SetMatmulConfigParams(0); // 额外设置
// tiling.SetMatmulConfigParams({1, false, ScheduleType::OUTER_PRODUCT, MatrixTraverse::FIRSTM});
optiling::TCubeTiling tilingData;
int ret = tiling.GetTiling(tilingData);