0

这个问题在什么是在 R 中并行化矢量化函数的最简单方法中没有答案 因为我不是要求一种简单的方法,而是要求通过主/从系统额外控制进程的操作以及何时死亡。

这是我的问题:我成功使用mcparallelmccollect并行化了一些任务,如下所示(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:根本没有时间!

为了减少开销并避免每次计算出现新的分叉,我想使用本 Rmpi​​ 教程中示例的主/从逻辑。我可以为奴隶提供 的新值theta,这将避免在每次新计算时出现新的分叉,(我猜)在每个新分叉处复制整个内存,等等。由于theta很小,因此 的结果也很小,my.function进程之间的计算会很快,这将允许在后续计算中获得大量时间。

但是,有人告诉我 MPI 是一种更适合使用多台计算机的协议。我使用的是多核计算机(16 核),有人告诉我更轻的协议更适合。

你能给我一个建议吗?特别是,是否可以使用该parallel软件包在多核计算机上实现主/从系统?

4

1 回答 1

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)

我认为它会做我想做的事,但我仍然等待其他建议(因此我不接受我自己的答案)。

于 2013-03-16T08:32:20.663 回答