0

我写了一个 Rmpi​​ 代码,希望主人与奴隶平等地分担工作负担。因此,函数work_by_master会在进行发送-接收以交换结果之前mpi.bcast.cmd对其进行work_by_slaves调用。work_to_be_done_per_process

我不断收到一个错误:

Error in mpi.probe(source, tag, comm, status) : ignoring SIGPIPE signal
Calls: work_by_master -> mpi.recv.Robj -> mpi.probe -> .Call

我很难理解错误是什么,最后在投入大量时间后,间接意识到错误可能来自奴隶无法以嵌套方式调用用户定义函数的事实。当我合并并只让主调用时work_to_be_done_per_process,错误就解决了。work_by_slaveswork_to_be_done_per_process

我还将函数复制work_to_be_done_per_processwork_to_be_done_per_process_by_slavesandwork_to_be_done_per_process_by_master中,让从属和主控分别调用它们。即使这样也没有解决问题。因此,似乎只有我的上述结论是原因。

这是真的吗?有没有其他人也遇到过从机无法从内部调用用户定义函数的问题?有没有办法正确地做到这一点。

4

1 回答 1

2

根据我在 R 中进行并行处理的经验,集群中使用的每个核心都是一个单独的 R 环境。所有这些环境都被初始化,就像您将启动一个正常的 R 会话一样。因此,在启动 R 会话时默认未加载的任何已使用的已定义函数都不可用。将它们加载到工作节点应该可以解决这个问题。在最近的一篇博文中,我展示了如何为 SNOW 集群执行此操作,也许它对您有些用处。

于 2012-02-06T10:52:45.600 回答