R en paralelo
Trabajo sobre una máquina de 8 núcleos y 24 GB de RAM. Y que conste que se me ha llegado a quedar chica.
Algunos programas que ejecuto tienen (o contienen pedazos de) la forma
- calcula A
- calcula B
- calcula C
- combina A, B y C
Obviamente, se me ocurre ejecutarlos así:
- calcula A, B y C en paralelo
- cuando acabe el paso anterior, combina A, B y C
Y aún me sobrarían 5 núcleos y bastante RAM. La pregunta es: ¿cómo?
Inspirado en esto, últimamente hago:
library(parallel)
tasks <- list(
job1 = function() calcula.A(args.A),
job2 = function() calcula.B(args.B),
job3 = function() calcula.C(args.C)
)
out <- mclapply(
tasks,
function(f) f(),
mc.cores = length(tasks)
)
Y la verdad, va como un tiro.