当我试图了解R
包的文档时parallel
,我在阅读包文档第 8 页上的一些代码行时遇到了这个问题。我已经复制了下面的代码。请注意,mc
仅等于2
。
# mc = 2
cl <- makeCluster(mc)
cd4.rg <- function(data, mle) MASS::mvrnorm(nrow(data), mle$m, mle$v)
cd4.mle <- list(m = colMeans(cd4), v = var(cd4))
clusterExport(cl, c("cd4.rg", "cd4.mle"))
junk <- clusterEvalQ(cl, library(boot)) # discard result
clusterSetRNGStream(cl, 123)
res <- clusterEvalQ(cl, boot(cd4, corr, R = 500,
+ sim = "parametric", ran.gen = cd4.rg, mle = cd4.mle))
library(boot) # needed for c() method on master
cd4.boot <- do.call(c, res)
boot.ci(cd4.boot, type = c("norm", "basic", "perc"),
+ conf = 0.9, h = atanh, hinv = tanh)
stopCluster(cl)
在第 5 行,该命令library(boot)
已在 上进行评估cl
,但在第 8 行library(boot)
再次运行,作者说它是c()
master 上的方法所必需的。
我原来的理解是:makeCluster(mc)
创建两个worker进程,master进程就是其中之一。现在看起来,由创建的每个工人makeCluster(mc)
都与主进程不同。因此library(boot)
必须在主进程上运行。我说得对吗?
如果我有一个 8 核 CPU,这是否意味着创建超过 7 个(>7)工作进程完全没有用?谢谢你。