Detect Apple M5 Pro / Max (Sotra) super and performance cores (#424)
Add microarchitecture detection for Apple M5 Pro and M5 Max (Sotra SoC / CPUFAMILY_ARM_SOTRA).
- Add cpuinfo_uarch_sotra_super and cpuinfo_uarch_sotra_performance enums.
- Detect 15-core (5 Super + 10 Performance) and 18-core (6 Super + 12 Performance) configurations on macOS/XNU.
- Update tools/cpu-info.c to use consistent spacing for Apple uarch display names.
Resolves https://github.com/pytorch/cpuinfo/issues/423
diff --git a/include/cpuinfo.h b/include/cpuinfo.h
index e52db90..3e358df 100644
--- a/include/cpuinfo.h
+++ b/include/cpuinfo.h
@@ -645,6 +645,11 @@
/** Apple M4 processor (little cores). */
cpuinfo_uarch_donan_sawtooth = 0x00700309,
+ /** Apple M5 Pro / Max processor (super cores). */
+ cpuinfo_uarch_sotra_super = 0x0070030A,
+ /** Apple M5 Pro / Max processor (performance cores). */
+ cpuinfo_uarch_sotra_performance = 0x0070030B,
+
/** Cavium ThunderX. */
cpuinfo_uarch_thunderx = 0x00800100,
/** Cavium ThunderX2 (originally Broadcom Vulkan). */
diff --git a/src/arm/mach/init.c b/src/arm/mach/init.c
index ca89023..6c632dd 100644
--- a/src/arm/mach/init.c
+++ b/src/arm/mach/init.c
@@ -72,6 +72,10 @@
#ifndef CPUFAMILY_ARM_HIDRA
#define CPUFAMILY_ARM_HIDRA 0x1d5a87e8
#endif
+// M5 Pro / M5 Max
+#ifndef CPUFAMILY_ARM_SOTRA
+#define CPUFAMILY_ARM_SOTRA 0xf76c5b1a
+#endif
// A19
#ifndef CPUFAMILY_ARM_TILOS
#define CPUFAMILY_ARM_TILOS 0x01d7a72b
@@ -184,6 +188,12 @@
case CPUFAMILY_ARM_HIDRA: /* M5 */
/* 10-core: 4x Tilos Everest v4 + 6x Tilos Sawtooth v4 */
return core_index + 6 < core_count ? cpuinfo_uarch_tilos_everest : cpuinfo_uarch_tilos_sawtooth;
+ case CPUFAMILY_ARM_SOTRA: /* M5 Pro / M5 Max */
+ /* Pro 15-core: 5x Sotra Super + 10x Sotra Performance */
+ /* Max 18-core: 6x Sotra Super + 12x Sotra Performance */
+ return (core_count > 15 ? core_index + 12 : core_index + 10) < core_count
+ ? cpuinfo_uarch_sotra_super
+ : cpuinfo_uarch_sotra_performance;
default:
/* Use hw.cpusubtype for detection */
diff --git a/tools/cpu-info.c b/tools/cpu-info.c
index 81d1368..82fd079 100644
--- a/tools/cpu-info.c
+++ b/tools/cpu-info.c
@@ -318,25 +318,29 @@
case cpuinfo_uarch_sawtooth:
return "Sawtooth";
case cpuinfo_uarch_coll_everest:
- return "Coll_Everest";
+ return "Coll Everest";
case cpuinfo_uarch_coll_sawtooth:
- return "Coll_Sawtooth";
+ return "Coll Sawtooth";
case cpuinfo_uarch_tupai_everest:
- return "Tupai_Everest";
+ return "Tupai Everest";
case cpuinfo_uarch_tupai_sawtooth:
- return "Tupai_Sawtooth";
+ return "Tupai Sawtooth";
case cpuinfo_uarch_tahiti_everest:
- return "Tahiti_Everest";
+ return "Tahiti Everest";
case cpuinfo_uarch_tahiti_sawtooth:
- return "Tahiti_Sawtooth";
+ return "Tahiti Sawtooth";
case cpuinfo_uarch_tilos_everest:
- return "Tilos_Everest";
+ return "Tilos Everest";
case cpuinfo_uarch_tilos_sawtooth:
- return "Tilos_Sawtooth";
+ return "Tilos Sawtooth";
case cpuinfo_uarch_donan_everest:
return "Donan Everest";
case cpuinfo_uarch_donan_sawtooth:
return "Donan Sawtooth";
+ case cpuinfo_uarch_sotra_super:
+ return "Sotra Super";
+ case cpuinfo_uarch_sotra_performance:
+ return "Sotra Performance";
case cpuinfo_uarch_thunderx:
return "ThunderX";
case cpuinfo_uarch_thunderx2: