Я бы хотел ускорить мою функцию загрузки, которая отлично работает сама по себе. Я читал, что, поскольку R 2.14 есть пакет под названием parallel
, но мне очень сложно найти sb. с низким уровнем знаний в области информатики, чтобы реально реализовать его. Может быть, кто-то может помочь.
Итак, у нас есть бутстрап:
n<-1000
boot<-1000
x<-rnorm(n,0,1)
y<-rnorm(n,1+2*x,2)
data<-data.frame(x,y)
boot_b<-numeric()
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
boot_b[i]<-lm(y~x,bootstrap_data)$coef[2]
print(paste('Run',i,sep=" "))
}
Цель состоит в том, чтобы использовать параллельную обработку/использование нескольких ядер моего ПК. Я запускаю R под Windows. Спасибо!
EDIT (после ответа Ноя)
Для тестирования можно использовать следующий синтаксис:
library(foreach)
library(parallel)
library(doParallel)
registerDoParallel(cores=detectCores(all.tests=TRUE))
n<-1000
boot<-1000
x<-rnorm(n,0,1)
y<-rnorm(n,1+2*x,2)
data<-data.frame(x,y)
start1<-Sys.time()
boot_b <- foreach(i=1:boot, .combine=c) %dopar% {
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
unname(lm(y~x,bootstrap_data)$coef[2])
}
end1<-Sys.time()
boot_b<-numeric()
start2<-Sys.time()
for(i in 1:boot){
bootstrap_data<-data[sample(nrow(data),nrow(data),replace=T),]
boot_b[i]<-lm(y~x,bootstrap_data)$coef[2]
}
end2<-Sys.time()
start1-end1
start2-end2
as.numeric(start1-end1)/as.numeric(start2-end2)
Однако на моей машине простой R-код быстрее. Является ли это одним из известных побочных эффектов параллельной обработки, т.е. Вызывает накладные расходы, чтобы развить процесс, который добавляет к времени в "простых задачах", как этот?
Изменить: на моей машине код parallel
занимает примерно в 5 раз дольше, чем "простой" код. Этот фактор, по-видимому, не изменяется, поскольку я увеличиваю сложность задачи (например, увеличиваю boot
или n
). Так что, возможно, есть проблема с кодом или моей машиной (обработка на базе Windows?).