mirror of
https://github.com/google/benchmark.git
synced 2024-11-26 07:32:19 +00:00
Fix getting the CPU frequency on OS X
This commit is contained in:
parent
f67ee4ad9b
commit
721c9224b9
|
@ -280,29 +280,24 @@ void InitializeSystemInfo() {
|
||||||
// group
|
// group
|
||||||
|
|
||||||
#elif defined BENCHMARK_OS_MACOSX
|
#elif defined BENCHMARK_OS_MACOSX
|
||||||
// returning "mach time units" per second. the current number of elapsed
|
int32_t num_cpus = 0;
|
||||||
// mach time units can be found by calling uint64 mach_absolute_time();
|
|
||||||
// while not as precise as actual CPU cycles, it is accurate in the face
|
|
||||||
// of CPU frequency scaling and multi-cpu/core machines.
|
|
||||||
// Our mac users have these types of machines, and accuracy
|
|
||||||
// (i.e. correctness) trumps precision.
|
|
||||||
// See cycleclock.h: CycleClock::Now(), which returns number of mach time
|
|
||||||
// units on Mac OS X.
|
|
||||||
mach_timebase_info_data_t timebase_info;
|
|
||||||
mach_timebase_info(&timebase_info);
|
|
||||||
double mach_time_units_per_nanosecond =
|
|
||||||
static_cast<double>(timebase_info.denom) /
|
|
||||||
static_cast<double>(timebase_info.numer);
|
|
||||||
cpuinfo_cycles_per_second = mach_time_units_per_nanosecond * 1e9;
|
|
||||||
|
|
||||||
int num_cpus = 0;
|
|
||||||
size_t size = sizeof(num_cpus);
|
size_t size = sizeof(num_cpus);
|
||||||
int numcpus_name[] = {CTL_HW, HW_NCPU};
|
if (::sysctlbyname("hw.ncpu", &num_cpus, &size, nullptr, 0) == 0 &&
|
||||||
if (::sysctl(numcpus_name, arraysize(numcpus_name), &num_cpus, &size, nullptr,
|
(size == sizeof(num_cpus))) {
|
||||||
0) == 0 &&
|
|
||||||
(size == sizeof(num_cpus)))
|
|
||||||
cpuinfo_num_cpus = num_cpus;
|
cpuinfo_num_cpus = num_cpus;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "%s\n", strerror(errno));
|
||||||
|
std::exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
int64_t cpu_freq = 0;
|
||||||
|
size = sizeof(cpu_freq);
|
||||||
|
if (::sysctlbyname("hw.cpufrequency", &cpu_freq, &size, nullptr, 0) == 0 &&
|
||||||
|
(size == sizeof(cpu_freq))) {
|
||||||
|
cpuinfo_cycles_per_second = cpu_freq;
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "%s\n", strerror(errno));
|
||||||
|
std::exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
// Generic cycles per second counter
|
// Generic cycles per second counter
|
||||||
cpuinfo_cycles_per_second = static_cast<double>(EstimateCyclesPerSecond());
|
cpuinfo_cycles_per_second = static_cast<double>(EstimateCyclesPerSecond());
|
||||||
|
|
Loading…
Reference in a new issue