https://github.com/llvmbot created https://github.com/llvm/llvm-project/pull/125624
Backport fbe470c1b215e3f953a41db6b91d20ce0bcf5c4e Requested by: @brad0 >From 1b6946b60080e057d5848cea36ce801ddf2a43f6 Mon Sep 17 00:00:00 2001 From: Brad Smith <b...@comstyle.com> Date: Mon, 3 Feb 2025 22:43:43 -0500 Subject: [PATCH] [benchmark] Get number of CPUs with sysconf() on Linux (#125603) (cherry picked from commit c24774dc4f4402c3ad150363321cc972ed2669e7) (cherry picked from commit fbe470c1b215e3f953a41db6b91d20ce0bcf5c4e) --- third-party/benchmark/src/sysinfo.cc | 53 ++-------------------------- 1 file changed, 3 insertions(+), 50 deletions(-) diff --git a/third-party/benchmark/src/sysinfo.cc b/third-party/benchmark/src/sysinfo.cc index 2bed1663af2e95..8283a081ee80b4 100644 --- a/third-party/benchmark/src/sysinfo.cc +++ b/third-party/benchmark/src/sysinfo.cc @@ -495,14 +495,14 @@ int GetNumCPUsImpl() { return sysinfo.dwNumberOfProcessors; // number of logical // processors in the current // group -#elif defined(BENCHMARK_OS_SOLARIS) +#elif defined(__linux__) || defined(BENCHMARK_OS_SOLARIS) // Returns -1 in case of a failure. - long num_cpu = sysconf(_SC_NPROCESSORS_ONLN); + 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 (int)num_cpu; + return num_cpu; #elif defined(BENCHMARK_OS_QNX) return static_cast<int>(_syspage_ptr->num_cpu); #elif defined(BENCHMARK_OS_QURT) @@ -511,53 +511,6 @@ int GetNumCPUsImpl() { hardware_threads.max_hthreads = 1; } return hardware_threads.max_hthreads; -#else - int num_cpus = 0; - int max_id = -1; - std::ifstream f("/proc/cpuinfo"); - if (!f.is_open()) { - PrintErrorAndDie("Failed to open /proc/cpuinfo"); - } -#if defined(__alpha__) - const std::string Key = "cpus detected"; -#else - const std::string Key = "processor"; -#endif - std::string ln; - while (std::getline(f, ln)) { - if (ln.empty()) continue; - std::size_t split_idx = ln.find(':'); - std::string value; -#if defined(__s390__) - // s390 has another format in /proc/cpuinfo - // it needs to be parsed differently - if (split_idx != std::string::npos) - value = ln.substr(Key.size() + 1, split_idx - Key.size() - 1); -#else - if (split_idx != std::string::npos) value = ln.substr(split_idx + 1); -#endif - if (ln.size() >= Key.size() && ln.compare(0, Key.size(), Key) == 0) { - num_cpus++; - if (!value.empty()) { - const int cur_id = benchmark::stoi(value); - max_id = std::max(cur_id, max_id); - } - } - } - if (f.bad()) { - PrintErrorAndDie("Failure reading /proc/cpuinfo"); - } - if (!f.eof()) { - PrintErrorAndDie("Failed to read to end of /proc/cpuinfo"); - } - f.close(); - - if ((max_id + 1) != num_cpus) { - fprintf(stderr, - "CPU ID assignments in /proc/cpuinfo seem messed up." - " This is usually caused by a bad BIOS.\n"); - } - return num_cpus; #endif BENCHMARK_UNREACHABLE(); } _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits