2013-09-06 5 views
5

Ich versuche mclapply Funktion des parallel Pakets in R zu verwenden. Die Funktion ordnet die Werte der Sequenzmatrix zu, indem sie die Log-Likelihood-Distanz berechnet - eine CPU-intensive Operation.mclapply Benutzer Zeit größer als die verstrichene Zeit

Die resultierenden system.time Werte sind verwirrend:

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

Ich dachte, dass elapsed aggregierte Zeit bedeutet (user + system). Was bedeutet das obige Ergebnis in diesem Fall und zu welcher Zeit sollte ich mich orientieren? Meine nicht parallelisierte Version nimmt weniger in user Zeit und viel mehr in elapsed.

+0

Die Frage ist, was kümmert dich? Die meisten Leute wollen die Ergebnisse früher, was der verstrichenen Zeit entspricht. –

Antwort

3

Die Hilfeseite ?system.time besagt, dass der von der Funktion zurückgegebene Wert ein Objekt der Klasse proc_time ist und dass wir uns mit ?proc.time beraten sollten. Dort erfahren wir, dass Anwender Zeit ist

cumulative sum of user and system times of any child processes 

so Ihre Aufgabe über 15s auf jedem Kern ausgegeben hat (mclapply standardmäßig mit 2 Kernen finden Sie in der mc.cores Argument).

Eigentlich sehen wir früher auf der Hilfeseite, proc.time() gibt fünf Elemente zurück, die die Prozess- und untergeordneten Zeiten trennen, und dass die beim Drucken verwendete Zusammenfassungsmethode die Benutzer- und Systemzeit in Prozess + untergeordnete Zeiten einbricht etwas mehr Informationen verfügbar.

+0

nur zu wiederholen und sicherzustellen, dass ich verstehe, bedeutet dies, dass die verstrichene Zeit die Zeit ist, die tatsächlich vom Anfang bis zum Ende der Operation vergangen ist, und die Benutzerzeit die Summe aller verbrauchten Zeiten über alle Kerne ist (in meinem Fall 2) . Also, wenn ich parallel auf 2 Kernen lief, dauerte jeder 15 Sekunden, um die Aufgabe zu beenden (zusammen ~ 30 Sekunden), aber die gesamte verstrichene Zeit beträgt nur 18 Sekunden, genau wegen der parallel ausgeführten Aufgaben. Ist das richtig? – zima

+0

ja das ist richtig –

+0

Diese Antwort ist nicht richtig, weil Sie die Hilfedatei falsch lesen. 'proc.time()' gibt 5 Werte zurück, und der vierte und fünfte Wert sind "4: (kumulative Summe von Benutzer [Zeit eines beliebigen untergeordneten Prozesses]) und 5: (Systemzeiten von allen untergeordneten Prozessen)". – thc

Verwandte Themen