COMMON_SYSDEP int __cilkrts_hardware_cpu_count(void) { #if defined ANDROID return sysconf (_SC_NPROCESSORS_ONLN); #elif defined __MIC__ /// HACK: Usually, the 3rd and 4th hyperthreads are not beneficial /// on KNC. Also, ignore the last core. int P = sysconf (_SC_NPROCESSORS_ONLN); return P/2 - 2; #elif defined __linux__ int affinity_count = linux_get_affinity_count(linux_gettid()); return (0 != affinity_count) ? affinity_count : sysconf (_SC_NPROCESSORS_ONLN); #elif defined __APPLE__ int count = 0; int cmd[2] = { CTL_HW, HW_NCPU }; size_t len = sizeof count; int status = sysctl(cmd, 2, &count, &len, 0, 0); assert(status >= 0); assert((unsigned)count == count); return count; #elif defined __FreeBSD__ || defined __CYGWIN__ int ncores = sysconf(_SC_NPROCESSORS_ONLN); return ncores; // Just get the number of processors // return sysconf(_SC_NPROCESSORS_ONLN); #elif defined __VXWORKS__ return __builtin_popcount( vxCpuEnabledGet() ); #else #error "Unknown architecture" #endif }
long ACE_OS::num_processors_online (void) { ACE_OS_TRACE ("ACE_OS::num_processors_online"); #if defined (ACE_HAS_PHARLAP) return 1; #elif defined (ACE_WIN32) SYSTEM_INFO sys_info; ::GetSystemInfo (&sys_info); long active_processors = 0; DWORD_PTR mask = sys_info.dwActiveProcessorMask; while (mask != 0) { if (mask & 1) ++active_processors; mask >>= 1; } return active_processors; #elif defined (ACE_HAS_VXCPULIB) long num_cpu = 0; cpuset_t cpuset; CPUSET_ZERO (cpuset); cpuset = vxCpuEnabledGet(); unsigned int const maxcpu = vxCpuConfiguredGet(); for (unsigned int i =0; i < maxcpu; i++) { if (CPUSET_ISSET (cpuset, i)) { ++num_cpu; } } return num_cpu; #elif defined (_SC_NPROCESSORS_ONLN) return ::sysconf (_SC_NPROCESSORS_ONLN); #elif defined (ACE_HAS_SYSCTL) int num_processors; int mib[2] = { CTL_HW, HW_NCPU }; size_t len = sizeof (num_processors); if (::sysctl (mib, 2, &num_processors, &len, 0, 0) != -1) return num_processors; else return -1; #elif defined (__hpux) struct pst_dynamic psd; if (::pstat_getdynamic (&psd, sizeof (psd), (size_t) 1, 0) != -1) return psd.psd_proc_cnt; else return -1; #else ACE_NOTSUP_RETURN (-1); #endif }