snow如何向工人分发列表元素?

时间:2013-05-10 14:26:33

标签: r parallel-processing snow

调用parLapply()时,每个工作进程发送了多少列表元素?例如,假设我们在雪SOCK集群上有6个元素和2个工作者的列表。 parLapply()是否在一个发送调用中向每个worker发送两个列表元素,或者它是否每次发送一个元素?

我想最小化我的集群通信开销(我有许多列表元素可以由每个CPU相对快速地处理),并且从我在htop CPU上看到的表看起来像雪,它当时正在发送一个列表元素。是否可以设置在一次发送呼叫中调度的列表元素的数量?

1 个答案:

答案 0 :(得分:4)

parLapply函数将输入拆分为每个工作一个块。它使用splitList函数执行此操作,如parLapply的实现中所示:

function (cl = NULL, X, fun, ...) 
  do.call(c, clusterApply(cl, x = splitList(X, length(cl)), fun = lapply,
                          fun, ...), quote = TRUE)

因此,通过一个包含6个元素和2个工作者的列表,它将向每个工作者发送3个元素,每个工作者只需一次“发送”操作。这类似于mclapply mc.preschedule设置为TRUE(默认值)的行为。

所以似乎parLapply已经在执行您想要的优化。

有趣的是,通过在lapply的定义中简单地将mclapply更改为parLapply,您可以创建一个混合并行编程函数,该函数可以很好地与具有许多节点的节点一起使用芯