У меня есть код R, который включает несколько рабочих foreach для выполнения некоторых задач параллельно. Для этого я использую foreach и doMC. Я хочу, чтобы каждый из рабочих foreach набирал новых рабочих и раздавал им некоторые части своего кода, который является параллелизуемым.Позвольте работникам foreach регистрировать и распространять подзадачи другим работникам
текущий код выглядит следующим образом:
require(doMC)
require(foreach)
registerDoMC(cores = 8)
foreach (i = (1:8)) %dopar% {
<<some code here>>
for (j in c(1:4)) {
<<some other code here>>
}
}
Ищу идеальный код, который будет выглядеть так:
require(doMC)
require(foreach)
registerDoMC(cores = 8)
foreach (i = (1:8)) %dopar% {
<<some code here>>
foreach (j = (1:4)) %dopar% {
<<some other code here>>
}
}
Я видел пример мульти-парадигмы параллелизм с использованием doSNOW и DoMC here (https://www.rmetrics.org/files/Meielisalp2009/Presentations/Lewis.pdf#page=17) , Однако я не знаю, делает он то, что я хочу, или нет.
Кроме того, кажется Nested foreach не применимо, поскольку для этого требуется слияние двух петель (see here), в то время как в моем случае это не является предпочтительным; второй цикл помогает только первой части кода. Пожалуйста, поправьте меня, если я ошибаюсь.
Спасибо.
Возможно, не совсем то, что вы хотите, но вы можете иметь вложенные выражения foreach: http://cran.r-project.org/web/packages/foreach/vignettes/nested.pdf. Однако я не знаю о наборе большего числа рабочих в петлях. – ialm
Спасибо. Тем не менее, кажется, что вложенный foreach не применим к моему случаю, потому что он требует слияния двух вложенных циклов, тогда как мне нужен внутренний цикл, который вызывается только для части кода. Я уточню вопрос, чтобы отразить это. – imriss