Sto sperimentando un comportamento strano nel mio computer quando distribuisco processi tra i suoi core usando doMC e foreach. Qualcuno sa perché utilizzando single core ho ottenuto prestazioni migliori rispetto all'utilizzo di 2 core? Come potete vedere, l'elaborazione dello stesso codice senza registrare alcun core (che presumibilmente usa solo 1 core) produce un'elaborazione molto più rapida. Mentre% do% sembra funzionare meglio di% dopar%, registrando 2 core su 4 di resa a più tempo.Parallelizzazione in R:% dopar% vs% do%. Perché utilizzare un rendimento single core per prestazioni migliori?
require(foreach)
require(doMC)
# 1-core
> system.time(m <- foreach(i=1:100) %dopar%
+ matrix(rnorm(1000*1000), ncol=5000))
user system elapsed
9.285 1.895 11.083
> system.time(m <- foreach(i=1:100) %do%
+ matrix(rnorm(1000*1000), ncol=5000))
user system elapsed
9.139 1.879 10.979
# 2-core
> registerDoMC(cores=2)
> system.time(m <- foreach(i=1:100) %dopar%
+ matrix(rnorm(1000*1000), ncol=5000))
user system elapsed
3.322 3.737 132.027
> system.time(m <- foreach(i=1:100) %do%
+ matrix(rnorm(1000*1000), ncol=5000))
user system elapsed
9.744 2.054 11.740
Utilizzando 4 core in alcune prove rendimento a risultati molto diversi:
> registerDoMC(cores=4)
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) })
user system elapsed
11.522 4.082 24.444
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) })
user system elapsed
21.388 6.299 25.437
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) })
user system elapsed
17.439 5.250 9.300
> system.time(m <- foreach(i=1:100) %dopar%
{ matrix(rnorm(1000*1000), ncol=5000) })
user system elapsed
17.480 5.264 9.170
1. La produzione di una singola matrice non è (in generale) eseguita in parallelo, a meno che non si definisca come deve essere fatto, e non lo si è fatto. Dovresti aspettarti risultati peggiori quando usi più di un core. 2. Il comando 'registerDoMC' influisce su'% do% '? I risultati sono simili. –
@MatthewLundberg: Si prega di '% do%' controllare la documentazione :-) – krlmlr
A meno che non legga l'output in modo errato, non vedo _ "molto più elaborazione dell'efficienza temporale" _, sembra una differenza trascurabile di appena l'1,5% –