2015-06-01 71 views
2

我試着用並行程序包在R中測試並行。但在我的例子中(如下面的代碼),並行任務的時間大於單個任務的時間。任何人都可以給我一些建議?在R問題中並行運行

非常感謝!

##parSquareNum.R 
strt <- Sys.time() 
workerFunc <- function(n) { return(n^2) } 
values <- 1:1000000 
library(parallel) 
## Number of workers (R processes) to use: 
cores <- detectCores() 
## Set up the ’cluster’ 
cl <- makeCluster(cores-1) 
## Parallel calculation (parLapply): 
res <- parLapply(cl, values, workerFunc) 
## Shut down cluster 
write(Sys.time()-strt, 'parallel.txt') 
stopCluster(cl) 

##singleSquareNum.R 

## The worker function to do the calculation: 
strt <- Sys.time() 
workerFunc <- function(n) { return(n^2) } 
## The values to apply the calculation to: 
values <- 1:1000000 
## Serial calculation: 
res <- lapply(values, workerFunc) 
##print(unlist(res)) 
write(Sys.time() -strt, 'single.txt') 
+0

併發性不太可能對核心的簡單任務有益,因爲分派和重組過程也需要時間。劃分出複雜的任務將需要證明好處。 –

回答

3

你看到這個的主要原因是因爲加載庫和製作集羣需要一些時間。 res之前移動strt <- Sys.time()到右,你會看到一個區別,特別是如果你增加values

##parSquareNum.R 
workerFunc <- function(n) { return(n^2) } 
values <- 1:1000000 
library(parallel) 
## Number of workers (R processes) to use: 
cores <- detectCores() 
## Set up the ’cluster’ 
cl <- makeCluster(cores-1) 
## Parallel calculation (parLapply): 
strt <- Sys.time() 
res <- parLapply(cl, values, workerFunc) 
write(Sys.time()-strt, 'parallel.txt') 
## Shut down cluster 
stopCluster(cl) 

##singleSquareNum.R 

## The worker function to do the calculation: 
workerFunc <- function(n) { return(n^2) } 
## The values to apply the calculation to: 
values <- 1:1000000 
## Serial calculation: 
strt <- Sys.time() 
res <- lapply(values, workerFunc) 
##print(unlist(res)) 
write(Sys.time() -strt, 'single.txt') 

值當我跑我得到0.6941409秒,並行和1.117002秒單。 1.6倍加速。我正在使用i7芯片。

+0

非常感謝您的回答! –