如何使用doSMP初始化工作人员?

Jos*_*ich 5 parallel-processing r

有没有办法初始化类似于clusterEvalQclusterExport雪包中的doSMP集群?例如:

x <- 1:10
y <- 10:1
z <- rnorm(10)
cl <- makeSOCKcluster(2)
clusterEvalQ(cl, library(quantmod))
clusterExport(cl, list("x","y","z"))
clusterEvalQ(cl, ls())
clusterEvalQ(cl, search())
Run Code Online (Sandbox Code Playgroud)

可以initEnvir选择doSMP,但是?doSMP

 ‘initEnvir’ is a function to be executed by each worker before any
 tasks are executed associated with a foreach.  Its purpose is to
 initialize the execution environment, or the worker in general.
 It is only executed by a worker if that worker executes at least
 one task associated with the foreach.
Run Code Online (Sandbox Code Playgroud)

每个工作人员都需要一个大型对象的副本才能运行我发送给的表达式foreach.另外,我需要调用foreach几百次,这些大型对象的版本相同.为每次调用复制这些对象都是低效的foreach.

即使没有现成的方法来做到这一点,我也会很感激.

42-*_*42- 1

第一个参数foreach...传输迭代对象以评估目标表达式。iter如果您只需要对象的一部分,那么仅传递对象的一部分可能会更有效。

w <- startWorkers(workerCount = 4)
registerDoSMP(w)

foreach(x=iter(x),y=iter(y),z=iter(z) ) %dopar% (x*y*z)
Run Code Online (Sandbox Code Playgroud)

调用环境中的对象仍然可用:

foreach(1:10 ) %dopar% (x*y*z)  # Somewhat repetitious # 

zed <- 20:1
foreach(x=iter(x) ) %dopar% (x*zed)
Run Code Online (Sandbox Code Playgroud)