R中并行执行的速度改进不一致?

时间:2015-09-14 13:25:40

标签: r performance foreach parallel-processing doparallel

我在R中使用并行编程尝试了一些基本的东西。结果非常不一致。

我的第一个技巧是使用" parallel"中的parSapply()函数。图书馆。结果是一致的。随着我向并行进程添加更多内核,速度显着提高:

library(parallel)

# Initiate test list
testlist <- 2:10000000

# Initiate test function
testfunction <- function(x) {
  c(x, x^2, x^3)
}

# Calculate the number of cores
no_cores <- detectCores()

# Initiate cluster
cl <- makeCluster(no_cores)
clusterExport(cl, "testlist")

# Execute things
system.time(parSapply(cl, testlist, testfunction))

# Close cluster
stopCluster(cl)

但是,我的第二种方法使用来自&#34; foreach&#34;的foreach()函数。包。其结果不一致。当我使用2个核心而不是1个核心时,速度会提高。但是,当我使用3或4个核心时,没有改善。为什么会这样?

library(parallel)
library(foreach)
library(doParallel)

# Initiate test list
testlist <- 2:100000

# Initiate test function
testfunction <- function(x) {
  c(x, x^2, x^3)
}

# Initiate separate parallel function
parallelfunction <- function(x) {
  foreach(x = testlist, .combine = c, .export = "testfunction") %dopar% {
    testfunction(x)
  }
}

# Calculate the number of cores
no_cores <- detectCores() - 3

# Create an implicit cluster
registerDoParallel(no_cores)

# Do things
system.time(parallelfunction())

gc()

# Stop implicit cluster
stopImplicitCluster()

我通过更改&#34; no_cores&#34;进行测试值。 (即no_cores <- detectCores() - x)。列表大小对此没有任何影响。

0 个答案:

没有答案