Я часто использую parallel::detectCores()
в R
, чтобы получить количество ядер ЦП на хосте, для распараллеливания. Я хотел бы получить кол-во и idle ядра для моих вычислений. Если некоторые из ядер используются другим пользователем, я не хочу запускать их для своей программы. Есть ли способ сделать это программно?Обнаружение доступных и незанятых ядер в R
1
A
ответ
1
вот метод, который использует системные команды и регулярное выражение для получения времени простоя каждого процессора ... это, вероятно, должно быть расширено до функции с параметрами, позволяющими использовать другие показатели производительности (то есть системное время).
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
})
+0
Благодарим вас за это предложение. Оно работает! –
Я не думаю, что это возможно, но мне будет интересно узнать это также! – clemlaflemme