/////////////////////////////////////////////////////////////////////////////// // /// \file cpucores.h /// \brief Get the number of online CPU cores // // Author: Lasse Collin // // This file has been put into the public domain. // You can do whatever you want with this file. // /////////////////////////////////////////////////////////////////////////////// #ifndef CPUCORES_H #define CPUCORES_H #if defined(HAVE_CPUCORES_SYSCONF) # include #elif defined(HAVE_CPUCORES_SYSCTL) # ifdef HAVE_SYS_PARAM_H # include # endif # ifdef HAVE_SYS_SYSCTL_H # include # endif #endif static inline uint32_t cpucores(void) { uint32_t ret = 0; #if defined(HAVE_CPUCORES_SYSCONF) const long cpus = sysconf(_SC_NPROCESSORS_ONLN); if (cpus > 0) ret = (uint32_t)(cpus); #elif defined(HAVE_CPUCORES_SYSCTL) int name[2] = { CTL_HW, HW_NCPU }; int cpus; size_t cpus_size = sizeof(cpus); if (!sysctl(name, &cpus, &cpus_size, NULL, NULL) && cpus_size == sizeof(cpus) && cpus > 0) ret = (uint32_t)(cpus); #endif return ret; } #endif