首页 > 解决方案 > R 的 `parallel::detectCores` 在 Linux 上检测物理内核

问题描述

detectCoresR包中的函数parallel有一个选项logical = FALSE,它将返回物理内核的数量。

我有一个 AMD Ryzen 7 3700X 8 核处理器,但在 Linux 上,我得到了


> detectCores(logical = F)
[1] 16

查看该logical选项的帮助,它说

如果可能,请使用物理 CPU/内核的数量(如果为 FALSE)或逻辑 CPU 的数量(如果为 TRUE)。目前这仅适用于 macOS、Solaris 和 Windows。

因此,在 Linux 上,我不应该期待这项工作。我很惊讶它不能在 Linux 上运行,因为它可以在其他 *nix 系统上运行。

有谁知道 R 中的任何函数可以检测基于 Linux 的系统上 CPU 上的物理内核数量?

标签: rparallel-processing

解决方案


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

推荐阅读