mirror of
https://github.com/ROCm/composable_kernel.git
synced 2026-07-13 18:51:13 +00:00
Refactor conv profiler to produce statistics for analysing split-K autodeduction performance.
This commit is contained in:
@@ -566,8 +566,7 @@ struct DeviceGroupedConvBwdWeight_Xdl_CShuffle
|
||||
: get_optimized_k_batch_value(max_occupancy.value_, grid_size, k_grid_size);
|
||||
|
||||
data_type_ = typeid(ABDataType).name();
|
||||
arithmetic_intensity_ = (2.0 * k_dim_size_ * m_dim_size_ * n_dim_size_) /
|
||||
((m_dim_size_ * k_dim_size_ + k_dim_size_ * n_dim_size_ + m_dim_size_ * n_dim_size_) * sizeof(ABDataType));
|
||||
arithmetic_intensity_ = calculate_arithmetic_intensity(m_dim_size_, n_dim_size_, k_dim_size_, sizeof(ABDataType));
|
||||
|
||||
if (ck::EnvIsEnabled(CK_ENV(CK_LOGGING)))
|
||||
{
|
||||
|
||||
@@ -535,8 +535,7 @@ struct DeviceGroupedConvBwdWeight_Xdl_CShuffleV3
|
||||
: get_optimized_k_batch_value(max_occupancy.value_, grid_size, k_grid_size);
|
||||
|
||||
data_type_ = typeid(ABDataType).name();
|
||||
arithmetic_intensity_ = (2.0 * k_dim_size_ * m_dim_size_ * n_dim_size_) /
|
||||
((m_dim_size_ * k_dim_size_ + k_dim_size_ * n_dim_size_ + m_dim_size_ * n_dim_size_) * sizeof(ABDataType));
|
||||
arithmetic_intensity_ = calculate_arithmetic_intensity(m_dim_size_, n_dim_size_, k_dim_size_, sizeof(ABDataType));
|
||||
|
||||
// For small GemmK size, cap the max value of the k_batch.
|
||||
const auto k_batch_max = static_cast<index_t>((k_dim_size_ - 1) / K0PerBlock);
|
||||
|
||||
@@ -14,14 +14,14 @@ struct ArgumentSplitK
|
||||
index_t k_dim_size() const { return k_dim_size_; }
|
||||
index_t m_dim_size() const { return m_dim_size_; }
|
||||
index_t n_dim_size() const { return n_dim_size_; }
|
||||
index_t arithmetic_intensity() const { return arithmetic_intensity_; }
|
||||
float arithmetic_intensity() const { return arithmetic_intensity_; }
|
||||
std::string data_type() const { return data_type_; }
|
||||
protected:
|
||||
index_t k_batch_{-1};
|
||||
index_t k_dim_size_{-1};
|
||||
index_t m_dim_size_{-1};
|
||||
index_t n_dim_size_{-1};
|
||||
index_t arithmetic_intensity_{-1};
|
||||
float arithmetic_intensity_{-1};
|
||||
std::string data_type_{""};
|
||||
};
|
||||
|
||||
|
||||
@@ -130,6 +130,14 @@ inline ck::index_t get_optimized_k_batch_value(int max_occupancy, ck::index_t gr
|
||||
return best_split_k;
|
||||
}
|
||||
|
||||
inline float calculate_arithmetic_intensity(ck::index_t gemmM,
|
||||
ck::index_t gemmN,
|
||||
ck::index_t gemmK,
|
||||
float bytes_per_element)
|
||||
{
|
||||
return (2.0f * gemmM * gemmN * gemmK) / (bytes_per_element * (gemmM * gemmK + gemmK * gemmN + gemmM * gemmN));
|
||||
}
|
||||
|
||||
} // namespace device
|
||||
} // namespace tensor_operation
|
||||
} // namespace ck
|
||||
|
||||
Reference in New Issue
Block a user