Tôi muốn tăng tốc độ chức năng khởi động, hoạt động hoàn toàn tốt. Tôi đọc rằng kể từ R 2.14 có một gói gọi là parallel
, nhưng tôi thấy nó rất khó cho sb. với kiến thức khoa học máy tính thấp để thực sự triển khai nó. Có lẽ ai đó có thể giúp đỡ.Sử dụng R song song để tăng tốc độ bootstrap
Vì vậy, ở đây chúng tôi có một bootstrap:
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=" "))
}
Mục đích là để sử dụng song song chế biến/khai thác đa lõi của máy tính của tôi. Tôi đang chạy R dưới Windows. Cảm ơn!
EDIT (sau khi trả lời bởi Noah)
Cú pháp sau đây có thể được sử dụng để thử nghiệm:
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)
Tuy nhiên, trên máy tính của tôi mã R đơn giản là nhanh hơn. Đây có phải là một trong những tác dụng phụ đã biết của việc xử lý song song, tức là nó gây ra chi phí cho việc chia nhỏ quá trình thêm vào thời gian trong 'các nhiệm vụ đơn giản' như thế này?
Chỉnh sửa: Trên máy của tôi, mã parallel
mất khoảng 5 lần dài hơn mã 'đơn giản'. Yếu tố này dường như không thay đổi khi tôi tăng độ phức tạp của tác vụ (ví dụ: tăng boot
hoặc n
). Vì vậy, có thể có một vấn đề với mã hoặc máy của tôi (Windows dựa trên chế biến?).
Cảm ơn, tôi đã tổng hợp cú pháp được đề xuất để kiểm tra (mã đã chỉnh sửa ở trên). Nó hiện sử dụng 100% CPU của tôi (tức là tất cả các bộ vi xử lý). Tuy nhiên, điều này là chậm hơn so với thực hiện nó mà không cần xử lý song song, xem ở trên. – tomka
Sẽ tuyệt vời nếu bạn có thể đưa ra bất kỳ đề xuất bổ sung nào về vấn đề thời gian, tức là tại sao đề xuất của bạn không tăng tốc nó? Cảm ơn. – tomka
Hmm. Hấp dẫn.Trên máy tính của tôi, (8 lõi HT, 8 GB ram, Ubuntu 12.04), tôi có tốc độ khoảng 3.4X với ít sử dụng RAM. Tôi không phải là quen thuộc với đa luồng trong một môi trường cửa sổ. Dưới đây là một số điều cần thử: – Noah