Tile distribution changes to make single warp read tile_window and perform GEMM independently in the 2-warp-thread-block

This commit is contained in:
Sudhir Kylasa
2025-04-09 04:24:00 -04:00
parent 2548780704
commit b0f3803bf3
9 changed files with 527 additions and 94 deletions

View File

@@ -263,9 +263,10 @@ int run_gemm_example_with_layouts(int argc,
// set 1 column in A and 1 Row in B to perform outer product.
// and test the results.
//const ck_tile::index_t K_len = a_m_k.get_length(1);
const ck_tile::index_t M_len = a_m_k.get_length(0);
const ck_tile::index_t N_len = b_k_n.get_length(1);
//const ck_tile::index_t M_len = a_m_k.get_length(0);
//const ck_tile::index_t N_len = b_k_n.get_length(1);
/*
// Fill 0th column in A
ck_tile::half_t dd = 1;
for(int i = 0; i < M_len; i++)
@@ -273,11 +274,7 @@ int run_gemm_example_with_layouts(int argc,
int j = 0;
{
a_m_k(i, j) = dd;
}
int k = 8;
{
a_m_k(i, k) = dd++;
}
}
}
// Fill 0th row in B
@@ -289,15 +286,7 @@ int run_gemm_example_with_layouts(int argc,
b_k_n(i, j) = dd;
}
}
i = 8;
{
for(int j=0; j < N_len; j++)
{
b_k_n(i, j) = dd;
}
}
*/
ck_tile::DeviceMem a_m_k_dev_buf(a_m_k.get_element_space_size_in_bytes());
ck_tile::DeviceMem b_k_n_dev_buf(b_k_n.get_element_space_size_in_bytes());
@@ -441,5 +430,17 @@ int run_gemm_example_with_layouts(int argc,
std::cout << "The GPU verification result is: " << (pass ? "correct" : "fail") << std::endl;
}
const ck_tile::index_t M_len = c_m_n_dev_result.get_length(0);
const ck_tile::index_t N_len = c_m_n_dev_result.get_length(1);
for (int i = 0; i < M_len; i++)
{
for (int j = 0; j < N_len; j++)
{
std::cout << std::setw(6) << ck_tile::type_convert<float>(c_m_n_dev_result(i, j));
}
std::cout<<std::endl;
}
return pass;
}

View File

@@ -75,7 +75,7 @@ float gemm_calc(const ck_tile::GemmHostArgs& args, const ck_tile::stream_config&
tail_number_v>;
using GemmPipeline = GEMM_PIPELINE<UniversalGemmProblem>;
/*
using GemmEpilogue = ck_tile::DefaultGemm2DEpilogue<
ck_tile::DefaultGemm2DEpilogueProblem<AccDataType,
CDataType,
@@ -86,9 +86,9 @@ float gemm_calc(const ck_tile::GemmHostArgs& args, const ck_tile::stream_config&
GemmConfig::N_Warp_Tile,
GemmConfig::K_Warp_Tile,
UniversalGemmProblem::TransposeC>>;
*/
/*
using GemmEpilogue = ck_tile::CShuffleEpilogue<
ck_tile::CShuffleEpilogueProblem<ADataType,
BDataType,
@@ -104,7 +104,7 @@ float gemm_calc(const ck_tile::GemmHostArgs& args, const ck_tile::stream_config&
GemmConfig::N_Warp_Tile,
GemmConfig::K_Warp_Tile,
UniversalGemmProblem::TransposeC>>;
*/
using Kernel = ck_tile::GemmKernel<TilePartitioner, GemmPipeline, GemmEpilogue>;
auto kargs = Kernel::MakeKernelArgs(args);