detectCores {parallel} | R Documentation |
Detect the Number of CPU Cores
Description
Attempt to detect the number of CPU cores on the current host.
Usage
detectCores(all.tests = FALSE, logical = TRUE)
Arguments
all.tests |
Logical: if true apply all known tests. |
logical |
Logical: if possible, use the number of physical CPUs/cores
(if |
Details
This attempts to detect the number of available CPU cores.
It has methods to do so for Linux, macOS, FreeBSD, OpenBSD, Solaris
and Windows. detectCores(TRUE)
could be tried on other
Unix-alike systems.
Value
An integer, NA
if the answer is unknown.
Exactly what this represents is OS-dependent: where possible by default it counts logical (e.g., hyperthreaded) CPUs and not physical cores or packages.
Under macOS there is a further distinction between ‘available in the current power management mode’ and ‘could be available this boot’, and this function returns the first.
On Sparc Solaris logical = FALSE
returns the number of physical
cores and logical = TRUE
returns the number of available
hardware threads. (Some Sparc CPUs have multiple cores per CPU, others
have multiple threads per core and some have both.) For example, the
UltraSparc T2 CPU in the former CRAN check server was a single
physical CPU with 8 cores, and each core supports 8 hardware threads.
So detectCores(logical = FALSE)
returns 8, and
detectCores(logical = TRUE)
returns 64.
Where virtual machines are in use, one would hope that the result
for logical = TRUE
represents the number of CPUs available (or
potentially available) to that particular VM.
Note
This is not suitable for use directly for the mc.cores
argument
of mclapply
nor specifying the number of cores in
makeCluster
. First because it may return NA
, second
because it does not give the number of allowed cores, and third
because on Sparc Solaris and some Windows boxes it is not reasonable
to try to use all the logical CPUs at once.
Author(s)
Simon Urbanek and Brian Ripley
Examples
detectCores()
detectCores(logical = FALSE)