Rmpi从属函数调用用户定义函数时出错
我已经编写了一个Rmpi代码,在其中我希望主人与奴隶平等地分担工作负担。因此,函数Rmpi从属函数调用用户定义函数时出错,r,parallel-processing,mpi,sigpipe,R,Parallel Processing,Mpi,Sigpipe,我已经编写了一个Rmpi代码,在其中我希望主人与奴隶平等地分担工作负担。因此,函数work\u by_master执行mpi.bcast.cmdtowork\u by_slaves,这两个函数在执行发送-接收以交换结果之前都会调用work\u to\u be\u done\u per\u process 我不断地犯错误: Error in mpi.probe(source, tag, comm, status) : ignoring SIGPIPE signal Calls: work_by_m
work\u by_master
执行mpi.bcast.cmd
towork\u by_slaves
,这两个函数在执行发送-接收以交换结果之前都会调用work\u to\u be\u done\u per\u process
我不断地犯错误:
Error in mpi.probe(source, tag, comm, status) : ignoring SIGPIPE signal
Calls: work_by_master -> mpi.recv.Robj -> mpi.probe -> .Call
我努力去理解错误是什么,最后在投入了大量的时间之后,我间接地意识到错误可能来自这样一个事实,即从属函数不能以嵌套的方式调用用户定义的函数。当我将work\u to\u be\u done\u per\u process
合并到work\u by\u slaves
中,并且只让主进程调用work\u to\u be\u done\u per\u process
时,错误得到了解决
我还将函数work\u to\u be\u per\u process
复制到work\u to\u be\u per\u process\u by_slaves
和work\u to\u be\u per\u process\u by_master
,并让从属和主分别调用它们。即使这样也没有解决问题。因此,似乎只有我的上述结论才是原因
这是真的吗?还有其他人也遇到过这样的问题,即从机不能从内部调用用户定义的函数吗?有没有正确的方法。根据我在R中并行处理的经验,集群get中使用的每个核心都是一个单独的R环境。所有这些环境都会像启动正常R会话一样进行初始化。因此,启动R会话时默认情况下未加载的任何已使用的定义函数都不可用。将它们加载到工作节点应该可以解决此问题。在a中,我演示了如何对雪簇执行此操作,可能对您有所帮助。您没有选择正确的答案(因为您没有对任何问题进行选择)。如果我们帮助您解决stackoverflow问题,请勾选您认为正确的答案。通过这种方式,社区知道问题已经得到了回答,而回答者也获得了一些声誉。