Двухуровневый параллелизм в R - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь выполнить что-то вроде следующего: параллельно запустить 3 разных эксперимента и для каждого эксперимента запустить параллельное моделирование MCMC с использованием библиотеки dclone. В целом, я хотел бы запустить 12 процессов параллельно (4 на эксперимент * 3 эксперимента) на машине с 32 ядрами.

Моя наивная попытка была:

library(foreach)
library(doMC)
library(dclone)

registerDoMC(3)

foreach(i in 1:3) %dopar% {
  y = generate_data(i)
  cl <- makePSOCKcluster(4)
  mod = parJagsModel(cl, name="Model", file=myfilename)
  samples = parCodaSamples(cl=cl, model="Model")
  stopCluster(cl)
  saveRds(samples, outfile[i])
}

но я получаю ошибку:

Error in { : task 1 failed - "cannot open the connection"

Однако одна из 3 задач «верхнего уровня» (то есть внешний допар) выполнена просто отлично!

Если вместо %dopar% я использую только %do%, он отлично работает

...