1

Rパッケージのドキュメントを理解しようとしたとき、パッケージのドキュメントのparallel8 ページにあるコード行を読んだときに、この質問に遭遇しました。以下のコードをコピーしました。にちょうど等しいことに注意してください。mc2

# 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 行目で再度実行され、作成者はmaster のメソッドにlibrary(boot)必要であると述べています。c()

私の当初の理解では、makeCluster(mc)2 つのワーカー プロセスが作成され、マスター プロセスはその 1 つです。makeCluster(mc)によって作成された各ワーカーは、マスター プロセスとは異なるように見えます。したがってlibrary(boot)、マスタープロセスで実行する必要があります。私はこれで正しいですか?

8 コアの CPU を使用している場合、7 つを超える ( >7 ) ワーカー プロセスを作成してもまったく役に立たないということですか? ありがとうございました。

4

1 に答える 1