r - 检测 R 中的可用和空闲内核

标签 r foreach parallel-processing multiprocessing cpu-cores

我经常在 R 中使用 parallel::detectCores() 来获取主机上的 CPU 核心数,以进行并行计算。我想计算可用于我的计算的可用空闲 内核的数量。如果其他用户正在使用某些内核,我不想为我的程序占用它们。有没有办法以编程方式执行此操作?

最佳答案

这是一种使用系统命令和正则表达式来获取每个处理器的空闲时间的方法……这可能应该扩展为一个具有允许其他性能指标(即系统时间)的选项的函数。

library(doParallel)

# total cores
N_CORES <- detectCores()

# create list for readable lapply output
cores <- lapply(1:N_CORES, function(x) x - 1)
names(cores) <- paste0('CPU', 1:N_CORES - 1)

# use platform specific system commands to get idle time
proc_idle_time <- lapply(cores, function(x) {
  if (.Platform$OS.type == 'windows') {
    out <- system2(
      command = 'typeperf', 
      args = c('-sc', 1, sprintf('"\\processor(%s)\\%% idle time"', x)),
      stdout = TRUE)
    idle_time <- strsplit(out[3], ',')[[1]][2]
    idle_time <- as.numeric(gsub('[^0-9.]', '', idle_time))
  } else {
    # assumes linux
    out <- system2(
      command = 'mpstat', 
      args = c('-P', x),
      stdout = TRUE)
    idle_time <- as.numeric(unlist(strsplit(out[4], ' {2,}'))[12])
  }
  idle_time
})

关于r - 检测 R 中的可用和空闲内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41024035/

相关文章:

java - 数组中元素的总和

javascript - Node.js 循环中的异步函数?

r - 如何避免使用 foreach 复制对象

python - 如何使用 PyTorch 并行化 CNN 对图像的评估

python - 并行调用对象方法

python - 使用 R 或 Python 对数据进行子集化

r - 我如何在 R 中巧妙地找到以前的时间段开始和结束?

r - 如何对按 R 中的值分组的 data.table 求和和计数

r - 根据 R 中的列表长度动态创建嵌套的 FOR 循环

javascript - 使用 JavaScript 在 ForEach 循环中拆分数组值?