Skip to content

Commit

Permalink
Add initial support in hbt for Zen5 and clarify Zen3 vs Zen5 CPU fami…
Browse files Browse the repository at this point in the history
…ly (#295)

Summary:
Pull Request resolved: #295

This diff includes changes in hbt to support adding Zen5 CPUs.

`CpuFamily::AMD` has been renamed `CpuFamily::AMDZEN3` and adds `CpuFamily::AMDZEN5`, since AMD changes families more often than Intel.

Reviewed By: briancoutinho

Differential Revision: D62447334
  • Loading branch information
bigzachattack authored and facebook-github-bot committed Oct 1, 2024
1 parent 8a8cb7b commit f4d02db
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 7 deletions.
1 change: 1 addition & 0 deletions hbt/src/perf_event/AmdEvents.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ void addAmdEvents(const CpuInfo& cpu_info, PmuDeviceManager& pmu_manager) {
case CpuArch::MILAN:
case CpuArch::BERGAMO:
case CpuArch::GENOA:
case CpuArch::TURIN:
milan::addEvents(pmu_manager);
#ifdef FACEBOOK
milan::addEventsFb(pmu_manager);
Expand Down
21 changes: 19 additions & 2 deletions hbt/src/perf_event/BuiltinMetrics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,8 @@ std::shared_ptr<PmuDeviceManager> makePmuDeviceManager() {
populateGenericEventsTracepoint(pmu_manager);
}

if (cpu_info.cpu_family == CpuFamily::AMD) {
if (cpu_info.cpu_family == CpuFamily::AMDZEN3 ||
cpu_info.cpu_family == CpuFamily::AMDZEN5) {
addAmdEvents(cpu_info, *pmu_manager);
} else if (cpu_info.cpu_family == CpuFamily::INTEL) {
//
Expand Down Expand Up @@ -607,7 +608,9 @@ std::shared_ptr<Metrics> makeAvailableMetrics() {
100'000'000,
System::Permissions{},
std::vector<std::string>{}));
} else if (cpu_info.cpu_family == CpuFamily::AMD) {
} else if (
cpu_info.cpu_family == CpuFamily::AMDZEN3 ||
cpu_info.cpu_family == CpuFamily::AMDZEN5) {
metrics->add(std::make_shared<MetricDesc>(
"l2_cache_misses",
"Core-originated cacheable demand requests missed L2",
Expand Down Expand Up @@ -865,6 +868,20 @@ std::shared_ptr<Metrics> makeAvailableMetrics() {
"zen4::fp_ret_sse_avx_ops.all",
EventExtraAttr{},
{}}}},
{CpuArch::TURIN,
EventRefs{
EventRef{
"flops_scalar",
PmuType::cpu,
"zen3/4::fp_ret_x87_fp_ops.all",
EventExtraAttr{},
{}},
EventRef{
"flops_vector",
PmuType::cpu,
"zen4::fp_ret_sse_avx_ops.all",
EventExtraAttr{},
{}}}},
// Intel by default
{std::nullopt,
EventRefs{
Expand Down
12 changes: 8 additions & 4 deletions hbt/src/perf_event/CpuArch.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,14 @@

namespace facebook::hbt::perf_event {

enum class CpuFamily { AMD, INTEL, ARM, UNKNOWN };
enum class CpuFamily { AMDZEN3, AMDZEN5, INTEL, ARM, UNKNOWN };

inline std::ostream& operator<<(std::ostream& os, CpuFamily f) {
switch (f) {
case CpuFamily::AMD:
return os << "AMD";
case CpuFamily::AMDZEN3:
return os << "AMD Zen 3 / Zen 3+ / Zen 4";
case CpuFamily::AMDZEN5:
return os << "AMD Zen 5";
case CpuFamily::INTEL:
return os << "INTEL";
case CpuFamily::ARM:
Expand All @@ -40,7 +42,9 @@ inline CpuFamily makeCpuFamily(
case 6:
return CpuFamily::INTEL;
case 25:
return CpuFamily::AMD;
return CpuFamily::AMDZEN3;
case 26:
return CpuFamily::AMDZEN5;
// Not recognized CPU model.
default:
return CpuFamily::UNKNOWN;
Expand Down
10 changes: 9 additions & 1 deletion hbt/src/perf_event/json_events/generated/CpuArch.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ enum class CpuArch {
MILAN,
GENOA,
BERGAMO,
TURIN,
// Intel Architectures Sorted by model id.
BDW,
BDW_DE,
Expand Down Expand Up @@ -58,6 +59,8 @@ inline std::ostream& operator<<(std::ostream& os, CpuArch ev) {
return os << "GENOA";
case CpuArch::BERGAMO:
return os << "BERGAMO";
case CpuArch::TURIN:
return os << "TURIN";
case CpuArch::BDW:
return os << "BDW";
case CpuArch::BDW_DE:
Expand Down Expand Up @@ -104,7 +107,7 @@ inline CpuArch makeCpuArchX86(
uint32_t cpu_model_num,
uint32_t cpu_step_num) {
auto cpu_family = makeCpuFamily(cpu_family_num);
if (cpu_family == CpuFamily::AMD) {
if (cpu_family == CpuFamily::AMDZEN3) {
switch (cpu_model_num) {
case 1:
return CpuArch::MILAN;
Expand All @@ -113,6 +116,11 @@ inline CpuArch makeCpuArchX86(
case 160:
return CpuArch::BERGAMO;
}
} else if (cpu_family == CpuFamily::AMDZEN5) {
switch (cpu_model_num) {
case 17:
return CpuArch::TURIN;
}
} else if (cpu_family == CpuFamily::INTEL) {
switch (cpu_model_num) {
case 42:
Expand Down

0 comments on commit f4d02db

Please sign in to comment.