#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% {
в вашем ответе, и это сработало