Ошибка параллельного вычисления при использовании пакетов foreach и doParalell - PullRequest
0 голосов
/ 05 марта 2020

Я выполняю параллельные вычисления с использованием пакетов foreach и doParallel при работе с динамической моделью c.

 numcores <- detectCores() -1
 mycluster <- makeCluster(numcores)
 registerDoParallel(mycluster)

 ii <- 1:2
 jj <- 1:20

 sgLASSO_DFM_2s_agg <- foreach(i = ii, .packages = c("nowcasting", "dplyr", "stringr", 
"midasr", "tibble", "tseries", "matlab")) %:% foreach(j =jj)%dopar% {



 assignInNamespace("SKF", my.SKF, "nowcasting")
 assignInNamespace("bridge", my.bridge, "nowcasting")

  if (y_pred[[i]][[j]]$sglassoFit$minindex == 1 | y_pred[[i]][[j]]$sglassoFit$minindex == num_lam ){

       prediction <-  NA

   }else{ 

      tdata_ps <- select(tdata_p, PRD_DE, y_pred[[i]][[j]]$x_selected + 1)
      url_list <- url_list[y_pred[[i]][[j]]$x_selected, ]
      frequency <- c(rep(4, p + 1), rep(12, nrow(url_list)))

      prediction <- data_SGL(tdata_ps, data.y, c, m, blocks, 
                    frequency, y_pred[[i]][[j]]$y_selected, '2s_agg')
             }

        }

Как вы можете видеть, код должен работать вычисления для индексов итерации ii и jj.

В этом примере будет выполнено 20 вычислений для каждого ii = (1, 2).

Как ни странно, ошибка возникает, если количество вычислений сразу превышает количество бэкэнд-программ (= mycluster = 3).

Я не думаю, что это проблема кодирования, потому что если я установлю число В вычислениях, которые R выполняет одновременно с числом бэкэнд-программ (т. е. 3), ошибки не возникло.

Другими словами, выполните вычисления с ii <-1: 1, jj < -1: 3, затем jj <-4: 6 и затем jj <-7: 9 и повторите расчет. Я не могу получить результаты ошибок. </p>

Я хотел бы знать причину и решение этой проблемы. Заранее спасибо.

...