[llvm] [benchmark] Sync a few commits from upstream to help with CPU count (PR #126410)
Brad Smith via llvm-commits
llvm-commits at lists.llvm.org
Sun Feb 9 01:26:40 PST 2025
https://github.com/brad0 created https://github.com/llvm/llvm-project/pull/126410
Try to use the _SC_NPROCESSORS_ONLN sysconf elsewhere (cherry picked from commit edb1e76d8cb080a396c7c992e5d4023e1a777bd1)
Replace usage of deprecated sysctl on macOS
(cherry picked from commit faaa266d33ff203e28b31dd31be9f90c29f28d04)
Retrieve the number of online CPUs on OpenBSD and NetBSD (cherry picked from commit 41e81b1ca4bbb41d234f2d0f2c56591db78ebb83)
>From 1bd060e71c64f7e1fd9f82f38c766331892c9dbe Mon Sep 17 00:00:00 2001
From: Brad Smith <brad at comstyle.com>
Date: Sun, 9 Feb 2025 04:16:53 -0500
Subject: [PATCH] [benchmark] Sync a few commits from upstream to help with CPU
count
Try to use the _SC_NPROCESSORS_ONLN sysconf elsewhere
(cherry picked from commit edb1e76d8cb080a396c7c992e5d4023e1a777bd1)
Replace usage of deprecated sysctl on macOS
(cherry picked from commit faaa266d33ff203e28b31dd31be9f90c29f28d04)
Retrieve the number of online CPUs on OpenBSD and NetBSD
(cherry picked from commit 41e81b1ca4bbb41d234f2d0f2c56591db78ebb83)
---
third-party/benchmark/src/sysinfo.cc | 45 ++++++++++++++++------------
1 file changed, 26 insertions(+), 19 deletions(-)
diff --git a/third-party/benchmark/src/sysinfo.cc b/third-party/benchmark/src/sysinfo.cc
index 8283a081ee80b4a..1bd61b6c259b515 100644
--- a/third-party/benchmark/src/sysinfo.cc
+++ b/third-party/benchmark/src/sysinfo.cc
@@ -160,11 +160,11 @@ ValueUnion GetSysctlImp(std::string const& name) {
int mib[2];
mib[0] = CTL_HW;
- if ((name == "hw.ncpu") || (name == "hw.cpuspeed")) {
+ if ((name == "hw.ncpuonline") || (name == "hw.cpuspeed")) {
ValueUnion buff(sizeof(int));
- if (name == "hw.ncpu") {
- mib[1] = HW_NCPU;
+ if (name == "hw.ncpuonline") {
+ mib[1] = HW_NCPUONLINE;
} else {
mib[1] = HW_CPUSPEED;
}
@@ -482,27 +482,14 @@ std::string GetSystemName() {
}
int GetNumCPUsImpl() {
-#ifdef BENCHMARK_HAS_SYSCTL
- int num_cpu = -1;
- if (GetSysctl("hw.ncpu", &num_cpu)) return num_cpu;
- PrintErrorAndDie("Err: ", strerror(errno));
-#elif defined(BENCHMARK_OS_WINDOWS)
+#ifdef BENCHMARK_OS_WINDOWS
SYSTEM_INFO sysinfo;
// Use memset as opposed to = {} to avoid GCC missing initializer false
// positives.
std::memset(&sysinfo, 0, sizeof(SYSTEM_INFO));
GetSystemInfo(&sysinfo);
- return sysinfo.dwNumberOfProcessors; // number of logical
- // processors in the current
- // group
-#elif defined(__linux__) || defined(BENCHMARK_OS_SOLARIS)
- // Returns -1 in case of a failure.
- int num_cpu = static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN));
- if (num_cpu < 0) {
- PrintErrorAndDie("sysconf(_SC_NPROCESSORS_ONLN) failed with error: ",
- strerror(errno));
- }
- return num_cpu;
+ // number of logical processors in the current group
+ return static_cast<int>(sysinfo.dwNumberOfProcessors);
#elif defined(BENCHMARK_OS_QNX)
return static_cast<int>(_syspage_ptr->num_cpu);
#elif defined(BENCHMARK_OS_QURT)
@@ -511,6 +498,26 @@ int GetNumCPUsImpl() {
hardware_threads.max_hthreads = 1;
}
return hardware_threads.max_hthreads;
+#elif defined(BENCHMARK_HAS_SYSCTL)
+ int num_cpu = -1;
+ constexpr auto* hwncpu =
+#if defined BENCHMARK_OS_MACOSX
+ "hw.logicalcpu";
+#elif defined(HW_NCPUONLINE)
+ "hw.ncpuonline";
+#else
+ "hw.ncpu";
+#endif
+ if (GetSysctl(hwncpu, &num_cpu)) return num_cpu;
+ PrintErrorAndDie("Err: ", strerror(errno));
+#elif defined(_SC_NPROCESSORS_ONLN)
+ // Returns -1 in case of a failure.
+ int num_cpu = static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN));
+ if (num_cpu < 0) {
+ PrintErrorAndDie("sysconf(_SC_NPROCESSORS_ONLN) failed with error: ",
+ strerror(errno));
+ }
+ return num_cpu;
#endif
BENCHMARK_UNREACHABLE();
}
More information about the llvm-commits
mailing list