Unverified Commit bf420976 authored by Illia Silin's avatar Illia Silin Committed by GitHub
Browse files

Enable logging in CK with environment variable. (#1278)



* enable logging using environment variable

* update ck.hpp header

* fix typo

* fix clang format

* Update include/ck/utility/env.hpp
Co-authored-by: default avatarBartłomiej Kocot <barkocot@amd.com>

---------
Co-authored-by: default avatarBartłomiej Kocot <barkocot@amd.com>
parent 851c3ed1
...@@ -620,11 +620,13 @@ struct DeviceGroupedGemmMultipleDXdlCShuffleTileLoop ...@@ -620,11 +620,13 @@ struct DeviceGroupedGemmMultipleDXdlCShuffleTileLoop
GridwiseGemm::template CheckTensorTransfersValidity<ALayout, BLayout, ELayout>( GridwiseGemm::template CheckTensorTransfersValidity<ALayout, BLayout, ELayout>(
M, N, K))) M, N, K)))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "The provided GEMM problem size (M,N,K) [" << M << "," << N << "," << K {
<< "] are not supported by current template parameters!" std::cout << "The provided GEMM problem size (M,N,K) [" << M << "," << N << ","
<< " In " << __FILE__ << ":" << __LINE__ << ", in function: " << __func__; << K << "] are not supported by current template parameters!"
#endif << " In " << __FILE__ << ":" << __LINE__
<< ", in function: " << __func__;
}
supported = false; supported = false;
} }
} }
......
...@@ -514,28 +514,29 @@ struct DeviceGroupedGemm_Xdl : public DeviceGroupedGemm<ALayout, ...@@ -514,28 +514,29 @@ struct DeviceGroupedGemm_Xdl : public DeviceGroupedGemm<ALayout,
for(std::size_t i = 0; i < arg.gemm_desc_kernel_arg_.size(); i++) for(std::size_t i = 0; i < arg.gemm_desc_kernel_arg_.size(); i++)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "group: " << i << " arg.a_grid_desc_ak0_m_ak1_{" {
<< arg.gemm_desc_kernel_arg_[i].a_grid_desc_ak0_m_ak1_.GetLength(I0) std::cout << "group: " << i << " arg.a_grid_desc_ak0_m_ak1_{"
<< ", " << arg.gemm_desc_kernel_arg_[i].a_grid_desc_ak0_m_ak1_.GetLength(I0)
<< arg.gemm_desc_kernel_arg_[i].a_grid_desc_ak0_m_ak1_.GetLength(I1) << ", "
<< ", " << arg.gemm_desc_kernel_arg_[i].a_grid_desc_ak0_m_ak1_.GetLength(I1)
<< arg.gemm_desc_kernel_arg_[i].a_grid_desc_ak0_m_ak1_.GetLength(I2) << ", "
<< "}"; << arg.gemm_desc_kernel_arg_[i].a_grid_desc_ak0_m_ak1_.GetLength(I2)
<< "}";
std::cout << ", arg.b_grid_desc_bk0_n_bk1_{"
<< arg.gemm_desc_kernel_arg_[i].b_grid_desc_bk0_n_bk1_.GetLength(I0) std::cout << ", arg.b_grid_desc_bk0_n_bk1_{"
<< ", " << arg.gemm_desc_kernel_arg_[i].b_grid_desc_bk0_n_bk1_.GetLength(I0)
<< arg.gemm_desc_kernel_arg_[i].b_grid_desc_bk0_n_bk1_.GetLength(I1) << ", "
<< ", " << arg.gemm_desc_kernel_arg_[i].b_grid_desc_bk0_n_bk1_.GetLength(I1)
<< arg.gemm_desc_kernel_arg_[i].b_grid_desc_bk0_n_bk1_.GetLength(I2) << ", "
<< "}"; << arg.gemm_desc_kernel_arg_[i].b_grid_desc_bk0_n_bk1_.GetLength(I2)
<< "}";
std::cout << ", arg.e_grid_desc_m_n_{ "
<< arg.gemm_desc_kernel_arg_[i].e_grid_desc_m_n_.GetLength(I0) << ", " std::cout << ", arg.e_grid_desc_m_n_{ "
<< arg.gemm_desc_kernel_arg_[i].e_grid_desc_m_n_.GetLength(I1) << "}" << arg.gemm_desc_kernel_arg_[i].e_grid_desc_m_n_.GetLength(I0) << ", "
<< std::endl; << arg.gemm_desc_kernel_arg_[i].e_grid_desc_m_n_.GetLength(I1) << "}"
#endif << std::endl;
}
if(!GridwiseGemm::CheckValidity(arg.gemm_desc_kernel_arg_[i].a_grid_desc_m_k_, if(!GridwiseGemm::CheckValidity(arg.gemm_desc_kernel_arg_[i].a_grid_desc_m_k_,
arg.gemm_desc_kernel_arg_[i].b_grid_desc_n_k_, arg.gemm_desc_kernel_arg_[i].b_grid_desc_n_k_,
......
...@@ -529,11 +529,12 @@ struct DeviceGroupedGemmXdlSplitKCShuffle : public DeviceGroupedGemmSplitK<ALayo ...@@ -529,11 +529,12 @@ struct DeviceGroupedGemmXdlSplitKCShuffle : public DeviceGroupedGemmSplitK<ALayo
if((ck::type_convert<ck::index_t>(arg.gemm_kernel_args_.size()) + if((ck::type_convert<ck::index_t>(arg.gemm_kernel_args_.size()) +
arg.skipped_group_count_) != arg.group_count_) arg.skipped_group_count_) != arg.group_count_)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "The group count is not equal to sum of skipped groups " {
"and kernel args size!" std::cout << "The group count is not equal to sum of skipped groups "
<< std::endl; "and kernel args size!"
#endif // DEBUG_LOG << std::endl;
}
return false; return false;
} }
...@@ -544,11 +545,12 @@ struct DeviceGroupedGemmXdlSplitKCShuffle : public DeviceGroupedGemmSplitK<ALayo ...@@ -544,11 +545,12 @@ struct DeviceGroupedGemmXdlSplitKCShuffle : public DeviceGroupedGemmSplitK<ALayo
bool group_arg_valid = GridwiseGemm::CheckValidity(a); bool group_arg_valid = GridwiseGemm::CheckValidity(a);
if(not group_arg_valid) if(not group_arg_valid)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "[" << __func__ << "] group id: " << i {
<< " has invalid GridwiseGemm settings!" << std::endl; std::cout << "[" << __func__ << "] group id: " << i
a.Print(); << " has invalid GridwiseGemm settings!" << std::endl;
#endif // DEBUG_LOG a.Print();
}
} }
supported = supported && group_arg_valid; supported = supported && group_arg_valid;
} }
......
...@@ -935,12 +935,12 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -935,12 +935,12 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(!(karg.M % MPerBlock == 0)) if(!(karg.M % MPerBlock == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M value is not a multiple of MPerBlock! M: " << karg.M << " " {
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ std::cout << "Arg M value is not a multiple of MPerBlock! M: " << karg.M << " "
<< std::endl; << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -952,12 +952,12 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -952,12 +952,12 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(!(karg.N % NPerBlock == 0)) if(!(karg.N % NPerBlock == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N value is not a multiple of NPerBlock! N: " << karg.N << " " {
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ std::cout << "Arg N value is not a multiple of NPerBlock! N: " << karg.N << " "
<< std::endl; << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -971,12 +971,12 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -971,12 +971,12 @@ struct GridwiseGemm_xdl_cshuffle_v3
auto K_t = karg.KBatch * KPerBlock; auto K_t = karg.KBatch * KPerBlock;
if(!(karg.K % K_t == 0)) if(!(karg.K % K_t == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K value is not a multiple of K_Batch * K0PerBlock * K1! K: " {
<< karg.K << " " << __FILE__ << ":" << __LINE__ std::cout << "Arg K value is not a multiple of K_Batch * K0PerBlock * K1! K: "
<< ", in function: " << __func__ << std::endl; << karg.K << " " << __FILE__ << ":" << __LINE__
<< ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -995,13 +995,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -995,13 +995,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.K % ABlockTransferSrcScalarPerVector != 0) if(karg.K % ABlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K (" << karg.K {
<< ") value is not a multiple of ABlockTransferSrcScalarPerVector (" std::cout << "Arg K (" << karg.K
<< ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of ABlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1009,13 +1009,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1009,13 +1009,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.M % ABlockTransferSrcScalarPerVector != 0) if(karg.M % ABlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M (" << karg.M {
<< ") value is not a multiple of ABlockTransferSrcScalarPerVector (" std::cout << "Arg M (" << karg.M
<< ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of ABlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1024,13 +1024,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1024,13 +1024,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.N % BBlockTransferSrcScalarPerVector != 0) if(karg.N % BBlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N (" << karg.N {
<< ") value is not a multiple of BBlockTransferSrcScalarPerVector (" std::cout << "Arg N (" << karg.N
<< BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of BBlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1038,13 +1038,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1038,13 +1038,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.K % BBlockTransferSrcScalarPerVector != 0) if(karg.K % BBlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K (" << karg.K {
<< ") value is not a multiple of BBlockTransferSrcScalarPerVector (" std::cout << "Arg K (" << karg.K
<< BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of BBlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1053,14 +1053,15 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1053,14 +1053,15 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.N % CShuffleBlockTransferScalarPerVector_NPerBlock != 0) if(karg.N % CShuffleBlockTransferScalarPerVector_NPerBlock != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N (" << karg.N {
<< ") value is not a multiple of " std::cout << "Arg N (" << karg.N
"CShuffleBlockTransferScalarPerVector_NPerBlock (" << ") value is not a multiple of "
<< CShuffleBlockTransferScalarPerVector_NPerBlock << " )! " << __FILE__ "CShuffleBlockTransferScalarPerVector_NPerBlock ("
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl; << CShuffleBlockTransferScalarPerVector_NPerBlock << " )! "
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__
#endif // DEBUG_LOG << std::endl;
}
return false; return false;
} }
} }
...@@ -1068,25 +1069,26 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1068,25 +1069,26 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.M % CShuffleBlockTransferScalarPerVector_NPerBlock != 0) if(karg.M % CShuffleBlockTransferScalarPerVector_NPerBlock != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M (" << karg.M {
<< ") value is not a multiple of " std::cout << "Arg M (" << karg.M
"CShuffleBlockTransferScalarPerVector_NPerBlock (" << ") value is not a multiple of "
<< CShuffleBlockTransferScalarPerVector_NPerBlock << " )! " << __FILE__ "CShuffleBlockTransferScalarPerVector_NPerBlock ("
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl; << CShuffleBlockTransferScalarPerVector_NPerBlock << " )! "
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__
#endif // DEBUG_LOG << std::endl;
}
return false; return false;
} }
} }
if constexpr(is_same<remove_cvref_t<CDataType>, bhalf_t>::value) if constexpr(is_same<remove_cvref_t<CDataType>, bhalf_t>::value)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << " KBatch: " << karg.KBatch << " > 1 is not support yet" << __FILE__ << ":" {
<< __LINE__ << ", in function: " << __func__ << std::endl; std::cout << " KBatch: " << karg.KBatch << " > 1 is not support yet" << __FILE__
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
if(karg.KBatch > 1) if(karg.KBatch > 1)
{ {
return false; return false;
......
...@@ -1113,12 +1113,12 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1113,12 +1113,12 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(!(karg.M % MPerBlock == 0)) if(!(karg.M % MPerBlock == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M value is not a multiple of MPerBlock! M: " << karg.M << " " {
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ std::cout << "Arg M value is not a multiple of MPerBlock! M: " << karg.M << " "
<< std::endl; << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1130,12 +1130,12 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1130,12 +1130,12 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(!(karg.N % NPerBlock == 0)) if(!(karg.N % NPerBlock == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N value is not a multiple of NPerBlock! N: " << karg.N << " " {
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ std::cout << "Arg N value is not a multiple of NPerBlock! N: " << karg.N << " "
<< std::endl; << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1149,12 +1149,12 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1149,12 +1149,12 @@ struct GridwiseGemm_xdl_cshuffle_v3
auto K_t = karg.KBatch * KPerBlock; auto K_t = karg.KBatch * KPerBlock;
if(!(karg.K % K_t == 0)) if(!(karg.K % K_t == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K value is not a multiple of K_Batch * K0PerBlock * K1! K: " {
<< karg.K << " " << __FILE__ << ":" << __LINE__ std::cout << "Arg K value is not a multiple of K_Batch * K0PerBlock * K1! K: "
<< ", in function: " << __func__ << std::endl; << karg.K << " " << __FILE__ << ":" << __LINE__
<< ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1173,13 +1173,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1173,13 +1173,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.K % ABlockTransferSrcScalarPerVector != 0) if(karg.K % ABlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K (" << karg.K {
<< ") value is not a multiple of ABlockTransferSrcScalarPerVector (" std::cout << "Arg K (" << karg.K
<< ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of ABlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1187,13 +1187,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1187,13 +1187,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.M % ABlockTransferSrcScalarPerVector != 0) if(karg.M % ABlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M (" << karg.M {
<< ") value is not a multiple of ABlockTransferSrcScalarPerVector (" std::cout << "Arg M (" << karg.M
<< ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of ABlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1202,13 +1202,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1202,13 +1202,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.N % BBlockTransferSrcScalarPerVector != 0) if(karg.N % BBlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N (" << karg.N {
<< ") value is not a multiple of BBlockTransferSrcScalarPerVector (" std::cout << "Arg N (" << karg.N
<< BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of BBlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1216,13 +1216,13 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1216,13 +1216,13 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.K % BBlockTransferSrcScalarPerVector != 0) if(karg.K % BBlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K (" << karg.K {
<< ") value is not a multiple of BBlockTransferSrcScalarPerVector (" std::cout << "Arg K (" << karg.K
<< BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of BBlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -1231,14 +1231,15 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1231,14 +1231,15 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.N % CShuffleBlockTransferScalarPerVector_NPerBlock != 0) if(karg.N % CShuffleBlockTransferScalarPerVector_NPerBlock != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N (" << karg.N {
<< ") value is not a multiple of " std::cout << "Arg N (" << karg.N
"CShuffleBlockTransferScalarPerVector_NPerBlock (" << ") value is not a multiple of "
<< CShuffleBlockTransferScalarPerVector_NPerBlock << " )! " << __FILE__ "CShuffleBlockTransferScalarPerVector_NPerBlock ("
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl; << CShuffleBlockTransferScalarPerVector_NPerBlock << " )! "
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__
#endif // DEBUG_LOG << std::endl;
}
return false; return false;
} }
} }
...@@ -1246,14 +1247,15 @@ struct GridwiseGemm_xdl_cshuffle_v3 ...@@ -1246,14 +1247,15 @@ struct GridwiseGemm_xdl_cshuffle_v3
{ {
if(karg.M % CShuffleBlockTransferScalarPerVector_NPerBlock != 0) if(karg.M % CShuffleBlockTransferScalarPerVector_NPerBlock != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M (" << karg.M {
<< ") value is not a multiple of " std::cout << "Arg M (" << karg.M
"CShuffleBlockTransferScalarPerVector_NPerBlock (" << ") value is not a multiple of "
<< CShuffleBlockTransferScalarPerVector_NPerBlock << " )! " << __FILE__ "CShuffleBlockTransferScalarPerVector_NPerBlock ("
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl; << CShuffleBlockTransferScalarPerVector_NPerBlock << " )! "
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__
#endif // DEBUG_LOG << std::endl;
}
return false; return false;
} }
} }
......
...@@ -446,12 +446,12 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -446,12 +446,12 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(!(karg.M % MPerBlock == 0)) if(!(karg.M % MPerBlock == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M value is not a multiple of MPerBlock! M: " << karg.M << " " {
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ std::cout << "Arg M value is not a multiple of MPerBlock! M: " << karg.M << " "
<< std::endl; << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -463,12 +463,12 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -463,12 +463,12 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(!(karg.N % NPerBlock == 0)) if(!(karg.N % NPerBlock == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N value is not a multiple of NPerBlock! N: " << karg.N << " " {
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ std::cout << "Arg N value is not a multiple of NPerBlock! N: " << karg.N << " "
<< std::endl; << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -482,12 +482,12 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -482,12 +482,12 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
auto K_t = karg.k_batch * K0PerBlock * K1; auto K_t = karg.k_batch * K0PerBlock * K1;
if(!(karg.K % K_t == 0)) if(!(karg.K % K_t == 0))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K value is not a multiple of K_Batch * K0PerBlock * K1! K: " {
<< karg.K << " " << __FILE__ << ":" << __LINE__ std::cout << "Arg K value is not a multiple of K_Batch * K0PerBlock * K1! K: "
<< ", in function: " << __func__ << std::endl; << karg.K << " " << __FILE__ << ":" << __LINE__
<< ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -496,13 +496,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -496,13 +496,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(karg.K % ABlockTransferSrcScalarPerVector != 0) if(karg.K % ABlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K (" << karg.K {
<< ") value is not a multiple of ABlockTransferSrcScalarPerVector (" std::cout << "Arg K (" << karg.K
<< ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of ABlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -510,13 +510,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -510,13 +510,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(karg.M % ABlockTransferSrcScalarPerVector != 0) if(karg.M % ABlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M (" << karg.M {
<< ") value is not a multiple of ABlockTransferSrcScalarPerVector (" std::cout << "Arg M (" << karg.M
<< ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of ABlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << ABlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -525,13 +525,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -525,13 +525,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(karg.N % BBlockTransferSrcScalarPerVector != 0) if(karg.N % BBlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N (" << karg.N {
<< ") value is not a multiple of BBlockTransferSrcScalarPerVector (" std::cout << "Arg N (" << karg.N
<< BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of BBlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -539,13 +539,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -539,13 +539,13 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(karg.K % BBlockTransferSrcScalarPerVector != 0) if(karg.K % BBlockTransferSrcScalarPerVector != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg K (" << karg.K {
<< ") value is not a multiple of BBlockTransferSrcScalarPerVector (" std::cout << "Arg K (" << karg.K
<< BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":" << ") value is not a multiple of BBlockTransferSrcScalarPerVector ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << BBlockTransferSrcScalarPerVector << " )! " << __FILE__ << ":"
<< __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -554,14 +554,14 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -554,14 +554,14 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(karg.N % CBlockTransferScalarPerVector_NWaveNPerXDL != 0) if(karg.N % CBlockTransferScalarPerVector_NWaveNPerXDL != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg N (" << karg.N {
<< ") value is not a multiple of " std::cout << "Arg N (" << karg.N
"CBlockTransferScalarPerVector_NWaveNPerXDL (" << ") value is not a multiple of "
<< CBlockTransferScalarPerVector_NWaveNPerXDL << " )! " << __FILE__ << ":" "CBlockTransferScalarPerVector_NWaveNPerXDL ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << CBlockTransferScalarPerVector_NWaveNPerXDL << " )! " << __FILE__
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -569,14 +569,14 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -569,14 +569,14 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
{ {
if(karg.M % CBlockTransferScalarPerVector_NWaveNPerXDL != 0) if(karg.M % CBlockTransferScalarPerVector_NWaveNPerXDL != 0)
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "Arg M (" << karg.M {
<< ") value is not a multiple of " std::cout << "Arg M (" << karg.M
"CBlockTransferScalarPerVector_NWaveNPerXDL (" << ") value is not a multiple of "
<< CBlockTransferScalarPerVector_NWaveNPerXDL << " )! " << __FILE__ << ":" "CBlockTransferScalarPerVector_NWaveNPerXDL ("
<< __LINE__ << ", in function: " << __func__ << std::endl; << CBlockTransferScalarPerVector_NWaveNPerXDL << " )! " << __FILE__
<< ":" << __LINE__ << ", in function: " << __func__ << std::endl;
#endif // DEBUG_LOG }
return false; return false;
} }
} }
...@@ -584,12 +584,14 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2 ...@@ -584,12 +584,14 @@ struct GridwiseGemm_bk0mk1_bk0nk1_mn_xdlops_v2r4r2
const auto num_k_loop = karg.K0Padded / K0PerBlock; const auto num_k_loop = karg.K0Padded / K0PerBlock;
if(!GridwiseGemmPipe::IsSupported(num_k_loop)) if(!GridwiseGemmPipe::IsSupported(num_k_loop))
{ {
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "The number of k loops (" << num_k_loop {
<< ") value is not supported by GridwiseGemm Pipeline." std::cout << "The number of k loops (" << num_k_loop
<< " K0Padded: " << karg.K0Padded << ", K0PerBlock: " << K0PerBlock << " " << ") value is not supported by GridwiseGemm Pipeline."
<< __FILE__ << ":" << __LINE__ << ", in function: " << __func__ << std::endl; << " K0Padded: " << karg.K0Padded << ", K0PerBlock: " << K0PerBlock << " "
#endif // DEBUG_LOG << __FILE__ << ":" << __LINE__ << ", in function: " << __func__
<< std::endl;
}
return false; return false;
} }
......
// SPDX-License-Identifier: MIT
// Copyright (c) 2024, Advanced Micro Devices, Inc. All rights reserved.
#pragma once
#include <cstdlib>
#include <cstring>
#include <string>
#include <string_view>
namespace ck {
namespace internal {
template <typename T>
struct ParseEnvVal
{
};
template <>
struct ParseEnvVal<bool>
{
static bool parse_env_var_value(const char* vp)
{
std::string value_env_str{vp};
for(auto& c : value_env_str)
{
if(std::isalpha(c) != 0)
{
c = std::tolower(static_cast<unsigned char>(c));
}
}
if(value_env_str == "disable" || value_env_str == "disabled" || value_env_str == "0" ||
value_env_str == "no" || value_env_str == "off" || value_env_str == "false")
{
return false;
}
else if(value_env_str == "enable" || value_env_str == "enabled" || value_env_str == "1" ||
value_env_str == "yes" || value_env_str == "on" || value_env_str == "true")
{
return true;
}
else
{
throw std::runtime_error("Invalid value for env variable");
}
return false; // shouldn't reach here
}
};
// Supports hexadecimals (with leading "0x"), octals (if prefix is "0") and decimals (default).
// Returns 0 if environment variable is in wrong format (strtoull fails to parse the string).
template <>
struct ParseEnvVal<uint64_t>
{
static uint64_t parse_env_var_value(const char* vp) { return std::strtoull(vp, nullptr, 0); }
};
template <>
struct ParseEnvVal<std::string>
{
static std::string parse_env_var_value(const char* vp) { return std::string{vp}; }
};
template <typename T>
struct EnvVar
{
private:
T value{};
bool is_unset = true;
public:
const T& GetValue() const { return value; }
bool IsUnset() const { return is_unset; }
void Unset() { is_unset = true; }
void UpdateValue(const T& val)
{
is_unset = false;
value = val;
}
explicit EnvVar(const char* const name, const T& def_val)
{
// NOLINTNEXTLINE (concurrency-mt-unsafe)
const char* vp = std::getenv(name);
if(vp != nullptr) // a value was provided
{
is_unset = false;
value = ParseEnvVal<T>::parse_env_var_value(vp);
}
else // no value provided, use default value
{
value = def_val;
}
}
};
} // end namespace internal
// static inside function hides the variable and provides
// thread-safety/locking
// Used in global namespace
#define CK_DECLARE_ENV_VAR(name, type, default_val) \
namespace ck::env { \
struct name \
{ \
static_assert(std::is_same_v<name, ::ck::env::name>, \
"CK_DECLARE_ENV* must be used in the global namespace"); \
using value_type = type; \
static ck::internal::EnvVar<type>& Ref() \
{ \
static ck::internal::EnvVar<type> var{#name, default_val}; \
return var; \
} \
}; \
}
#define CK_DECLARE_ENV_VAR_BOOL(name) CK_DECLARE_ENV_VAR(name, bool, false)
#define CK_DECLARE_ENV_VAR_UINT64(name) CK_DECLARE_ENV_VAR(name, uint64_t, 0)
#define CK_DECLARE_ENV_VAR_STR(name) CK_DECLARE_ENV_VAR(name, std::string, "")
#define ENV(name) \
ck::env::name {}
template <class EnvVar>
inline const std::string& EnvGetString(EnvVar)
{
static_assert(std::is_same_v<typename EnvVar::value_type, std::string>);
return EnvVar::Ref().GetValue();
}
template <class EnvVar>
inline bool EnvIsEnabled(EnvVar)
{
static_assert(std::is_same_v<typename EnvVar::value_type, bool>);
return !EnvVar::Ref().IsUnset() && EnvVar::Ref().GetValue();
}
template <class EnvVar>
inline bool EnvIsDisabled(EnvVar)
{
static_assert(std::is_same_v<typename EnvVar::value_type, bool>);
return !EnvVar::Ref().IsUnset() && !EnvVar::Ref().GetValue();
}
template <class EnvVar>
inline uint64_t EnvValue(EnvVar)
{
static_assert(std::is_same_v<typename EnvVar::value_type, uint64_t>);
return EnvVar::Ref().GetValue();
}
template <class EnvVar>
inline bool EnvIsUnset(EnvVar)
{
return EnvVar::Ref().IsUnset();
}
template <class EnvVar>
void EnvUnset(EnvVar)
{
EnvVar::Ref().Unset();
}
/// updates the cached value of an environment variable
template <typename EnvVar, typename ValueType>
void UpdateEnvVar(EnvVar, const ValueType& val)
{
static_assert(std::is_same_v<typename EnvVar::value_type, ValueType>);
EnvVar::Ref().UpdateValue(val);
}
template <typename EnvVar>
void UpdateEnvVar(EnvVar, const std::string_view& val)
{
EnvVar::Ref().UpdateValue(
ck::internal::ParseEnvVal<typename EnvVar::value_type>::parse_env_var_value(val.data()));
}
} // namespace ck
...@@ -88,11 +88,12 @@ bool profile_grouped_gemm_fixed_nk_impl(int do_verification, ...@@ -88,11 +88,12 @@ bool profile_grouped_gemm_fixed_nk_impl(int do_verification,
c_m_n_host_results.push_back( c_m_n_host_results.push_back(
Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{}))); Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{})));
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n[" << i {
<< "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n["
<< "]:" << c_m_n_device_results[i].mDesc << std::endl; << i << "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i
#endif // DEBUG_LOG << "]:" << c_m_n_device_results[i].mDesc << std::endl;
}
std::size_t num_thread = 1; std::size_t num_thread = 1;
switch(init_method) switch(init_method)
{ {
......
...@@ -87,11 +87,12 @@ bool profile_grouped_gemm_impl(int do_verification, ...@@ -87,11 +87,12 @@ bool profile_grouped_gemm_impl(int do_verification,
c_m_n_host_results.push_back( c_m_n_host_results.push_back(
Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{}))); Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{})));
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n[" << i {
<< "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n["
<< "]:" << c_m_n_device_results[i].mDesc << std::endl; << i << "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i
#endif // DEBUG_LOG << "]:" << c_m_n_device_results[i].mDesc << std::endl;
}
std::size_t num_thread = 1; std::size_t num_thread = 1;
switch(init_method) switch(init_method)
{ {
......
...@@ -82,11 +82,12 @@ bool profile_grouped_gemm_tile_loop_impl(int do_verification, ...@@ -82,11 +82,12 @@ bool profile_grouped_gemm_tile_loop_impl(int do_verification,
Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{}))); Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{})));
c_m_n_host_results.push_back( c_m_n_host_results.push_back(
Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{}))); Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{})));
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n[" << i {
<< "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n["
<< "]:" << c_m_n_device_results[i].mDesc << std::endl; << i << "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i
#endif // DEBUG_LOG << "]:" << c_m_n_device_results[i].mDesc << std::endl;
}
switch(init_method) switch(init_method)
{ {
case 0: break; case 0: break;
......
...@@ -88,11 +88,12 @@ bool profile_grouped_gemm_two_stage_impl(int do_verification, ...@@ -88,11 +88,12 @@ bool profile_grouped_gemm_two_stage_impl(int do_verification,
c_m_n_host_results.push_back( c_m_n_host_results.push_back(
Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{}))); Tensor<CDataType>(f_host_tensor_descriptor(Ms[i], Ns[i], StrideCs[i], CLayout{})));
#if DEBUG_LOG if(ck::EnvIsEnabled(ENV(CK_LOGGING)))
std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n[" << i {
<< "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i std::cout << "group: " << i << " a_m_k[" << i << "]:" << a_m_k[i].mDesc << ", b_k_n["
<< "]:" << c_m_n_device_results[i].mDesc << std::endl; << i << "]:" << b_k_n[i].mDesc << ", c_m_n_device_results[" << i
#endif // DEBUG_LOG << "]:" << c_m_n_device_results[i].mDesc << std::endl;
}
std::size_t num_thread = 1; std::size_t num_thread = 1;
switch(init_method) switch(init_method)
{ {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment