Skip to content

SetSplitK

功能说明

EnableMultiCoreSplitK接口功能与该接口相同,建议使用EnableMultiCoreSplitK

多核场景,通过该接口开启切K轴。不调用该接口的情况下,默认不切K轴。在GetTiling接口调用前使用。

函数原型

Text
void SetSplitK(bool flag)

参数说明

表1 参数说明

参数名输入/输出描述
flag输入是否开启切K轴。

true:开启切K轴

false:不开启切K轴

返回值说明

约束说明

  • 如果在算子中使用该接口,获取C矩阵结果时仅支持输出到Global Memory。
  • 如果在算子中使用该接口,需在Kernel侧代码中首次将C矩阵分片的结果写入Global Memory之前,先清零Global Memory,随后在获取C矩阵分片的结果时,再开启AtomicAdd累加。如果不预先清零Global Memory,可能会因为累加Global Memory中原始的无效数据而产生精度问题。

调用示例

Text
auto ascendcPlatform = platform_ascendc::PlatformAscendC(context->GetPlatformInfo())
    matmul_tiling::MultiCoreMatmulTiling tiling(ascendcPlatform);
tiling.SetDim(useCoreNums);
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(M, N, K);
tiling.SetOrgShape(M, N, K);
tiling.SetBias(true);
tiling.SetBufferSpace(-1, -1, -1);
tiling.SetSplitK(true);

optiling::TCubeTiling tilingData;
int ret = tiling.GetTiling(tilingData);

免责声明:本站内容由 asc-devkit 仓 master 分支自动编译生成,属于持续开发版本,可能存在缺陷,仅供预览与参考。如需稳定及商用资料,请查阅官方 昇腾社区