loop - ejecutar un bucle for en paralelo en R
funcion repeat en r (1)
Tengo un bucle for que es algo como esto:
for (i=1:150000) {
tempMatrix = {}
tempMatrix = functionThatDoesSomething() #calling a function
finalMatrix = cbind(finalMatrix, tempMatrix)
}
¿Podrías decirme cómo hacer esto en paralelo?
Intenté esto basado en un ejemplo en línea, pero no estoy seguro de si la sintaxis es correcta. Tampoco aumentó mucho la velocidad.
finalMatrix = foreach(i=1:150000, .combine=cbind) %dopar% {
tempMatrix = {}
tempMatrix = functionThatDoesSomething() #calling a function
cbind(finalMatrix, tempMatrix)
}
Gracias por sus comentarios.
Miré en
parallel
después de publicar esta pregunta.
Finalmente, después de algunos intentos, lo puse en funcionamiento. He agregado el código a continuación en caso de que sea útil para otros
library(foreach)
library(doParallel)
#setup parallel backend to use many processors
cores=detectCores()
cl <- makeCluster(cores[1]-1) #not to overload your computer
registerDoParallel(cl)
finalMatrix <- foreach(i=1:150000, .combine=cbind) %dopar% {
tempMatrix = functionThatDoesSomething() #calling a function
#do other things if you want
tempMatrix #Equivalent to finalMatrix = cbind(finalMatrix, tempMatrix)
}
#stop cluster
stopCluster(cl)
Nota: debo agregar una nota de que si el usuario asigna demasiados procesos, entonces el usuario puede recibir este error:
Error in serialize(data, node$con) : error writing to connection
Nota: si
.combine
en la instrucción
foreach
es
rbind
, entonces el objeto final devuelto se habría creado agregando la salida de cada bucle en fila.
Espero que esto sea útil para las personas que prueban el procesamiento paralelo en R por primera vez como yo.
Referencias: http://www.r-bloggers.com/parallel-r-loops-for-windows-and-linux/ https://beckmw.wordpress.com/2014/01/21/a-brief-foray-into-parallel-processing-with-r/