Как мне настроить цикл таким образом, чтобы одно ядро на моем ПК выполняло половину, а другое — другую половину в R

#r #windows #parallel-processing #arima

#r #Windows #параллельная обработка #arima

Вопрос:

У меня есть R scrip, который имитирует ARIMA данные и проверяет одни и те же данные 100 раз ARIMA order ARIMA(p, d, q) . У меня есть 2 ядра на системном процессоре, как я могу дать R команду для вычисления ядра 1 to 50 , в то время как второе ядро для вычисления 51 to 100 одновременно, а затем объединить результат так, чтобы.

 library(forecast)
system.time({
  for (i in 1:100) {
    a <- arima.sim(n = 50, model=list(ar = 0.8), sd = 1)
    b <- arimaorder(auto.arima(b, ic = "aicc"))
    #print(b)
  }
  

Я использую 64-разрядную версию Windows 10

Комментарии:

1. Вы можете использовать parallel , future callr и несколько других вариантов для координации между различными процессами. Также есть cran.r-project.org/web/views/HighPerformanceComputing.html .

Ответ №1:

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

Я считаю, что для обработки компьютеру лучше решить, как разделить циклы между доступными ядрами.

 #…
library(parallel)
library(foreach)
library(doParallel)

#detectCores()                   ### Count number of cores available
numCores  <- 2
registerDoParallel(numCores)

#for (i in 1:100) {          ### Original For loop
foreach(i = 1:100) %dopar% { ### Replacement parallel foreach loop
    #…
}
#…
  

Комментарии:

1. auto.arima() функция не работает с этим foreach даже при загрузке пакета прогноза

2. Я использую foreach(i = 1:100, .packages = c("forecast")) %dopar% { вместо foreach(i = 1:100) %dopar% { в вашем ответе, и это сработало