我在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
)。列表大小对此没有任何影响。