Refactor conv profiler to produce statistics for analysing split-K autodeduction performance.

This commit is contained in:
Ville Pietilä
2025-06-30 14:20:10 +00:00
parent 196b65d1d6
commit 5d7a0487f8
5 changed files with 135 additions and 140 deletions

View File

@@ -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)))
{

View File

@@ -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);

View File

@@ -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_{""};
};

View File

@@ -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