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$oslinux

开头
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)))