Parallel-R: foreach & doMC

Il parallel processing offre la possibilità di eseguire contemporaneamente più processi.

Con R è possibile replicare in maniera piuttosto semplice l’esecuzione parallela di un ciclo “for”. Si può risparmiare del tempo prezioso per le elaborazioni, ancor di più se i processi in parallelo non richiedono troppo dispendio di memoria. Contrariamente esistono casi in cui la parallelizzazione non è efficente.

Questo codice fa ricorso ai packages foreach, doMCmulticore. multicore offre un’architettura che permette la parallelizzazione di processi anche su una console dotata di un unico processore monocore. doMC permette invece ad R di eseguire in parallelo le funzioni del package foreach in ambito multicore.

?View Code RSPLUS
##########
# R CODE #
##########
rm(list=ls())
 
library(doMC)
library(foreach)
library(randomForest)
data(iris)
 
# individua il numero di cores disponibili:
multicore:::detectCores(all.tests=TRUE)
 
# setting del numero di cores a disposizione:
registerDoMC(cores=2)
 
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

Sul mio Mac (un processore 2 core da 2GB e 2MB RAM) impiega 47 secondi per eseguire 10000 bootstrap.
Non sono certo un guru in questo campo, ogni contributo/suggerimento è quindi ben accetto.