R 的 `parallel::detectCores` 检测 Linux 上的物理内核
R's `parallel::detectCores` to detect physical cores on Linux
R parallel
包中的 detectCores
函数有一个 logical = FALSE
选项,它将 return 物理内核的数量。
我有一个 AMD Ryzen 7 3700X 8 核处理器,但在 Linux 上,我得到
> detectCores(logical = F)
[1] 16
查看 logical
选项的帮助,它说
if possible,
use the number of physical CPUs/cores (if FALSE) or logical CPUs (if
TRUE). Currently this is honoured only on macOS, Solaris and Windows.
因此,在 Linux 上,我不应该期待这项工作。我很惊讶它不能在 Linux 上工作,因为它可以在其他 *nix 系统上工作。
有谁知道 R 中的任何函数可以检测基于 Linux 的系统上的 CPU 上的物理内核数量?
这应该有效:
parallelly::availableCores(logical = FALSE)
parallel::detectCores
调用以防 R.version$os
以 linux
开头
system("grep \"^processor\" /proc/cpuinfo 2>/dev/null | wc -l", TRUE)
当询问以 core id
开头的行时,物理内核的数量可能会被检测到:
system("grep \"^core id\" /proc/cpuinfo 2>/dev/null | sort | uniq | wc -l", TRUE)
或直接访问/proc/cpuinfo
:
sum(!duplicated(grep("^core id", readLines("/proc/cpuinfo"), value = TRUE)))
或者 physical id
也应该考虑:
nrow(unique(matrix(grep("^core id|^physical id",
readLines("/proc/cpuinfo"), value = TRUE), ncol=2, byrow=TRUE)))
R parallel
包中的 detectCores
函数有一个 logical = FALSE
选项,它将 return 物理内核的数量。
我有一个 AMD Ryzen 7 3700X 8 核处理器,但在 Linux 上,我得到
> detectCores(logical = F)
[1] 16
查看 logical
选项的帮助,它说
if possible, use the number of physical CPUs/cores (if FALSE) or logical CPUs (if TRUE). Currently this is honoured only on macOS, Solaris and Windows.
因此,在 Linux 上,我不应该期待这项工作。我很惊讶它不能在 Linux 上工作,因为它可以在其他 *nix 系统上工作。
有谁知道 R 中的任何函数可以检测基于 Linux 的系统上的 CPU 上的物理内核数量?
这应该有效:
parallelly::availableCores(logical = FALSE)
parallel::detectCores
调用以防 R.version$os
以 linux
system("grep \"^processor\" /proc/cpuinfo 2>/dev/null | wc -l", TRUE)
当询问以 core id
开头的行时,物理内核的数量可能会被检测到:
system("grep \"^core id\" /proc/cpuinfo 2>/dev/null | sort | uniq | wc -l", TRUE)
或直接访问/proc/cpuinfo
:
sum(!duplicated(grep("^core id", readLines("/proc/cpuinfo"), value = TRUE)))
或者 physical id
也应该考虑:
nrow(unique(matrix(grep("^core id|^physical id",
readLines("/proc/cpuinfo"), value = TRUE), ncol=2, byrow=TRUE)))