簡體   English   中英

R中的並行處理示例

[英]Parallel Processing Example in R

首先,我想說我是這個話題的新手。

其次,盡管我閱讀了很多有關R中的並行處理的信息,但我仍然對此並不自信。

我只是在R中發明了模擬。那么有人可以用我發明的代碼幫助我理解並行處理嗎? (我可以看到它是如何工作的)

我的代碼如下(大隨機數)

SimulateFn<-function(B,n){ 
  M1=list()
  for (i in 1:B){
    M1[i]=(n^2)}
  return(M1)}

SimulateFn(100000000,300000)

請你幫助我好嗎?

首先,並行化是將一個任務划分為多個子處理器的過程,這些子任務由多個處理器或內核同時處理,並且可以獨立或共享它們之間的某些依賴關系-后一種情況需要更多的計划和關注。

此過程有一些開銷來處理子任務-例如將數據復制到每個處理器。 也就是說,並行化對於快速計算毫無用處。 在您的示例中,三個主要過程是索引( [ ),賦值( <- )和(快速)數學運算( ^ )。 並行化的開銷可能大於執行子任務的時間,因此在這種情況下,並行化可能會導致性能變差!


盡管如此,R中的簡單並行化還是相當容易的。 下面提供了使用doParallel軟件包並行化任務的方法。 其他方法包括將包作為並行使用

library(doParallel)
## choose number of processors/cores
cl <- makeCluster(2)
registerDoParallel(cl)
## register elapsed time to evaluate code snippet
## %dopar% execute code in parallale
B <- 100000; n <- 300000
ptime <- system.time({ 
  M1=list()
  foreach(i=1:B) %dopar% {
      M1[i]=(n^2)
    }
  })
## %do% execute sequentially
stime <- system.time({ 
  M1=list()
  foreach(i=1:B) %do% {
    M1[i]=(n^2)
  }
})

我的計算機(2核)上經過的時間分別為59.472和44.932。 顯然,並行化沒有任何改進:實際上,性能更差!


下面顯示了一個更好的示例,其中主要任務在計算需求方面要昂貴得多:

x <- iris[which(iris[,5] != "setosa"), c(1,5)]
trials <- 10000
ptime <- system.time({
  r <- foreach(icount(trials), .combine=cbind) %dopar% {
    ind <- sample(100, 100, replace=TRUE)
    result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
    coefficients(result1)
    }
  })
stime <- system.time({
  r <- foreach(icount(trials), .combine=cbind) %do% {
    ind <- sample(100, 100, replace=TRUE)
    result1 <- glm(x[ind,2]~x[ind,1], family=binomial(logit))
    coefficients(result1)
  }
})

經過時間分別為24.709和34.502:增長28%。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM