繁体   English   中英

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

[英]How can you initialize workers with doSMP?

有没有办法在snow包中初始化类似于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())

initEnvir有一个initEnvir选项,但是?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. 

每个worker需要一个大型对象的副本才能运行我发送给foreach的表达式。 另外,我需要使用相同版本的这些大对象来调用foreach几百次。 为每次调用foreach复制这些对象效率很低。

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

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

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

foreach(x=iter(x),y=iter(y),z=iter(z) ) %dopar% (x*y*z)

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

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

zed <- 20:1
foreach(x=iter(x) ) %dopar% (x*zed)

尝试这个:

library(doSMP)
library(foreach)
w <- startWorkers(workerCount = 4)
registerDoSMP(w)
foreach(i = 1:3) %dopar% sqrt(i)

或者你可以使用doSNOW和

registerDoSNOW(cl)

http://cran.r-project.org/web/packages/doSNOW/doSNOW.pdf

最后,有doMC(不适用于Windows)

library(doMC)
registerDoMC()
foreach(i = 1:3) %dopar% sqrt(i)

所有这些技术都在2.14中的新并行软件包之前工作,我相信这些技术已经完成了这些技术的统一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM