Я реализую систему параллельной обработки, которая в конечном итоге будет развернута на кластере, но у меня возникли проблемы с разработкой взаимодействия различных методов параллельной обработки.Параллельный r с foreach и mclapply в то же время
Мне нужно использовать цикл for для запуска большого блока кода, который содержит несколько больших операций с матрицами. Чтобы ускорить это, я хочу, чтобы параллельный цикл for с foreach() и параллелизировал операции списка с помощью mclapply.
пример псевдокода:
cl<-makeCluster(2)
registerDoParallel(cl)
outputs <- foreach(k = 1:2, .packages = "various packages") {
l_output1 <- mclapply(l_input1, function, mc.cores = 2)
l_output2 <- mclapply(l_input2, function, mc.cores = 2)
return = mapply(cbind, l_output1, l_output2, SIMPLIFY=FALSE)
}
Это похоже на работу. Мои вопросы:
1) разумный подход? Кажется, что они работают вместе над моими малогабаритными тестами, но это немного неприятно.
2) Сколько ядер/процессоров он будет использовать в любой момент времени? Когда я масштабирую его до кластера, мне нужно будет понять, как много я могу его подтолкнуть (foreach только петли 7 раз, но списки mclapply имеют до 70 или около того больших матриц). Кажется, что он создает 6 "ядер", как написано (предположительно 2 для foreach и 2 для каждого mclapply.