Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 (facebookincubator#295)

Summary:
Pull Request resolved: facebookincubator#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
bigzachattack authored and facebook-github-bot committed Sep 27, 2024
1 parent af8d8fa commit 4099f16
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
@@ -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);
21 changes: 19 additions & 2 deletions hbt/src/perf_event/BuiltinMetrics.cpp
Original file line number Diff line number Diff line change
@@ -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) {
//
@@ -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",
@@ -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{
12 changes: 8 additions & 4 deletions hbt/src/perf_event/CpuArch.h
Original file line number Diff line number Diff line change
@@ -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:
@@ -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;
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
@@ -20,6 +20,7 @@ enum class CpuArch {
MILAN,
GENOA,
BERGAMO,
TURIN,
// Intel Architectures Sorted by model id.
BDW,
BDW_DE,
@@ -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:
@@ -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;
@@ -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:

0 comments on commit 4099f16

Please sign in to comment.