2016-12-07 2 views
1

Ich verwende häufig parallel::detectCores() in R, um die Anzahl der CPU-Kerne auf einem Host für parallelisierte Berechnung zu erhalten. Ich würde gerne eine Anzahl von verfügbaren und Leerlauf Kerne für meine Berechnung erhalten. Wenn einige der Kerne von einem anderen Benutzer verwendet werden, möchte ich sie nicht für mein Programm speichern. Können wir das programmatisch machen?Ermitteln verfügbarer und leerer Kerne in R

+0

Ich glaube nicht, dass dies möglich ist, aber ich werde es auch wissen wollen! – clemlaflemme

Antwort

1

Hier ist eine Methode, die Systembefehle und Regex verwendet, um die Leerlaufzeit jedes Prozessors zu erhalten ... dies sollte wahrscheinlich zu einer Funktion mit Optionen erweitert werden, um andere Leistungsmetriken (d. H. Systemzeit) zu ermöglichen.

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

Vielen Dank für diesen Vorschlag. Es klappt! –