From e92dcc7d40a77e50ef412692c95d932a71e4c472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E7=A8=8B?= Date: Mon, 25 Aug 2025 10:48:01 +0800 Subject: [PATCH] bugfix for nz multicore tiling. --- .../matmul/tiling/matmul_tiling_algorithm.cpp | 4 ++- tests/tiling/test_matmul_api_tiling.cpp | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/impl/matmul/tiling/matmul_tiling_algorithm.cpp b/impl/matmul/tiling/matmul_tiling_algorithm.cpp index 14145e00..9bcfac18 100644 --- a/impl/matmul/tiling/matmul_tiling_algorithm.cpp +++ b/impl/matmul/tiling/matmul_tiling_algorithm.cpp @@ -3383,7 +3383,9 @@ void MatmulTilingAlgorithm::GetSingleShape(const CoreStatusPack &coreStatus, con int32_t bAlignSize = DATA_COPY_ALIGN_SIZE / DTYPE_BIT_TAB.at(tilingIns_->bType_.dataType) * BITS_PER_BYTE; auto multiCoreScenario = GetMultiCoreScenario(param); bool needAlign = multiCoreScenario == MultiCoreScenario::SPLIT_MN || - multiCoreScenario == MultiCoreScenario::SPLIT_SMALL_MN; + multiCoreScenario == MultiCoreScenario::SPLIT_SMALL_MN || + tilingIns_->aType_.type == CubeFormat::NZ || + tilingIns_->bType_.type == CubeFormat::NZ; bool needOutputAlign = NeedOutputAlign(singleCoreM, singleCoreN, singleCoreK); (void)AlignSingleShape(needAlign && (!tilingIns_->bType_.isTrans || needOutputAlign), param.n32 * C0_SIZE, coreStatus.nDim, bAlignSize, singleCoreN); diff --git a/tests/tiling/test_matmul_api_tiling.cpp b/tests/tiling/test_matmul_api_tiling.cpp index d3da1fcc..ee08bc04 100644 --- a/tests/tiling/test_matmul_api_tiling.cpp +++ b/tests/tiling/test_matmul_api_tiling.cpp @@ -24,6 +24,33 @@ protected: virtual void SetUp() {} void TearDown() {} }; + +TEST_F(TestMatmulAPITiling, TestMatmulApiTilngMultiCoreNZINOUT) +{ + optiling::TCubeTiling tilingData; + matmul_tiling::MultiCoreMatmulTiling tilingApi; + tilingApi.SetDim(10); + tilingApi.SetAType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::NZ, matmul_tiling::DataType::DT_FLOAT, true); + tilingApi.SetBType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::NZ, matmul_tiling::DataType::DT_FLOAT); + tilingApi.SetCType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::NZ, matmul_tiling::DataType::DT_FLOAT); + tilingApi.SetBiasType(matmul_tiling::TPosition::GM, matmul_tiling::CubeFormat::ND, matmul_tiling::DataType::DT_FLOAT16); + tilingApi.SetOrgShape(736, 7168, 4096); + tilingApi.SetShape(736, 7168, 4096); + tilingApi.EnableBias(true); + tilingApi.SetBufferSpace(-1, -1, -1); + + int64_t res = tilingApi.GetTiling(tilingData); + EXPECT_EQ(res, 0); + tilingApi.PrintTilingData(); + + int32_t shapeM = 1; + int32_t shapeN = 1; + int32_t shapeK = 1; + (void)tilingApi.GetSingleShape(shapeM, shapeN, shapeK); + bool isAlign = shapeN % 16 == 0 ? true : false; + EXPECT_EQ(isAlign, true); +} + TEST_F(TestMatmulAPITiling, TestMatmulApiTilngMultiCoreBTSCM) { optiling::TCubeTiling tilingData; -- Gitee