Ich versuche, das DoParallel und Foreach-Paket zu verwenden, aber ich habe eine Verringerung der Leistung mit dem Bootstrapping-Beispiel in der Anleitung gefunden hier CRANpage.Ich versuche, mit doParallel und foreach, aber keine Verbesserung zu starten
library(doParallel)
library(foreach)
registerDoParallel(3)
x <- iris[which(iris[,5] != "setosa"), c(1,5)]
trials <- 10000
ptime <- system.time({
r <- foreach(icount(trials), .combine=cbind) %dopar% {
ind <- sample(100, 100, replace=TRUE)
result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
coefficients(result1)
}
})[3]
ptime
Dieses Beispiel gibt 56.87
zurück.
Wenn ich die dopar
in nur do
ändern, um sie sequentiell anstatt parallel auszuführen, gibt sie 36.65
zurück.
Wenn ich registerDoParallel(6)
tun, erhält es die parallele Zeit bis 42.11
ist aber immer noch langsamer als sequentiell. registerDoParallel(8)
wird 40.31
immer noch schlechter als sequenziell.
Wenn ich trials
auf 100.000 erhöhen, dann dauert der sequentielle Lauf 417.16
und der parallele Lauf mit 3 Arbeitern dauert 597.31
. Bei 6 parallel arbeitenden Mitarbeitern dauert es 425.85
.
Mein System ist
Dell Optiplex 990
Windows 7 Professional 64-Bit-
16GB RAM
Intel i-7-2600 3,6 GHz Quad- Kern mit Hyperthreading
Mache ich hier etwas falsch? Wenn ich die am meisten gekünstelte Sache mache, die ich mir vorstellen kann (indem ich den Berechnungscode durch Sys.sleep(1)
ersetze), dann bekomme ich eine tatsächliche Reduktion, die eng proportional zur Anzahl der Arbeiter ist. Ich frage mich, warum das Beispiel im Guide die Leistung für mich verringert, während es für sie die Dinge beschleunigt hat?
Dies ist ein fast-FAQ: Sie testen mit Sys.sleep() war in Ordnung, und es zeigt, dass das Einrichten der Threads mehr Zeit als das Berechnen benötigt. Versuchen Sie, die Größe des Problems, d. H. Probe (10000) zu erhöhen, und Sie werden eine Verbesserung sehen. Ihre Maschine hat jedoch nur 4 Kerne, also funktioniert nichts über 4 Kerne hinaus. Ich habe nie einen Effekt von Hyperthreading gesehen (unter Windows und ohne spezielle R-Compiles) –
@DieterMenne: Ihr Punkt darüber, dass es FAQish ist, ist gut gemacht. Die Tatsache, dass das Beispiel des Führers mir durch mich keinen Nutzen gebracht hat. Sie hatten Recht, dass eine Erhöhung der Stichprobengröße mich dahin bringen würde, wo Parallelität eine Verbesserung darstellt. Danke auch für den Tipp zum HT. Ich habe einen Test mit 4 gegen 8 Mitarbeitern gemacht und es war im Grunde die gleiche Zeit. –