Merge pull request #41 from gstrauss/Run-on-active-CPUs

Run - detect num active CPUs
This commit is contained in:
Kelly Lucas 2016-09-17 21:45:26 -07:00 committed by GitHub
commit 34ecf4ec6a

View File

@ -670,6 +670,9 @@ sub processCpuFlags {
# array of N entries, one per CPU, where each entry is a hash containing # array of N entries, one per CPU, where each entry is a hash containing
# these fields: # these fields:
# describing the model etc. Returns undef if the information can't be got. # describing the model etc. Returns undef if the information can't be got.
#
# future: on systems without /proc/cpuinfo, might check for Perl modules:
# Sys::Info::Device::CPU or Sys::CpuAffinity
sub getCpuInfo { sub getCpuInfo {
if (!("$^O" eq "darwin")) { if (!("$^O" eq "darwin")) {
open(my $fd, "<", "/proc/cpuinfo") || return undef; open(my $fd, "<", "/proc/cpuinfo") || return undef;
@ -716,6 +719,39 @@ sub getCpuInfo {
} }
# Get number of available (active) CPUs (not including disabled CPUs)
# or, if not num of available CPUs, the total number of CPUs on the system
# Returns undef if the information can't be obtained.
#
# There is no shortage of platform-specific methods to obtain this info.
# This routine -is not- exhaustive, but adds some additional portability.
# Most modern unix systems implement sysconf(_SC_NPROCESSORS_ONLN).
sub getNumActiveCpus {
my $numCpus;
#(POSIX::_SC_NPROCESSORS_ONLN value not typically provided by POSIX.pm)
#$numCpus = POSIX::sysconf(POSIX::_SC_NPROCESSORS_ONLN);
#if (defined($numCpus)) { chomp $numCpus; return $numCpus if $numCpus; }
$numCpus = `getconf _NPROCESSORS_ONLN 2>/dev/null`;
if (defined($numCpus)) { chomp $numCpus; return $numCpus if $numCpus; }
$numCpus = `getconf NPROCESSORS_ONLN 2>/dev/null`;
if (defined($numCpus)) { chomp $numCpus; return $numCpus if $numCpus; }
$numCpus = `nproc 2>/dev/null`;
if (defined($numCpus)) { chomp $numCpus; return $numCpus if $numCpus; }
$numCpus = `python -c 'import os; print os.sysconf(os.sysconf_names["SC_NPROCESSORS_ONLN"]);' 2>/dev/null`;
if (defined($numCpus)) { chomp $numCpus; return $numCpus if $numCpus; }
# Windows
return $ENV{"NUMBER_OF_PROCESSORS"} if $ENV{"NUMBER_OF_PROCESSORS"};
return undef;
}
# Get information on the host system. Returns a reference to a hash # Get information on the host system. Returns a reference to a hash
# with the following fields: # with the following fields:
# name Host name # name Host name
@ -766,6 +802,12 @@ sub getSystemInfo {
$info->{'numCpus'} = scalar(@$cpus); $info->{'numCpus'} = scalar(@$cpus);
} }
# Get available number of CPUs (not disabled CPUs), if possible.
my $numCpus = getNumActiveCpus();
if (defined($numCpus)) {
$info->{'numCpus'} = $numCpus; # overwrite value from getCpuinfo()
}
# Get graphics hardware info. # Get graphics hardware info.
$info->{'graphics'} = getCmdOutput("3dinfo | cut -f1 -d\'(\'"); $info->{'graphics'} = getCmdOutput("3dinfo | cut -f1 -d\'(\'");