2013-09-06 13 views
5

Sto tentando di utilizzare la funzione mclapply del pacchetto parallel in R. La funzione sta assegnando i valori alla matrice di sequenze calcolando la distanza di verosimiglianza del log - un'operazione che richiede un uso intensivo della CPU.mclapply tempo utente maggiore del tempo trascorso

I risultanti system.time valori sono confuse:

> system.time(mclapply(worksample,function(x){p_seqi_modj(x,worksample[[1]],c(1:17))})) 
    user system elapsed 
29.339 1.242 18.581 

ho pensato che elapsed significa tempo aggregato (+ usersystem). Cosa significa il risultato sopra in questo caso e a che ora dovrei orientarmi? La mia versione non parallela richiede meno tempo in user e molto altro in elapsed.

+0

La domanda è: cosa ti importa? La maggior parte delle persone desidera i risultati prima che corrisponda al tempo trascorso. –

risposta

3

La pagina di aiuto ?system.time dice che il valore restituito dalla funzione è un oggetto di classe proc_time e che dovremmo consultare ?proc.time. Ci si apprende che il tempo utente è

cumulative sum of user and system times of any child processes 

così il vostro compito ha speso circa 15s su ogni core (mclapply impostazioni di default usa 2 core, vedere l'argomento mc.cores).

In realtà, vediamo prima nella pagina di aiuto che proc.time() rendimenti cinque elementi che separano i tempi di processo e figlio, e che il metodo di sintesi utilizzato nella stampa crolla il tempo e al sistema in tempi di processo + bambino, per cui v'è un po 'più informazioni disponibili.

+0

solo per reiterare e assicurarsi di aver capito, questo significa che il tempo trascorso è il tempo effettivamente passato dall'inizio alla fine dell'operazione, e il tempo dell'utente è la somma di tutti i tempi trascorsi in tutti i core (nel mio caso 2) . Quindi, se corro in parallelo su 2 core, ognuno ha impiegato 15 secondi per completare l'operazione (insieme ~ 30 secondi), ma il tempo totale trascorso è solo di 18 secondi, precisamente a causa delle attività eseguite in parallelo. È corretto? – zima

+0

sì che è corretto –

+0

Questa risposta non è giusta perché stai leggendo il file di aiuto in modo errato. 'proc.time()' restituisce 5 valori e il 4 ° e il 5 ° valori sono "4: (somma cumulativa di utente [tempo di qualsiasi processo figlio]) e 5: (tempi di sistema di qualsiasi processo figlio)". – thc

Problemi correlati