这个问题在什么是在 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
:根本没有时间!
为了减少开销并避免每次计算出现新的分叉,我想使用本 Rmpi 教程中示例的主/从逻辑。我可以为奴隶提供 的新值theta
,这将避免在每次新计算时出现新的分叉,(我猜)在每个新分叉处复制整个内存,等等。由于theta
很小,因此 的结果也很小,my.function
进程之间的计算会很快,这将允许在后续计算中获得大量时间。
但是,有人告诉我 MPI 是一种更适合使用多台计算机的协议。我使用的是多核计算机(16 核),有人告诉我更轻的协议更适合。
你能给我一个建议吗?特别是,是否可以使用该parallel
软件包在多核计算机上实现主/从系统?