Ascend C提供一组Matmul Tiling API,方便用户获取MatMul kernel计算时所需的Tiling参数。您只需要传入A/B/C矩阵等信息,调用API接口,即可获取到Init中TCubeTiling结构体中的相关参数。
Matmul Tiling API分为单核Tiling接口和多核Tiling接口。获取Tiling参数的流程如下:
使用单核Tiling接口和多核Tiling接口获取Tiling参数的样例如下:
MatmulApiTiling tiling; tiling.SetAType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetBType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetCType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetBiasType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetShape(1024, 1024, 1024); tiling.SetOrgShape(1024, 1024, 1024); tiling.SetBias(true); tiling.SetBufferSpace(512 * 1024, 128 * 1024, 192 * 1024); optiling::TCubeTiling tilingData; int ret = tiling.GetTiling(tilingData); // if ret = -1, gen tiling failed
MultiCoreMatmulTiling tiling; tiling.SetDim(1); tiling.SetAType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetBType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); tiling.SetCType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetBiasType(TPosition::GM, CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT); tiling.SetShape(1024, 1024, 1024); tiling.SetSingleShape(1024, 1024, 1024); tiling.SetBias(true); tiling.SetBufferSpace(512 * 1024, 128 * 1024, 192 * 1024); optiling::TCubeTiling tilingData; int ret = tiling.GetTiling(tilingData); // if ret = -1, gen tiling failed