这个问题没有答案 在R?中并行化矢量化函数的最简单方法是什么?因为我不是要求一个简单的方法,而是通过主/从系统对进程执行什么以及何时死亡进行额外控制。
以下是我的问题:我成功使用mcparallel
和mccollect
来并行化某些任务,沿着以下行(X
是一个列表):
p1 <- mcparallel( lapply( X[1:25], function(x) my.function(x, theta) ) )
p2 <- mcparallel( lapply( X[26:50], function(x) my.function(x, theta) ) )
p3 <- mcparallel( lapply( X[51:75], function(x) my.function(x, theta) ) )
x4 <- lapply(X[76:100], function(x) my.function(x, theta) )
c( mccollect(p1), mccollect(p2), mccollect(p3), x4 )
X
的元素很大,参数theta
很小,目的是在theta
上执行优化。请注意mclapply(X, ...)
对我的问题执行非常(几乎没有时间)。我还尝试了%dopar%
套餐中的foreach
:根本没有获得任何时间!
为了减少开销并避免每次计算时出现新的分支,我想使用this Rmpi tutorial中举例说明的主/从逻辑。我可以为从属服务器提供theta
的新值,这样可以避免每次新计算时出现新的分支,并且(我猜)在每个新的分支上复制整个内存,等等。由于theta
很小,my.function
的结果也很小,因此进程之间的计算速度很快,这将允许在后续计算中获得大量时间。
但是,我被告知MPI是一种更适合使用多台计算机的协议。我使用多核计算机(16核),我被告知更轻的协议适合。
你能给我一个建议吗?特别是,是否可以使用parallel
包在多核计算机上实现主/从系统?
答案 0 :(得分:0)
我找到了一个解决方案。
> library('parallel')
> makeCluster(2) -> cl
> # loading data to nodes:
> invisible(clusterApply( cl, 4:5, function(t) a <<- t ))
> # computations on these data with different arguments
> clusterApply( cl, 1:2, function(t) a+t )
[[1]]
[1] 5
[[2]]
[1] 7
> clusterApply( cl, 10:11, function(t) a+t )
[[1]]
[1] 14
[[2]]
[1] 16
> stopCluster(cl)
我认为它会做我想要的,但我仍然在等待其他建议(因此我不接受我自己的答案)。