2

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

我的第一个技巧是使用“并行”库中的 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)

但是,我的第二种方法使用“foreach”包中的 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()

我通过更改“no_cores”值进行测试。(即no_cores <- detectCores() - x)。列表大小对此没有影响。

4

0 回答 0