mirror of https://github.com/google/benchmark.git
Fix getting the CPU frequency on OS X
This commit is contained in:
parent
f67ee4ad9b
commit
721c9224b9
|
@ -280,29 +280,24 @@ void InitializeSystemInfo() {
|
|||
// group
|
||||
|
||||
#elif defined BENCHMARK_OS_MACOSX
|
||||
// returning "mach time units" per second. the current number of elapsed
|
||||
// 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;
|
||||
int32_t num_cpus = 0;
|
||||
size_t size = sizeof(num_cpus);
|
||||
int numcpus_name[] = {CTL_HW, HW_NCPU};
|
||||
if (::sysctl(numcpus_name, arraysize(numcpus_name), &num_cpus, &size, nullptr,
|
||||
0) == 0 &&
|
||||
(size == sizeof(num_cpus)))
|
||||
if (::sysctlbyname("hw.ncpu", &num_cpus, &size, nullptr, 0) == 0 &&
|
||||
(size == sizeof(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
|
||||
// Generic cycles per second counter
|
||||
cpuinfo_cycles_per_second = static_cast<double>(EstimateCyclesPerSecond());
|
||||
|
|
Loading…
Reference in New Issue