2016-12-07 9 views
1

Я часто использую parallel::detectCores() в R, чтобы получить количество ядер ЦП на хосте, для распараллеливания. Я хотел бы получить кол-во и idle ядра для моих вычислений. Если некоторые из ядер используются другим пользователем, я не хочу запускать их для своей программы. Есть ли способ сделать это программно?Обнаружение доступных и незанятых ядер в R

+0

Я не думаю, что это возможно, но мне будет интересно узнать это также! – clemlaflemme

ответ

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

Благодарим вас за это предложение. Оно работает! –