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

  1. calcula A
  2. calcula B
  3. calcula C
  4. combina A, B y C

Obviamente, se me ocurre ejecutarlos así:

  1. calcula A, B y C en paralelo
  2. 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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
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.